![]() |
Nachricht/Ereignis wenn Tooltips aktiviert werden
Hallo,
ich arbeite in einem Programm viel mit Window-Messages (z.B. WM_MOUSEMOVE oder WM_LBUTTONDBLCLK). Nun habe ich mich gefragt ob es eine Möglichkeit gibt, von einem beliebigen "Control" in einer anderen Anwendung den Tooltip per Code zu aktivieren? Gibt es da eine Nachricht die ich an das Control senden kann, z.B. WM_TOOLTIP? Ich habe schon in der Message.pas (von Delphi 7) nach etwas passendem gesucht, aber leider nichts gefunden. [edit] Wird im Windowssystem eine bestimmte Nachricht ausgelöst, wenn irgendwo ein Tooltip angezeigt/angefordert wird soll und kann man das irgendwie heraus bekommen? [/edit] [edit 2] Titel angepasst, damit er besser zur Frage passt. [/edit 2] |
Re: Tooltips per Code aktivieren
Hallo,
Einen Hint kannst du mit ActivateHint() anzeigen.
Delphi-Quellcode:
private
{ Private declarations } FMyHint: THintWindow; function RevealHint(Control: TControl; Color: TColor): THintWindow; procedure RemoveHint(var Hint: THintWindow); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // Hint Fenster anzeigen function TForm1.RevealHint(Control: TControl; Color: TColor): THintWindow; var ShortHint: string; AShortHint: array[0..255] of Char; HintPos: TPoint; HintBox: TRect; HeightOfText: Integer; begin { Hint Fenster erstellen falls noch nicht } if not Assigned(Result) then Result := THintWindow.Create(Control); if Color <> 0 then Result.Color := Color; ShortHint := GetShortHint(Control.Hint); { Hint Fenster Position & Größe: } HintPos := Control.ClientOrigin; Inc(HintPos.Y, Control.Height + 6); HintBox := Bounds(0, 0, Screen.Width, 0); HeightOfText := DrawText(Result.Canvas.Handle, StrPCopy(PChar(@AShortHint), ShortHint), -1, HintBox, DT_CALCRECT or DT_LEFT or DT_WORDBREAK or DT_NOPREFIX); OffsetRect(HintBox, HintPos.X, HintPos.Y); Inc(HintBox.Right, 6); Inc(HintBox.Bottom, 2); { Hint zeigen } Result.ActivateHint(HintBox, ShortHint); end; // Hint verstecken procedure TForm1.RemoveHint(var Hint: THintWindow); begin if Assigned(Hint) then begin Hint.ReleaseHandle; Hint.Free; Hint := nil; end; end; // Test: Hint von Button2 anzeigen bei Klick auf Button1 procedure TForm1.Button1Click(Sender: TObject); begin FMyHint := RevealHint(Button2, clInfoBk); Application.Processmessages; Sleep(Application.HintHidePause); RemoveHint(FMyHint) end; |
Re: Tooltips per Code aktivieren
Hallo API,
vielen Dank für deinen Tipp, aber ich habe mich vielleicht etwas missverständlich ausgedrückt. Ich meinte nicht im eigenen Programm einen Tooltip aktivieren, sondern von der eigenen Anwendung in einem anderen Programm. Z.B. vom eigenen Programm den Tooltip/Hint des Zurück-Buttons im Firefox anzeigen bzw. aktivieren. Gibt es da eine Möglichkeit? Oder wird eigentlich im Windowssystem eine bestimmte Nachricht ausgelöst, wenn irgendwo ein Tooltip angezeigt werden soll und kann man das irgendwie mitbekommen? |
Re: Tooltips per Code aktivieren
Zitat:
Ich glaube aber nicht, dass eine Nachricht ausgelöst wird. Wozu denn? |
Re: Tooltips per Code aktivieren
Zitat:
Zitat:
Zitat:
|
Re: Nachricht/Ereignis wenn Tooltips aktiviert werden
ToolTip ist nicht gleich ToolTip, die VCL von Delphi zum Beispiel hat seine eigene Klasse.
Praktisch kann jeder Programmierer seinen eigenen Tooltip schreiben. Bei Firefox kann ich mir sogar vorstellen, dass die nicht einmal ein Handle besitzen, habe auf jeden Fall schon welche ohne Handle gesehen. Das wären dann keine Fenster im eigentlichen Sinne. |
Re: Nachricht/Ereignis wenn Tooltips aktiviert werden
Zitat:
Sind denn das letztendlich auch alles nur Fenster mit bestimmten Attributen? Ob mit ober ohne Handle ist ja eigentlich egal, falls man herausbekommen könnte ob ein Fenster erstellt wird, könnte man schauen mit welchen Styles es erzeugt wird und dann daraus schließen, das es vielleicht ein Tooltip sein könnte. |
Re: Nachricht/Ereignis wenn Tooltips aktiviert werden
Zitat:
|
Re: Nachricht/Ereignis wenn Tooltips aktiviert werden
Versuch mal ob du mit der Windows API Funktion TrackMouseEvent() weiterkommst.
Du müsstest dann eine WM_MOUSEHOVER Message erhalten. Es ist wohl so, dass TrackMouseEvent() nur im eigenen Prozess wirksam ist; aber vielleicht lässt sich das etwas machen (AttachThreadInput ?) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 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 by Thomas Breitkreuz