function StrLenW(s: PWideChar): Integer; Var i: Integer; begin if s=nil then begin Result:=0; exit; end; i:=0; try while (s[i]<>#0) do inc(i); except end; Result:=i; end;
function NewTextOutA(hdc: HDC; x,y: Integer; text: PAnsiChar; len: Integer): BOOL; stdcall; Var s: String; begin try if Len<0 then Len:=strlen(text); If Len>0 then begin SetLength(s,len); FillChar(s[1],len+1,0); Move(text^,s[1],len); if @ConvertTextFunction<>nil then s:=ConvertTextFunction(s); if @OldTextOutA<>nil then Result:=OldTextOutA(hdc,x,y,PAnsiChar(s),length(s)) else Result:=False; end else Result:=OldTextOutA(hdc,x,y,PAnsiChar(s),0); except Result:=False; end; end;
function NewTextOutW(hdc: HDC; x,y: Integer; text: PWideChar; len: Integer): BOOL; stdcall; Var s: WideString; begin try if Len<0 then Len:=strlenW(text); If Len>0 then begin SetLength(s,len); FillChar(s[1],len*2+2,0); Move(text^,s[1],len*2); if @ConvertTextFunction<>nil then s:=ConvertTextFunction(s); if @OldTextOutW<>nil then Result:=OldTextOutW(hdc,x,y,PWideChar(s),length(s)) else Result:=False; end else Result:=OldTextOutW(hdc,x,y,PWideChar(s),0); except Result:=False; end; end; function NewExtTextOutA(hdc: HDC; x,y: Integer; Options: DWORD; Clip: PRect; text: PAnsiChar; len: Integer; dx: PInteger): BOOL; stdcall; Var s: String; begin try if Len<0 then Len:=strlen(text); // ??? if Len>0 then begin SetLength(s,len); FillChar(s[1],len+1,0); Move(text^,s[1],len); if @ConvertTextFunction<>nil then s:=ConvertTextFunction(s); if @OldExtTextOutA<>nil then
Result:=OldExtTextOutA(hdc,x,y,Options,Clip,PAnsiChar(s),length(s),dx) else Result:=False; end else Result:=OldExtTextOutA(hdc,x,y,Options,Clip,text,0,dx); except Result:=False; end; end;
function NewExtTextOutW(hdc: HDC; x,y: Integer; Options: DWORD; Clip: PRect; text: PWideChar; len: Integer; dx: PInteger): BOOL; stdcall; Var s: WideString; begin try if Len<0 then Len:=strlenW(text); If Len>0 then begin SetLength(s,len); FillChar(s[1],len*2+2,0); Move(text^,s[1],len*2); if @ConvertTextFunction<>nil then s:=ConvertTextFunction(s); if @OldExtTextOutW<>nil then
Result:=OldExtTextOutW(hdc,x,y,Options,Clip,PWideChar(s),length(s),dx) else Result:=False; end else Result:=OldExtTextOutW(hdc,x,y,Options,Clip,text,0,dx); except Result:=False; end; end;
function NewDrawTextA(hdc: HDC; text: PAnsiChar; len: Integer; rect: PRect; Format: DWORD): Integer; stdcall; Var s: String; begin try if Len<0 then Len:=strlen(text); // ??? if Len>0 then begin SetLength(s,len); FillChar(s[1],len+1,0); Move(text^,s[1],len); if @ConvertTextFunction<>nil then s:=ConvertTextFunction(s); if @OldDrawTextA<>nil then Result:=OldDrawTextA(hdc,PAnsiChar(s),length(s),rect,Format) else Result:=0; end else Result:=OldDrawTextA(hdc,text,0,rect,Format); except Result:=0; end; end;
function NewDrawTextW(hdc: HDC; text: PWideChar; len: Integer; rect: PRect; Format: DWORD): Integer; stdcall; Var s: WideString; begin try if Len<0 then Len:=strlenW(text); if len>0 then begin SetLength(s,len); FillChar(s[1],len*2+2,0); Move(text^,s[1],len*2); if @ConvertTextFunction<>nil then s:=ConvertTextFunction(s); if @OldDrawTextW<>nil then Result:=OldDrawTextW(hdc,PWideChar(s),length(s),rect,Format) else Result:=0; end else Result:=OldDrawTextW(hdc,text,0,rect,Format); except Result:=0; end; end;
function NewDrawTextExA(hdc: HDC; text: PAnsiChar; len: Integer; rect: PRect; Format: DWORD; DTParams: PDrawTextParams): Integer; stdcall; Var s: String; begin try if Len<0 then Len:=strlen(text); if len>0 then begin SetLength(s,len); FillChar(s[1],len+1,0); Move(text^,s[1],len); if @ConvertTextFunction<>nil then s:=ConvertTextFunction(s); if @OldDrawTextExA<>nil then
Result:=OldDrawTextExA(hdc,PAnsiChar(s),length(s),rect,Format,DTParams) else Result:=0; end else Result:=OldDrawTextExA(hdc,text,0,rect,Format,DTParams); except Result:=0; end; end;
function NewDrawTextExW(hdc: HDC; text: PWideChar; len: Integer; rect: PRect; Format: DWORD; DTParams: PDrawTextParams): Integer; stdcall; Var s: WideString; begin try if Len<0 then Len:=strlenW(text); if Len>0 then begin SetLength(s,len); FillChar(s[1],len*2+2,0); Move(text^,s[1],len*2); if @ConvertTextFunction<>nil then s:=ConvertTextFunction(s); if @OldDrawTextExW<>nil then
Result:=OldDrawTextExW(hdc,PWideChar(s),length(s),rect,Format,DTParams) else Result:=0; end else Result:=OldDrawTextExW(hdc,text,0,rect,Format,DTParams); except Result:=0; end; end;
function NewTabbedTextOutA(hdc: HDC; x,y: Integer; text: PAnsiChar