Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Tooltip akzeptiert kein WideString (https://www.delphipraxis.net/181551-tooltip-akzeptiert-kein-widestring.html)

blablab 24. Aug 2014 22:39

Tooltip akzeptiert kein WideString
 
Hallo!

Ich benutze Delphi7 das ja noch keine echte Wide-Unterstützung hat und hätte gerne einen Tooltip, der einen WideString anzeigen kann. Dazu benutze ich folgenden Code:

Delphi-Quellcode:
var
   toolTip: HWND;
   toolInfo: TOOLINFOW;


function CreateToolTip(hControl: HWND; text: PWideChar): HWND;
const
   TOOLTIPS_CLASSW: PWideChar = 'tooltips_class32';
begin
   Result := CreateWindowExW(
         WS_EX_TOPMOST, TOOLTIPS_CLASSW, '',
         WS_POPUP or TTS_NOPREFIX or TTS_ALWAYSTIP,
         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
         0, 0, HInstance, nil);
   if Result <> 0 then begin
      with toolInfo do begin
         cbSize  := SizeOf(toolInfo);
         uFlags  := TTF_SUBCLASS or TTF_IDISHWND;
         uId     := hControl;
         hInst   := HInstance;
         lpszText := text;
         lParam  := 0;
      end;
      SendMessageW(Result, TTM_ADDTOOL, 0, LPARAM(@toolInfo));
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   toolTip := CreateToolTip(TntDrawGrid1.Handle, 'test');
end;
Trotzdem will der Tooltip nur AnsiStrings akzeptieren, bei einem WideString wird nur das erste Zeichen angezeigt...

Was mache ich falsch?

Grüße
blablab

blablab 24. Aug 2014 23:27

AW: Tooltip akzeptiert kein WideString
 
Du musst statt TTM_ADDTOOL TTM_ADDTOOLW verwenden!

blablab 24. Aug 2014 23:28

AW: Tooltip akzeptiert kein WideString
 
Danke!

himitsu 25. Aug 2014 00:59

AW: Tooltip akzeptiert kein WideString
 
Erstmal kann Delphi 7 Unicode umgehen.
Dort gibt es den WideString (der eine OleAuth-API kapselt und ab Delphi 2009 gibt es dann den nativen Delphi-UnicodeString).

Ach ja, nicht wundern, wenn dennoch deine Unicode-Komponenten nicht überall richtig funktionieren, denn die Nachrichtenbehandlung ist ja dennoch nur ANSI. (außer man tauscht die MessageLoop aus)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz