Скажите мне, чем отличается моя функция PosEx и PosEx текущая, кроме времени ее исполнения ( ), а так же, почему нельзя стандартную заменить на мою (совместимости это не перечит) А так же схемка теста времени Add(MainForm,2953706,21,105) { Width=163 Height=143 } Add(InlineCode,11935733,371,161) { @Hint=#8:Standart| WorkPoints=#5:doPos| EventPoints=#5:onPos| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|21: onPos:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|28:procedure THiAsmClass.doPos;|5:begin|48: _hi_onEvent(onPos,PosEx('123','s123s123s',3));|4:end;|0:|4:end.| link(onPos,14267925:doText,[]) AddHint(34,-61,55,13,@Hint) } Add(InlineCode,16698845,371,224) { @Hint=#2:My| WorkPoints=#5:doPos| EventPoints=#5:onPos| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|21: onPos:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|74:function PosEx2(const SubStr, S: string; Offset: Cardinal = 1): Integer;|15:var str:string;|14: i:integer;|5:begin|13: str := '';|15: Result := 0;|27: if offset > 0 then begin|35: str := CopyEnd(substr,offset);|21: i := Pos(str,s);|44: if i > 0 then Result := i + offset - 1;|38: end else Result := pos(substr,str);|4:end;|0:|28:procedure THiAsmClass.doPos;|5:begin|49: _hi_onEvent(onPos,PosEx2('123','s123s123s',3));|4:end;|0:|4:end.| link(onPos,6078964:doText,[]) AddHint(58,76,29,13,@Hint) } Add(For,10753889,322,161) { End=100000 @IsLib=True link(onEvent,11935733:doPos,[]) link(onStop,3504164:doStop,[(366,174)(366,162)(261,162)(261,174)]) } Add(For,4107591,322,224) { elink(10753889) link(onEvent,16698845:doPos,[]) link(onStop,13453645:doStop,[(366,237)(366,225)(261,225)(261,237)]) } Add(Button,14588975,189,161) { Left=5 Top=10 Caption="test" link(onClick,14186092:doEvent1,[]) } Add(Hub,14186092,238,161) { link(onEvent1,3504164:doStart,[]) link(onEvent2,13453645:doStart,[(262,174)(262,230)]) } Add(TimeCounter,3504164,273,161) { link(onStart,10753889:doFor,[]) link(onStop,3014420:doText,[(312,174)(312,181)]) } Add(TimeCounter,13453645,273,224) { link(onStart,4107591:doFor,[]) link(onStop,5385417:doText,[(313,237)(313,223)]) } Add(Message,11704833,525,196) { } Add(Edit,14267925,420,161) { Left=70 Top=10 } Add(Edit,6078964,420,224) { Left=70 Top=35 } Add(Edit,3014420,469,175) { Left=70 Top=70 Text="time1" link(onChange,6782821:doWork1,[(513,181)]) } Add(Edit,5385417,469,217) { Left=70 Top=95 Text="time2" link(onChange,6782821:doWork3,[(513,223)]) } Add(HubEx,6782821,509,196) { link(onEvent,11704833:doMessage,[]) }
P.S: у меня результаты таковы: time1 = 3300; time2 ~ 3040
|