![]() |
Hint / Tooltip selber anzeigen lassen?
Ich habe ein StringGrid. Im MouseMove Ereignis habe ich folgenden Code:
Delphi-Quellcode:
Dazu brauche ich aber eine Methode den Hint zu sagen, dass er jetzt erscheinen soll. Sonst muss ich jedesmal erst wieder mit der Maus aus dem Grid gehen.
procedure Tfm_Hauptformular.sg1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); var c,r:integer; begin //Hint anzeigen timer1.enabled:=false; sg1.ShowHint:=false; //sg1 = stringgrid sg1.MouseToCell(x,y,c,r); if (c<sg1.ColCount) and (r<sg1.RowCount)and(c>0)and(r>0) then begin sg1.Hint:='Bemerkung: '+trim(sg1.Cells[7,r]); sg1.ShowHint:=true; timer1.Enabled:=true; end; end; //Timercode procedure Tfm_Hauptformular.Timer1Timer(Sender: TObject); begin timer1.Enabled:=false; sg1.ShowHint:=false; end; Sowas in der Art sg1.showhintnow MfG Hitzi |
Morgen bitte noch einmal nach oben holen - habe das in meinem Disk-Defrag auch gemacht - Code liegt im Office :D
...:cat:... |
schau dir mal die hint-Methoden von Tapplication an...du kannst z.B. HintPause auf 0 setzen, um den hint sofort anzeigen zu lassen.
Gruß Frank :bounce1: |
@frank: Da mus ich aber immer noch den Mouscursor vom Control (hier stringgrid) wegbewegen, damit der Hint wieder erscheint.
@sakura: Nach oben geholt ... :P MfG Hitzi |
Delphi startet ja schon... Folgender Code ist fast 1:1 copy&paste, aber es sollte Dir zeigen, wie es geht.
Du must die Eigenschaft ShowHint des Grids auf True setzen (ParentShowHint wird automatisch False). Die Form-Variable FLastFragmentEntry merkt sich die letzte Zeile des aktuellen Hints, damit der Hint nicht so flackert. Unter Umständen musst Du auch noch die Spalten abfangen, falls Du die separat "hinten" möchtest. - Der Code ist nur zeilenweise.
Delphi-Quellcode:
...:cat:...
procedure TfrmMain.grdFragmentsMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); var Col, Row: Integer; FileName, FolderName, Fragments, Cluster: string; begin grdFragments.MouseToCell(X, Y, Col, Row); if FLastFragmentEntry = Cardinal(Row) then Exit; FLastFragmentEntry := Row; // //kopfzeile zeigt keinen hint if Row > 0 then begin FileName := grdFragments.Cells[0, Row]; FolderName := grdFragments.Cells[2, Row]; Cluster := grdFragments.Cells[1, Row]; Fragments := Fetch(Cluster, '/'); grdFragments.Hint := Format('Datei: %s'#13#10'Ordner: %s'#13#10 + 'Fragmente: %s'#13#10'Cluster: %s', [FileName, FolderName, Fragments, Cluster]); end else begin grdFragments.Hint := ''; end; Application.ActivateHint(grdFragments.ClientToScreen(Point(0, (Y div grdFragments.DefaultRowHeight) * grdFragments.DefaultRowHeight))); end; |
AW: Hint / Tooltip selber anzeigen lassen?
Ich habe fast dasselbe Problem. Ich habe eine eigene graphische Komponente von TCustomControl abgeleitet und möchte je nach berührter Region meiner Komponente UNTERSCHIEDLICHE Hint anzeigen.
Der Trick mit Application.ActivateHint(Mouse.CursorPos) klappt zwar, aber wenn man das im MouseMove-Event erledigt, dann erscheint der Hint immer SOFORT und STÄNDIG, sobald man die entsprechende Region mit der Maus berührt. Ich möchte aber eigentlich schon normales Hint-Verhalten haben: Also erst nach Application.HintPause erscheinen und dann auch wieder von selbst nach Application.HintHidePause verschwinden. Beides geht so leider nicht. Wie kann man der Komponente quasi vorgaukeln, dass die Mouse zwischendurch die Komponente verlassen hat, also den offensichtlich vorhandenen "Hint-Merker" zurücksetzen? Wo merkt sich die Komponente, dass sie den Hint schon angezeigt hat? Wie kann man diesen Merker so zurücksetzen, dass beim nächsten Ruhen der Mouse wieder der Hint entsprechend angezeigt wird? Vielen Dank im voraus! |
AW: Hint / Tooltip selber anzeigen lassen?
Hatte schonmal dasselbe Problem in
![]() In der VCL wurden die Hints über die Messages CM_HINTSHOW und CM_HINTSHOWPAUSE realisiert. Hier ein Auszug aus meinem Code:
Delphi-Quellcode:
Dieses Listing sollte genügend Informationen enthalten, um sich daraus seine eigene Lösung umzusetzen.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; Um an die Messages zu kommen kann man die betreffende Klasse subclassen oder die WndProc hooken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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