![]() |
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! |
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...
|
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); |
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:
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.
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; :gruebel: |
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