AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Tooltip eines beliebigen Controls anzeigen lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Tooltip eines beliebigen Controls anzeigen lassen

Ein Thema von Eichhoernchen09 · begonnen am 5. Feb 2007 · letzter Beitrag vom 6. Feb 2007
Antwort Antwort
Eichhoernchen09

Registriert seit: 5. Feb 2007
4 Beiträge
 
#1

Tooltip eines beliebigen Controls anzeigen lassen

  Alt 5. Feb 2007, 11:44
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!
  Mit Zitat antworten Zitat
Eichhoernchen09

Registriert seit: 5. Feb 2007
4 Beiträge
 
#2

Re: Tooltip eines beliebigen Controls anzeigen lassen

  Alt 5. Feb 2007, 13:45
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...
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Tooltip eines beliebigen Controls anzeigen lassen

  Alt 6. Feb 2007, 01:05
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);
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Eichhoernchen09

Registriert seit: 5. Feb 2007
4 Beiträge
 
#4

Re: Tooltip eines beliebigen Controls anzeigen lassen

  Alt 6. Feb 2007, 09:49
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.

  Mit Zitat antworten Zitat
Eichhoernchen09

Registriert seit: 5. Feb 2007
4 Beiträge
 
#5

Re: Tooltip eines beliebigen Controls anzeigen lassen

  Alt 6. Feb 2007, 09:50
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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:36 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