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/)
-   -   Delphi Tooltip eines beliebigen Controls anzeigen lassen (https://www.delphipraxis.net/85814-tooltip-eines-beliebigen-controls-anzeigen-lassen.html)

Eichhoernchen09 5. Feb 2007 10:44


Tooltip eines beliebigen Controls anzeigen lassen
 
Hallo!

Ich habe folgendes Problem:

ich möchte, dass der Tooltip eines BELIEBIGEN Objektes angezeigt wird, wenn ich die rechte Maustaste auf dem Objekt betätige.
Diese Objekte sind nicht immer Delphi Objekte. Dazu habe ich einen Hook, der bei Mausklick eine Nachricht sendet. Meine Frage ist nun, wie diese Nachricht genau aussehen muss, damit der Tooltip angezeigt wird.
Ich bin bisher bei der Nachricht TTM_RELAYEVENT gelandet, die muss aber an das Tooltip HWND gesendet werden, was ich nicht kenne. Wie könnte ich das zu dem Control, über dem die Maus ist, herausfinden? (Von dem angeklickten Control habe ich HWND).

Vielen Dank für Eure Hilfe!

Eichhoernchen09 5. Feb 2007 12:45

Re: Tooltip eines beliebigen Controls anzeigen lassen
 
Es würde mir außerdem weiterhelfen, wenn jemand Beispiel-Code posten könnten, wie die Nachricht TTM_GETTEXT richtig verwendet wird. Ich bekomme dort nämlich nur einen leeren String zurück. Ich habe in diesem Zusammenhang von "Marshalling" der Daten gehört, kann damit aber nichts anfangen...

bitsetter 6. Feb 2007 00:05

Re: Tooltip eines beliebigen Controls anzeigen lassen
 
Hi,
hier ist ein getestetes Beispiel, wie man TTM_GETTEXT verwendet. Irgedwo stand, dass man lieber mit TTM_GETTOOLINFO arbeiten soll. Bei fremden Fenstern wird es unter XP jedoch nicht funktionieren, eventuell mußt du es mal mit VirtualAlloc versuchen.
Delphi-Quellcode:
var
  ToolTipp: TToolInfo;
  ControlHandle, ToolTipHandle: HWND;
begin
  ControlHandle:= //Handle des Fensters wo der Tip angezeigt wird
  ToolTipHandle:= //Handle des Tooltips
  ZeroMemory(@ToolTipp, SizeOf(ToolTipp));
  ToolTipp.cbSize:= SizeOf(ToolTipp);
  ToolTipp.hwnd:= ControlHandle;
  ToolTipp.uId:= ToolTipp.hwnd;
  SetLength(Text, 200);
  ToolTipp.lpszText:= PChar(Text);
  SendMessage(ToolTipHandle, TTM_GETTEXT(*TTM_GETTOOLINFO*), 0, LPARAM(@ToolTipp));
  Caption:= string(ToolTipp.lpszText);

Eichhoernchen09 6. Feb 2007 08:49

Re: Tooltip eines beliebigen Controls anzeigen lassen
 
Vielen Dank für Deine Antwort.
Leider funktioniert es bei mir nicht. Vielleicht habe ich ja das falsche Tooltip Handle...??
Ich habe es am Beispiel eines ListViews versucht.
Mein Code sieht so aus:

Delphi-Quellcode:
var
  Form1: TForm1;
  const LVM_GETTOOLTIPS = $104E;
  const TTM_GETTEXT = $438;


type TRect = record
  Left: Cardinal;
  Top: Cardinal;
  Right: Cardinal;
  Bottom: Cardinal;
end;

type TToolInfo = record
  cbSize: Cardinal;
  uFlags: Cardinal;
  hwnd: Cardinal;
  uId: Cardinal;
  cRect: TRect;
  hinst: Cardinal;
  lpszText: String;
end;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  ToolTipp: TToolInfo;
  ControlHandle, ToolTipHandle: HWND;
  text: String;
begin
  ControlHandle:= ListView1.Handle; //Handle des Fensters wo der Tip angezeigt wird
  ToolTipHandle:= SendMessage(ListView1.Handle, LVM_GETTOOLTIPS, 0, 0);//Handle des Tooltips
  ZeroMemory(@ToolTipp, SizeOf(ToolTipp));
  ToolTipp.cbSize:= SizeOf(ToolTipp);
  ToolTipp.hwnd:= ControlHandle;
  ToolTipp.uId:= ToolTipp.hwnd;
  SetLength(text, 200);
  ToolTipp.lpszText:= PChar(text);
  SendMessage(ToolTipHandle, TTM_GETTEXT, 0, LPARAM(@ToolTipp));
  Edit1.Text:= string(ToolTipp.lpszText);
end;
Gibt es nicht auch eine Nachricht, mit der man den Tooltip-Handle eines Controls ermitteln kann, ohne seinen Typ zu kennen? Also nur mit dem HWND Wert des Controls.

:gruebel:

Eichhoernchen09 6. Feb 2007 08:50

Re: Tooltip eines beliebigen Controls anzeigen lassen
 
Ach ja, was ich auch noch fragen wollte:
hast Du vielleicht ein Beispiel für diese VirtualAlloc Geschichte? Ich will nämlich am Ende auch Tooltips anderer Fenster ermitteln...


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 Uhr.

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