AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Spezielles "Hint"(Window) für nur ein bestimmtes Control
Thema durchsuchen
Ansicht
Themen-Optionen

Spezielles "Hint"(Window) für nur ein bestimmtes Control

Ein Thema von DataCool · begonnen am 25. Jan 2007 · letzter Beitrag vom 8. Apr 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.155 Beiträge
 
Delphi 12 Athens
 
#11

Re: Spezielles "Hint"(Window) für nur ein bestimmt

  Alt 26. Jan 2007, 18:25
Zitat von IngoD7:
Zitat von DataCool:
ich möhte ja einen unterschiedlihen Hint abhängig vom aktuellem TreeItem.

Okay, aber das ist natürlich auch eine neue Aussage. ...
Tja, dann halt im OnMouseMove des TreeViews den Item unter der Maus bestimmen und danach dann HintWindowClass entsprechend setzen, obwohl du ja die Bilder mit im HintText kodieren könntest (z.B. über ein Trennzeichen an den Hinttext die Bilder anhängen, oder zumindestens 'ne Bildnummer)

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Spezielles "Hint"(Window) für nur ein bestimmt

  Alt 26. Jan 2007, 18:35
Hallo DataCool,
ok, 2.Versuch

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...
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.155 Beiträge
 
Delphi 12 Athens
 
#13

Re: Spezielles "Hint"(Window) für nur ein bestimmt

  Alt 26. Jan 2007, 18:40
Zitat von juergen:
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...
1. wärend OnMouseMove die Schleife mit den Pausen abarbeitet ist der Mainthread blockiert.
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#14

Re: Spezielles "Hint"(Window) für nur ein bestimmt

  Alt 27. Jan 2007, 15:05
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:
HintWindowClass entsprechend zu setzen sollte da wohl weniger aufwändig sein
^^^Vielleicht habe ich ja einen Denkfehler oder seh den Wald vor lauter Bäumen nicht

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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.155 Beiträge
 
Delphi 12 Athens
 
#15

Re: Spezielles "Hint"(Window) für nur ein bestimmt

  Alt 5. Feb 2007, 06:08
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Spezielles "Hint"(Window) für nur ein bestimmt

  Alt 8. Apr 2007, 16:38
Zitat von DataCool:
Hi,
mit der Timer-lösung kommt man zum gewünschtem Ergebnis !
Greetz DataCool
Hallo,
könntest du bitte deine Lösung oder eine Demo posten, ich stehe gerade vor dem gleichen Problem.

Gruß
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#17

Re: Spezielles "Hint"(Window) für nur ein bestimmt

  Alt 8. Apr 2007, 17:17
Hi,

es sollte auch ohne Timer gehen:

Delphi-Quellcode:
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;
Auf diese Weise wird das neue HintWindow nur für das angegebene Control (hier TreeView1) verwendet.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 15:17 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