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 Nachricht/Ereignis wenn Tooltips aktiviert werden (https://www.delphipraxis.net/109174-nachricht-ereignis-wenn-tooltips-aktiviert-werden.html)

fylo 25. Feb 2008 18:23


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]

API 25. Feb 2008 19:18

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;

fylo 25. Feb 2008 22:40

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?

toms 26. Feb 2008 18:06

Re: Tooltips per Code aktivieren
 
Zitat:

Zitat von fylo
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?

Ein ToolTip wird angeizeigt, wenn die Maus eine bestimmte Zeit über einem Control ist.
Ich glaube aber nicht, dass eine Nachricht ausgelöst wird. Wozu denn?

fylo 26. Feb 2008 20:50

Re: Tooltips per Code aktivieren
 
Zitat:

Zitat von toms
Ein ToolTip wird angeizeigt, wenn die Maus eine bestimmte Zeit über einem Control ist.

Ja das weiß ich. Die Frage die ich habe, ist ob man es z.B. über globale Hooks mitbekommen kann ob ein Tooltip aufgerufen und angezeigt wird :?:

Zitat:

Zitat von toms
Ich glaube aber nicht, dass eine Nachricht ausgelöst wird.

Eigentlich wird doch ein Fester erzeugt und in diesem der Text des Tooltips angezeigt. Also müsste man doch mitbekommen ob ein Fenster erzeugt wird. Oder ist der Tooltip kein Fenster im eigentlichen Sinne :gruebel:

Zitat:

Zitat von toms
Wozu denn?

Ich schreibe an einem Programm zur Auswertung des Benutzerverhalten und da würde ich gerne herausfinden, ob ein Benutzer z.B. einen Button immer gleich drückt oder ob er auf den Tooltip wartet oder ob er generell immer auf den Tooltip wartet obwohl der Button keinen hat.

bitsetter 26. Feb 2008 21:26

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.

fylo 27. Feb 2008 11:05

Re: Nachricht/Ereignis wenn Tooltips aktiviert werden
 
Zitat:

Zitat von bitsetter
ToolTip ist nicht gleich ToolTip, die VCL von Delphi zum Beispiel hat seine eigene Klasse.
Praktisch kann jeder Programmierer seinen eigenen Tooltip schreiben.

Hmm, das ist ja gar nicht gut :cry:

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.

bitsetter 27. Feb 2008 12:24

Re: Nachricht/Ereignis wenn Tooltips aktiviert werden
 
Zitat:

Zitat von fylo
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.

Bei dem Standard Tooltip der VCL THintWindow wird das Fenster nicht jedesmal neu erstellt, sondern nur wieder sichtbar gemacht und vorher gegeben falls der Text und die Position geändert.

shmia 27. Feb 2008 13:23

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 20:30 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