From a2bedef1b01344f9a6a20b5efe9cc28af2ed6152 Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Sat, 24 Nov 2007 21:03:37 +0000 Subject: [PATCH] Fixed getting unicode strings from TMemo on win32 git-svn-id: trunk@13008 - --- lcl/interfaces/win32/win32memostrings.inc | 27 ++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/lcl/interfaces/win32/win32memostrings.inc b/lcl/interfaces/win32/win32memostrings.inc index fa4d6b1465..0b08d15181 100644 --- a/lcl/interfaces/win32/win32memostrings.inc +++ b/lcl/interfaces/win32/win32memostrings.inc @@ -34,7 +34,7 @@ type function TWin32MemoStrings.GetLineLength(Index: Integer): Integer; begin - Result := SendMessage(fHandle, EM_LINELENGTH, SendMessage(fHandle, EM_LINEINDEX, Index, 0),0); + Result := SendMessage(fHandle, EM_LINELENGTH, SendMessage(fHandle, EM_LINEINDEX, Index, 0), 0); end; function TWin32MemoStrings.GetLineStart(Index: Integer): Integer; @@ -70,17 +70,38 @@ end; function TWin32MemoStrings.Get(Index: Integer): string; var len: Integer; + WideBuffer: WideString; + AnsiBuffer: string; begin len := GetLineLength(Index); + +{$ifdef WindowsUnicodeSupport} + if UnicodeEnabledOS then + begin + Setlength(WideBuffer, len); + len := SendMessageW(fHandle, EM_GETLINE, Index, lparam(PWideChar(WideBuffer))); + + Result := Utf8Encode(WideBuffer); + end + else + begin + Setlength(AnsiBuffer, len); + len := SendMessage(fHandle, EM_GETLINE, Index, lparam(PChar(AnsiBuffer))); + + Result := AnsiToUtf8(AnsiBuffer); + end; +{$else} Setlength(Result, len); if len = 0 then Exit; - + // no need for temp buf and moving // the result is without null terminator. PWord(@Result[1])^ := len+1; len := SendMessage(fHandle, EM_GETLINE, Index, lparam(pchar(Result))); - // readjust length in case something went wrong + + // read just length in case something went wrong Setlength(Result, len); +{$endif} end; procedure TWin32MemoStrings.SetUpdateState(Updating: Boolean);