임프님께서 올려주신 Toolbar2000하고 TBX 적용하고 테스트하던 도중 이상한 현상이 나와서 리포팅드립니다.
올려주셨던 diff patch까지 모두 적용하고 Toolbar2000의 Demo 프로젝트 돌려보다가 툴바에 올려진 Edit부분을 클릭하니 글자가 깨지고 프로그램 종료시에 오류가 나더라구요.
TB2ExtItems.pas 워닝나길래 찾아보니 GetHandleTextW, SetHandleTextW 함수에서 워닝나길래 고쳐봤습니다.
Toolbar2000 원본소스에는 없는걸 보니 아마도 diff 적용 후에 나온것 같습니다.
변환시에 String을 바로 PWideChar로 형변환시켜서 문제가 발생한 할로 보입니다.
function GetHandleTextW(const Handle: HWND): String;
var
S: String;
L: Integer;
WS: WideString;
begin
SetLength(Result, 0);
if Handle = 0 then Exit;
if IsWindowUnicode(Handle) then
begin
L := GetWindowTextLengthW(Handle);
SetLength(WS, L + 1);
GetWindowTextW(Handle, PWideChar(WS), L + 1);
SetLength(WS, L);
Result := WS;
end
else
begin
L := GetWindowTextLength(Handle);
SetLength(S, L + 1);
GetWindowText(Handle, PChar(S), L + 1);
SetLength(S, L);
Result := S;
end;
end;
procedure SetHandleTextW(const Handle: HWND; const S: String);
var
WS: WideString;
begin
if IsWindowUnicode(Handle) then
begin
WS := S;
SetWindowTextW(Handle, PWideChar(WS));
end
else
SetWindowText(Handle, PChar(S));
end;
WideString으로 받은담에 PWideChar로 형변환시켜주니 데모 프로그램이 정상적으로 돌아가네요.
어데다가 올려야 할지 -_-;;
팁이라고 하기에도 뻘쭘해서 자게에 올려봅니다.
|
집에 오는길에 생각해보니 2009에서는 string이 WideString이니 문제가 없었겠네요.
IsWindowUnicode 대신에 델파이 버전으로 체크해버려야 하려나요. -_-;