[utf8vcl-cvs] utf8vcl UTF8VCL.pas, 1.26, 1.27 UTF8VCLMessages.pas, 1.26, 1.27 UTF8VCLUtils.pas, 1.1
Status: Alpha
Brought to you by:
bluelive
From: Bart v. d. W. <blu...@us...> - 2007-03-31 17:03:56
|
Update of /cvsroot/utf8vcl/utf8vcl In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv1136 Modified Files: UTF8VCL.pas UTF8VCLMessages.pas UTF8VCLUtils.pas Log Message: Support for inner frames and MDI was missing, added. Index: UTF8VCLUtils.pas =================================================================== RCS file: /cvsroot/utf8vcl/utf8vcl/UTF8VCLUtils.pas,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** UTF8VCLUtils.pas 25 Mar 2007 11:46:22 -0000 1.15 --- UTF8VCLUtils.pas 31 Mar 2007 17:03:48 -0000 1.16 *************** *** 41,44 **** --- 41,45 ---- type TStdWndProcDef = function(Window: HWND; Msg, WParam: Longint; LParam: Longint): Longint; stdcall; + TStdFrameWndProcDef = function(Window, ChildWindow: HWND; Msg, WParam: Longint; LParam: Longint): Longint; stdcall; TStdWndProcInterceptDef = function(Original: TStdWndProcDef; Window: HWND; Msg, WParam: Longint; LParam: Longint): Longint; Index: UTF8VCL.pas =================================================================== RCS file: /cvsroot/utf8vcl/utf8vcl/UTF8VCL.pas,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** UTF8VCL.pas 28 Mar 2007 20:19:30 -0000 1.26 --- UTF8VCL.pas 31 Mar 2007 17:03:48 -0000 1.27 *************** *** 91,94 **** --- 91,95 ---- TGetFileTitleA = function(FileName: PAnsiChar; Title: PAnsiChar; TitleSize: Word): Smallint; stdcall; TChooseColorAProc = function(var CC: TChooseColorA): Bool; stdcall; + TDefFrameProcA = function(hWnd: HWND; hChldWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var *************** *** 136,139 **** --- 137,142 ---- NonUTF8ChooseColor: TChooseColorAProc; + NonUTF8DefFrameProc: TDefFrameProcA; + implementation *************** *** 155,161 **** TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@SendMessageW)); Result := SendMessageW(hWnd, Msg, TempWParam, TempLParam); ! Result := MessageU2WAfter(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Result, Pointer(@SendMessageW)); end; --- 158,164 ---- TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@SendMessageW), nil); Result := SendMessageW(hWnd, Msg, TempWParam, TempLParam); ! Result := MessageU2WAfter(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Result, Pointer(@SendMessageW), nil); end; *************** *** 164,170 **** TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@PostMessageW)); Result := PostMessageW(hWnd, Msg, TempWParam, TempLParam); ! MessageU2WAfter(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, 0, Pointer(@PostMessageW)); end; --- 167,173 ---- TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@PostMessageW), nil); Result := PostMessageW(hWnd, Msg, TempWParam, TempLParam); ! MessageU2WAfter(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, 0, Pointer(@PostMessageW), nil); end; *************** *** 179,185 **** TStdWndProcDef(Proc) := WndProcConvertW2U(lpPrevWndFunc, StdWndProcInterceptU2W, StdWndProcInterceptW2U); ! MessageU2WBefore(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, TStdWndProcDef(Proc)); Result := CallWindowProcW(Proc, hWnd, Msg, TempWParam, TempLParam); ! Result := MessageU2WAfter(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Result, TStdWndProcDef(Proc)); end; --- 182,188 ---- TStdWndProcDef(Proc) := WndProcConvertW2U(lpPrevWndFunc, StdWndProcInterceptU2W, StdWndProcInterceptW2U); ! MessageU2WBefore(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, TStdWndProcDef(Proc), nil); Result := CallWindowProcW(Proc, hWnd, Msg, TempWParam, TempLParam); ! Result := MessageU2WAfter(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Result, TStdWndProcDef(Proc), nil); end; *************** *** 452,458 **** TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@DefWindowProcW)); Result := DefWindowProcW(hWnd, Msg, TempWParam, TempLParam); ! Result := MessageU2WAfter(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Result, Pointer(@DefWindowProcW)); end; --- 455,461 ---- TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@DefWindowProcW), nil); Result := DefWindowProcW(hWnd, Msg, TempWParam, TempLParam); ! Result := MessageU2WAfter(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Result, Pointer(@DefWindowProcW), nil); end; *************** *** 461,467 **** TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(nil)); Result := DefMDIChildProcW(hWnd, Msg, TempWParam, TempLParam); ! Result := MessageU2WAfter(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Result, Pointer(nil)); end; --- 464,470 ---- TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@DefMDIChildProcW), nil); Result := DefMDIChildProcW(hWnd, Msg, TempWParam, TempLParam); ! Result := MessageU2WAfter(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Result, Pointer(@DefMDIChildProcW), nil); end; *************** *** 470,476 **** TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@DefDlgProcW)); Result := DefDlgProcW(hWnd, Msg, TempWParam, TempLParam); ! Result := MessageU2WAfter(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Result, Pointer(@DefDlgProcW)); end; --- 473,479 ---- TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@DefDlgProcW), nil); Result := DefDlgProcW(hWnd, Msg, TempWParam, TempLParam); ! Result := MessageU2WAfter(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Result, Pointer(@DefDlgProcW), nil); end; *************** *** 599,602 **** --- 602,614 ---- end; + function DefFrameProcAIntercept(hWnd: HWND; hChildWnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; + var + TempWParam, TempLParam: Longint; + begin + MessageU2WBefore(hWnd, hChildWnd, Msg, WParam, LParam, TempWParam, TempLParam, nil, Pointer(@DefFrameProcW)); + Result := DefFrameProcW(hWnd, hChildWnd, Msg, TempWParam, TempLParam); + Result := MessageU2WAfter(hWnd, hChildWnd, Msg, WParam, LParam, TempWParam, TempLParam, Result, nil, Pointer(@DefFrameProcW)); + end; + //============================================================================ *************** *** 691,694 **** --- 703,709 ---- NonUTF8GetFileTitle := HookCommdlg32Func('GetFileTitleA', @GetFileTitleAIntercept); // do not localize NonUTF8ChooseColor := HookCommdlg32Func('ChooseColorA', @ChooseColorAIntercept); // do not localize + + NonUTF8DefFrameProc := HookUser32Func('DefFrameProcA', @DefFrameProcAIntercept); // do not localize + end else Index: UTF8VCLMessages.pas =================================================================== RCS file: /cvsroot/utf8vcl/utf8vcl/UTF8VCLMessages.pas,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** UTF8VCLMessages.pas 31 Mar 2007 13:58:32 -0000 1.26 --- UTF8VCLMessages.pas 31 Mar 2007 17:03:48 -0000 1.27 *************** *** 42,53 **** function StdWndProcInterceptW2U(Original: TStdWndProcDef; hWnd: HWND; Msg, WParam: Longint; LParam: Longint): Longint; ! procedure MessageW2UBefore(hWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! out OutWParam: WPARAM; out OutLParam: LPARAM; Proc: TStdWndProcDef); ! function MessageW2UAfter(hWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! TempWParam: WPARAM; TempLParam: LPARAM; TempResult: LRESULT; Proc: TStdWndProcDef): LRESULT; ! procedure MessageU2WBefore(hWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! out OutWParam: WPARAM; out OutLParam: LPARAM; Proc: TStdWndProcDef); ! function MessageU2WAfter(hWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! TempWParam: WPARAM; TempLParam: LPARAM; TempResult: LRESULT; Proc: TStdWndProcDef): LRESULT; implementation --- 42,53 ---- function StdWndProcInterceptW2U(Original: TStdWndProcDef; hWnd: HWND; Msg, WParam: Longint; LParam: Longint): Longint; ! procedure MessageW2UBefore(hWnd, hChildWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! out OutWParam: WPARAM; out OutLParam: LPARAM; Proc: TStdWndProcDef; FrameProc: TStdFrameWndProcDef); ! function MessageW2UAfter(hWnd, hChildWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! TempWParam: WPARAM; TempLParam: LPARAM; TempResult: LRESULT; Proc: TStdWndProcDef; FrameProc: TStdFrameWndProcDef): LRESULT; ! procedure MessageU2WBefore(hWnd, hChildWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! out OutWParam: WPARAM; out OutLParam: LPARAM; Proc: TStdWndProcDef; FrameProc: TStdFrameWndProcDef); ! function MessageU2WAfter(hWnd, hChildWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! TempWParam: WPARAM; TempLParam: LPARAM; TempResult: LRESULT; Proc: TStdWndProcDef; FrameProc: TStdFrameWndProcDef): LRESULT; implementation *************** *** 77,83 **** else begin ! MessageW2UBefore(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Original); Result := Original(hWnd, Msg, TempWParam, TempLParam); ! Result := MessageW2UAfter(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Result, Original); end; end; --- 77,83 ---- else begin ! MessageW2UBefore(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Original, nil); Result := Original(hWnd, Msg, TempWParam, TempLParam); ! Result := MessageW2UAfter(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Result, Original, nil); end; end; *************** *** 87,97 **** TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@CallWindowProcW)); Result := CallWindowProcW(@Original, hWnd, Msg, WParam, LParam); ! Result := MessageU2WAfter(hWnd, Msg, WParam, LParam, TempWParam, TempLParam, Result, Pointer(@CallWindowProcW)); end; ! procedure MessageW2UBefore(hWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! out OutWParam: WPARAM; out OutLParam: LPARAM; Proc: TStdWndProcDef); var L: Integer; --- 87,97 ---- TempWParam, TempLParam: Longint; begin ! MessageU2WBefore(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Pointer(@CallWindowProcW), nil); Result := CallWindowProcW(@Original, hWnd, Msg, WParam, LParam); ! Result := MessageU2WAfter(hWnd, 0, Msg, WParam, LParam, TempWParam, TempLParam, Result, Pointer(@CallWindowProcW), nil); end; ! procedure MessageW2UBefore(hWnd, hChildWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! out OutWParam: WPARAM; out OutLParam: LPARAM; Proc: TStdWndProcDef; FrameProc: TStdFrameWndProcDef); var L: Integer; *************** *** 103,108 **** WM_GETTEXT: begin ! Assert(not SpecialWndProc(Cardinal(@Proc))); ! L := Proc(hWnd, WM_GETTEXTLENGTH, UnusedWParam, UnusedLParam); if L > 0 then begin --- 103,110 ---- WM_GETTEXT: begin ! if Assigned(Proc) then ! L := Proc(hWnd, WM_GETTEXTLENGTH, UnusedWParam, UnusedLParam) ! else ! L := FrameProc(hWnd, hChildWnd, WM_GETTEXTLENGTH, UnusedWParam, UnusedLParam); if L > 0 then begin *************** *** 116,121 **** LB_GETTEXT: begin ! Assert(not SpecialWndProc(Cardinal(@Proc))); ! L := Proc(hWnd, LB_GETTEXTLEN, InWParam, UnusedLParam); if L > 0 then GetMem(Pointer(OutLParam), SizeOf(Utf8Byte) * (L + 1)) --- 118,125 ---- LB_GETTEXT: begin ! if Assigned(Proc) then ! L := Proc(hWnd, LB_GETTEXTLEN, InWParam, UnusedLParam) ! else ! L := FrameProc(hWnd, hChildWnd, LB_GETTEXTLEN, InWParam, UnusedLParam); if L > 0 then GetMem(Pointer(OutLParam), SizeOf(Utf8Byte) * (L + 1)) *************** *** 125,130 **** CB_GETLBTEXT: begin ! Assert(not SpecialWndProc(Cardinal(@Proc))); ! L := Proc(hWnd, CB_GETLBTEXTLEN, InWParam, UnusedLParam); GetMem(Pointer(OutLParam), SizeOf(Utf8Byte) * (L + 1)) end; --- 129,136 ---- CB_GETLBTEXT: begin ! if Assigned(Proc) then ! L := Proc(hWnd, CB_GETLBTEXTLEN, InWParam, UnusedLParam) ! else ! L := FrameProc(hWnd, hChildWnd, CB_GETLBTEXTLEN, InWParam, UnusedLParam); GetMem(Pointer(OutLParam), SizeOf(Utf8Byte) * (L + 1)) end; *************** *** 166,171 **** end; ! function MessageW2UAfter(hWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! TempWParam: WPARAM; TempLParam: LPARAM; TempResult: LRESULT; Proc: TStdWndProcDef): LRESULT; var Len: Integer; --- 172,177 ---- end; ! function MessageW2UAfter(hWnd, hChildWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! TempWParam: WPARAM; TempLParam: LPARAM; TempResult: LRESULT; Proc: TStdWndProcDef; FrameProc: TStdFrameWndProcDef): LRESULT; var Len: Integer; *************** *** 227,232 **** GetMem(X, SizeOf(Utf8Byte) * (TempResult + 1)); try ! Assert(not SpecialWndProc(Cardinal(@Proc))); ! Len := Proc(hWnd, WM_GETTEXT, TempResult + 1, LParam(X)); // Len is exclusive #0 TempResult := ConvertFromUTF8Len(X, Len); --- 233,240 ---- GetMem(X, SizeOf(Utf8Byte) * (TempResult + 1)); try ! if Assigned(Proc) then ! Len := Proc(hWnd, WM_GETTEXT, TempResult + 1, LParam(X)) ! else ! Len := FrameProc(hWnd, hChildWnd, WM_GETTEXT, TempResult + 1, LParam(X)); // Len is exclusive #0 TempResult := ConvertFromUTF8Len(X, Len); *************** *** 242,247 **** GetMem(X, SizeOf(Utf8Byte) * (TempResult + 1)); try ! Assert(not SpecialWndProc(Cardinal(@Proc))); ! Len := Proc(hWnd, LB_GETTEXT, InWParam, LParam(X)); TempResult := ConvertFromUTF8Len(X, Len); finally --- 250,257 ---- GetMem(X, SizeOf(Utf8Byte) * (TempResult + 1)); try ! if Assigned(Proc) then ! Len := Proc(hWnd, LB_GETTEXT, InWParam, LParam(X)) ! else ! Len := FrameProc(hWnd, hChildWnd, LB_GETTEXT, InWParam, LParam(X)); TempResult := ConvertFromUTF8Len(X, Len); finally *************** *** 256,261 **** GetMem(X, SizeOf(Utf8Byte) * (TempResult + 1)); try ! Assert(not SpecialWndProc(Cardinal(@Proc))); ! Len := Proc(hWnd, CB_GETLBTEXT, InWParam, LParam(X)); TempResult := ConvertFromUTF8Len(X, Len); finally --- 266,273 ---- GetMem(X, SizeOf(Utf8Byte) * (TempResult + 1)); try ! if Assigned(Proc) then ! Len := Proc(hWnd, CB_GETLBTEXT, InWParam, LParam(X)) ! else ! Len := FrameProc(hWnd, hChildWnd, CB_GETLBTEXT, InWParam, LParam(X)); TempResult := ConvertFromUTF8Len(X, Len); finally *************** *** 268,273 **** end; ! procedure MessageU2WBefore(hWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! out OutWParam: WPARAM; out OutLParam: LPARAM; Proc: TStdWndProcDef); var L: Integer; --- 280,285 ---- end; ! procedure MessageU2WBefore(hWnd, hChildWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! out OutWParam: WPARAM; out OutLParam: LPARAM; Proc: TStdWndProcDef; FrameProc: TStdFrameWndProcDef); var L: Integer; *************** *** 282,286 **** WM_GETTEXT: begin ! L := CallWindowProcW(@Proc, hWnd, WM_GETTEXTLENGTH, UnusedWParam, UnusedLParam); if L > 0 then begin --- 294,301 ---- WM_GETTEXT: begin ! if Assigned(FrameProc) then ! L := FrameProc(hWnd, hChildWnd, WM_GETTEXTLENGTH, UnusedWParam, UnusedLParam) ! else ! L := CallWindowProcW(@Proc, hWnd, WM_GETTEXTLENGTH, UnusedWParam, UnusedLParam); if L > 0 then begin *************** *** 294,298 **** LB_GETTEXT: begin ! L := CallWindowProcW(@Proc, hWnd, LB_GETTEXTLEN, InWParam, UnusedLParam); if L > 0 then GetMem(Pointer(OutLParam), SizeOf(WideChar) * (L + 1)) --- 309,316 ---- LB_GETTEXT: begin ! if Assigned(FrameProc) then ! L := FrameProc(hWnd, hChildWnd, LB_GETTEXTLEN, InWParam, UnusedLParam) ! else ! L := CallWindowProcW(@Proc, hWnd, LB_GETTEXTLEN, InWParam, UnusedLParam); if L > 0 then GetMem(Pointer(OutLParam), SizeOf(WideChar) * (L + 1)) *************** *** 302,306 **** CB_GETLBTEXT: begin ! L := CallWindowProcW(@Proc, hWnd, CB_GETLBTEXTLEN, InWParam, UnusedLParam); GetMem(Pointer(OutLParam), SizeOf(WideChar) * (L + 1)) end; --- 320,327 ---- CB_GETLBTEXT: begin ! if Assigned(FrameProc) then ! L := FrameProc(hWnd, hChildWnd, CB_GETLBTEXTLEN, InWParam, UnusedLParam) ! else ! L := CallWindowProcW(@Proc, hWnd, CB_GETLBTEXTLEN, InWParam, UnusedLParam); GetMem(Pointer(OutLParam), SizeOf(WideChar) * (L + 1)) end; *************** *** 341,346 **** end; ! function MessageU2WAfter(hWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! TempWParam: WPARAM; TempLParam: LPARAM; TempResult: LRESULT; Proc: TStdWndProcDef): LRESULT; var Len: Integer; --- 362,367 ---- end; ! function MessageU2WAfter(hWnd, hChildWnd: HWND; Msg: UINT; InWParam: WPARAM; InLParam: LPARAM; ! TempWParam: WPARAM; TempLParam: LPARAM; TempResult: LRESULT; Proc: TStdWndProcDef; FrameProc: TStdFrameWndProcDef): LRESULT; var Len: Integer; *************** *** 400,404 **** GetMem(X, SizeOf(WideChar) * (TempResult + 1)); try ! Len := CallWindowProcW(@Proc, hWnd, WM_GETTEXT, TempResult + 1, LParam(X)); TempResult := ConvertToUTF8Len(X, Len) finally --- 421,428 ---- GetMem(X, SizeOf(WideChar) * (TempResult + 1)); try ! if Assigned(FrameProc) then ! Len := FrameProc(hWnd, hChildWnd, WM_GETTEXT, TempResult + 1, LParam(X)) ! else ! Len := CallWindowProcW(@Proc, hWnd, WM_GETTEXT, TempResult + 1, LParam(X)); TempResult := ConvertToUTF8Len(X, Len) finally *************** *** 413,417 **** GetMem(X, SizeOf(WideChar) * (TempResult + 1)); try ! Len := CallWindowProcW(@Proc, hWnd, LB_GETTEXT, InWParam, LParam(X)); TempResult := ConvertToUTF8Len(X, Len) finally --- 437,444 ---- GetMem(X, SizeOf(WideChar) * (TempResult + 1)); try ! if Assigned(FrameProc) then ! Len := FrameProc(hWnd, hChildWnd, LB_GETTEXT, InWParam, LParam(X)) ! else ! Len := CallWindowProcW(@Proc, hWnd, LB_GETTEXT, InWParam, LParam(X)); TempResult := ConvertToUTF8Len(X, Len) finally *************** *** 426,430 **** GetMem(X, SizeOf(WideChar) * (TempResult + 1)); try ! Len := CallWindowProcW(@Proc, hWnd, CB_GETLBTEXT, InWParam, LParam(X)); TempResult := ConvertToUTF8Len(X, Len); finally --- 453,460 ---- GetMem(X, SizeOf(WideChar) * (TempResult + 1)); try ! if Assigned(FrameProc) then ! Len := FrameProc(hWnd, hChildWnd, CB_GETLBTEXT, InWParam, LParam(X)) ! else ! Len := CallWindowProcW(@Proc, hWnd, CB_GETLBTEXT, InWParam, LParam(X)); TempResult := ConvertToUTF8Len(X, Len); finally |