![]() |
Re: Spezielles "Hint"(Window) für nur ein bestimmt
Zitat:
Ich weiß nicht, ob es das in der normalen TreeView auch gibt, aber in der VirtualTreeView gibt's ja OnGetHintText (oder so), worin man dann Itemabhängig den Hinttext übergibt. Ansonsten im OnMouseMove den Hint unterm Mauszeiger rausfinden und danach dann den Hint setzen. |
Re: Spezielles "Hint"(Window) für nur ein bestimmt
Hallo DataCool,
ok, 2.Versuch :wink: Du willst keinen Timer, wie wäre es mit einer Schleife wo du am Ende ein Sleep hast. Diese Schleife blendet die "myHintForm" langsam über Alphablend ein. Mit Sleep bestimmst du die Pause, also das Tempo :?: Das ganze wie schon gesagt im OnMouseMove... |
Re: Spezielles "Hint"(Window) für nur ein bestimmt
Zitat:
2. was ist, wenn inzwischen der Mauszeiger wo anders ist, also der Hint garnixchtmehr angezeigt werden muß? zu 1 und 2: möglich wäre es, wenn in OnMouseMove ein Thread gestartet wird, welcher diese macht und falls der Thread schon existiert, dann wird dieser entweder beendet und ein Neuer gestartet, oder die aktuellen Daten werden an den aktiven Thread weitergegeben. HintWindowClass entsprechend zu setzen sollte da wohl weniger aufwändig sein :angel: |
Re: Spezielles "Hint"(Window) für nur ein bestimmt
Hi Himitsu,
einen Thread anstatt einem Timer zu nutzen ist natürlich möglich und auch schöner, falls ich keine bessere Möglichkeit finde werde ich den Timer auch durch einen Thread ersetzen. Zitat:
Wenn meine eigene HintWindowClass der Application zuweise, ist diese Hint Klasse dann für alle Elemente gültig. Also müßte das HintWindow der Application immer wieder auf das Default zurück gesetzt werden und dann wieder, wenn sich die Maus über dem Treeview befindet, auf mein spezielles Hint Window gesetzt werden. ^^ Wie wüdere der Sourcecode dazu aussehen ?! Trotzdem gäbe es dann noch ein Problem : Der normale Treeview zeigt keinen Hint an, wenn man sich über die verschiedenen Items bewegt. Setze ich den Hint beim OnMouseMove habe ih wieder den ganzen anderen Kram(Zeitverzögerung, Itemwechsel, etc.) zu berücksichtigen, oder sehe ich das falsch ? Greetz D DataCool |
Re: Spezielles "Hint"(Window) für nur ein bestimmt
Ja, es wäre für alle Elemente gültig, aber wenn du dieses nur angegeben hast, wärend auch nur ein Hint der TreeView angezeigt werden könnte und ansonsten der normale Hint eingetragen ist, dann wird dieser doch auch nur von der TreeView verwendet.
Im OnMouseMove das Item unter der Maus rausfinden und dann dementsprechend den Hint der TreeView setzen? und dann wäre es wohl am Einfachsten noch das OnMouseLeave nachzurüsten (sonst müstest du ja in allen anderen Objecten auf der Form ebenfalls das OnMouseMove abarbeiten, um das verlassen der TreeView zu erkennen). also die CM_MOUSELEAVE-WindowsMessage abfangen und dort wieder den "Default"-HintWindow wieder setzen. z.B.:
Code:
[b]private[/b]
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; [b]procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;[/b] Aber wie gesagt, mit der VirtualTreeView wird der Item-abhängige Hint einfacher zu realsieren sein. Im OnMouseEnter da deinen Hint installieren (HintWindowClass:=TYourHintWindow; ) und in OnMouseLeave wieder den StandardHint (HintWindowClass:=THintWindow; ). Dort könntest du aber auch deine HintClass erst installieren, wenn er wirklich gebraucht wird, also in OnGetHint deine HintKlasse zuweisen und zugleich den Item-abhängigen HintText setzen und in OnMouseLeave (selbst nachgerüstet) auf die DefaultHintClass wieder zurücksetzen. |
Re: Spezielles "Hint"(Window) für nur ein bestimmt
Zitat:
könntest du bitte deine Lösung oder eine Demo posten, ich stehe gerade vor dem gleichen Problem. Gruß |
Re: Spezielles "Hint"(Window) für nur ein bestimmt
Hi,
es sollte auch ohne Timer gehen:
Delphi-Quellcode:
Auf diese Weise wird das neue HintWindow nur für das angegebene Control (hier TreeView1) verwendet.
type
TMyHintWindow = class(THintWindow) protected procedure Paint; override; end; procedure TMyHintWindow.Paint; begin // hier HintWindow-Inhalt zeichnen end; procedure TDemoForm.ApplicationShowHint (var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo); begin if (HintInfo.HintControl = TreeView1) then // hier Control einsetzen HintInfo.HintWindowClass := TMyHintWindow; end; procedure TDemoForm.FormCreate (Sender: TObject); begin Application.OnShowHint := ApplicationShowHint; end; Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 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