有没有适用于TNTControls组件的Pos函数(200)

  • 主题发起人 主题发起人 unjiang
  • 开始时间 开始时间
U

unjiang

Unregistered / Unconfirmed
GUEST, unregistred user!
用了tntControls可以解决unicode问题,并且可以支持regEX的unicode版返回的POS值,但用delphi的pos却没有办法在tntmemo中定位找到的字符串。用pos函数返回的值,设置tntmemo的selstart和sellength,却不正确了。只能自己用widestring参数写pos函数,但是效率却没有汇编的pos函数高了。请问有没有支持tnt的高效pos函数?
 
function WidePMatch(const M: WideString; const P: PWideChar): Boolean;var I, L: Integer; Q, R: PWideChar;begin L := Length(M); if L = 0 then begin Result := False; Exit; end; R := Pointer(M); Q := P; for I := 1 to L do if R^ <> Q^ then begin Result := False; Exit; end else begin Inc(R); Inc(Q); end; Result := True;end;function WidePos(const F: WideString; const S: WideString; const StartIndex: Integer = 1): Integer;var P: PWideChar; I, L: Integer;begin L := Length(S); if (StartIndex > L) or (StartIndex < 1) then begin Result := 0; Exit; end; P := Pointer(S); Inc(P, StartIndex - 1); for I := StartIndex to L do if WidePMatch(F, P) then begin Result := I; Exit; end else Inc(P); Result := 0;end;看看有没有用。
 
去看看我以前发的帖子里面详细介绍了tnt附带的Unicode的函数足够满足你项目的要求
 
function AnsiPos(const Substr, S: string): Integer;DescriptionCall AnsiPos to obtain the byte offset of the Substr parameter, as it appears in the string S. For example, if Substr is the string "AB", and S is the string "ABCDE", AnsiPos returns 1. If Substr does not appear in S, AnsiPos returns 0.[red]Note: This function supports multi-byte character sets (MBCS).[/red]
 
后退
顶部