AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hint / Tooltip selber anzeigen lassen?

Ein Thema von hitzi · begonnen am 20. Feb 2003 · letzter Beitrag vom 3. Mai 2011
 
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
145 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Hint / Tooltip selber anzeigen lassen?

  Alt 3. Mai 2011, 21:11
Hatte schonmal dasselbe Problem in Lauge. In der Gallerie sollten je nach anvisierter Fläche unterschiedliche Hints angezeigt werden.

In der VCL wurden die Hints über die Messages CM_HINTSHOW und CM_HINTSHOWPAUSE realisiert.

Hier ein Auszug aus meinem Code:

Delphi-Quellcode:
      
TBaseVirtualTilesView = class(TCustomImage32)
private
   {**
    * Das Rechteck, welches für den letzten Hint als Grenze fungiert
    *
    * Der Hint wird erst geändert/ausgeblendet, wenn der Cursor diesen Bereich verlässt.
    *}

   FLastHintCursorRect:TRect;

   procedure CMHintShow(var Message:TCMHintShow); message CM_HINTSHOW;
   procedure CMHintShowPause(var Message:TCMHintShowPause); message CM_HINTSHOWPAUSE;
end;
   
implementation

procedure TBaseVirtualTilesView.CMHintShow(var Message:TCMHintShow);
var
   HintTile:TVirtualTile; // Ein Hint-Referenzobjekt
   MinHintPosY:Integer;
begin
   Message.Result:=1; // 1 verhindert und 0 erlaubt die Erstellung des Hints
   {**
    * Verhindern, dass der Hint bei jeder Mausbewegung ausgeblendet wird
    *}

   if PtInRect(FLastHintCursorRect, Message.HintInfo.CursorPos) then
      Exit;   
   {**
    * Das Referenzobjekt unter dem Mauszeiger ermitteln
    *}
   
   HintTile:=GetTileAt(Message.HintInfo.CursorPos.X, Message.HintInfo.CursorPos.Y);
   if not (Assigned(HintTile) and HintTile.ShowHint) then
      Exit;

   FLastHintCursorRect:=MakeRect(HintTile.GetAdjustedRect(HintTile.Location));
   
   Message.HintInfo.CursorRect:=FLastHintCursorRect;
   Message.HintInfo.HintWindowClass:=GetHintWindowClass; // Beliebige THintWindow-Klasse
   
   
   Message.HintInfo.HintStr:='Der Hint-String';
   
   // Beliebiger Pointer: siehe 3. Parameter von THintWindow.ActivateHintData
   Message.HintInfo.HintData:=Pointer(HintTile);
   
   Message.HintInfo.HideTimeout:=-1; // -1 = kein Timeout
   Message.HintInfo.ReshowTimeout:=0;
   
   Message.HintInfo.HintPos.X:=FLastHintCursorRect.Right;
   Message.HintInfo.HintPos.Y:=FLastHintCursorRect.Top;
   Message.HintInfo.HintPos:=ClientToScreen(Message.HintInfo.HintPos);
   MinHintPosY:=ClientToScreen(Point(0, 0)).Y;
   Message.HintInfo.HintPos.Y:=Max(Message.HintInfo.HintPos.Y, MinHintPosY);

   Message.Result:=0; // Erstellung erlauben
end;

procedure TBaseVirtualTilesView.CMHintShowPause(var Message:TCMHintShowPause);
begin
   Message.Pause^:=500; // Pause in Millisekunden bevor der Hint angezeigt wird
end;
Dieses Listing sollte genügend Informationen enthalten, um sich daraus seine eigene Lösung umzusetzen.

Um an die Messages zu kommen kann man die betreffende Klasse subclassen oder die WndProc hooken.
Waldemar Derr

Geändert von WladiD ( 3. Mai 2011 um 21:14 Uhr)
  Mit Zitat antworten Zitat
 


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 07:18 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