Autor Beitrag
Nerzhul
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 30.04.04 10:04 
Hallo,

Ich habe zur TTreeView-Komponente zwei Fragen:

1) Wie stelle ich fest, über welchem Knoten eines TreeViews sich die Maus gerade befindet [z.B. im OnClick-Ereignis]?

2) Das aktuell ausgewählte Element eines Baums wird ja blau hinterlegt, aber nur wenn der TreeView auch den Focus hat. Sobald ein anderes Steuerelement angeklickt wird verschwindet die blaue Markierung. Gibt es eine Möglichkeit, diese beizubehalten auch wenn der TreeView den Focus verliert?

Danke,

-M
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Fr 30.04.04 10:54 
zu 1)
benutze nicht OnClick,sondern OnMouseDown/Up, das gibt dir X,Y-coordinaten der mouse mit. dann mit TTreeNode.DisplayRect prüfen, ob die maus drüber war.

zu 2)
die treeview hat eine property HideSelection, stell die doch mal auf false...

viele grüße
alex
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Fr 30.04.04 10:58 
Hallo,

der Treeview verfügt u.a. noch über das Ereignis OnChange. Das wird auch ausgelöst, wenn Du mit der Maus einen Eintrag selektierst. Im OnChange-Ereignis bekommst Du den aktuell ausgewählten TreeNode übergeben.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Fr 30.04.04 11:26 
Titel: hmm,
dieses Tutorial hat mir geholfen TTreeView zu verstehen

users.iafrica.com/d/...eeView/TreeView.html

sehr instructiv und wenn man die Beispielprogramme ausführt dann fällt es einem meist wie Schuppen von den Augen.

_________________
mfg. Joel
Nerzhul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 30.04.04 11:40 
Hallo,

Erstmal Danke für die Antworten. Frage 2 hat sich mit HideSelection (fast) erledigt. Der gewählte Knoten erscheint jetzt grau hinterlegt wenn der TreeView den Focus verliert ... gibt es da vielleicht eine Möglichkeit, die Farbe zu ändern?

Zu Frage 1 ... ich hab mich vielleicht etwas unklar ausgedrückt ... also, ich möchte darauf reagieren, wenn die Maus über einer TreeNode ist [so wie es der TreeView selbst auch tut wenn die HotTrack-Eigenschaft auf True ist], und einen entsprechenden Hint anzeigen [der z.B. einen String aus dem Data-Teil der Node anzeigt]. Wie gehe ich da am besten vor?

Danke,

-M
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Fr 30.04.04 11:48 
Titel: hmm,
das solltest du am besten via des OnMouseMove Events rausbekommen. Einfach die X/Y Koordinate umrechnen und du kommst zum aktuellen Knoten.

_________________
mfg. Joel
Nerzhul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 30.04.04 14:40 
Ok, Danke :-) Mit der DisplayRect-Eigenschaft der Node und der aktuellen Mausposition im MouseMove-Ereignis funktioniert das schonmal ganz gut. Ich kann dann mittels PtInRect feststellen, ob der Zeiger über einem bestimmten Knoten ist.

Aber wie zeige ich jetzt individuelle Hint-Texte an?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if PtInRect(TreeView1.Items.GetFirstNode.DisplayRect(TRUE), Point(X, Y)) then
 begin
  TreeView1.Hint := 'blabla';
 end
else
 begin
  TreeView1.Hint := '';
 end;


Funktioniert zwar, aber zeigt nur den "aktuellen" Hint-Text an. D.h. wenn ich mit der Maus auf das erste Element des Baumes gehe wird zwar der 'blabla'-Hint angezeigt, aber er verschwindet nicht wenn ich über einen anderen Knoten fahre [sondern erst wenn die Maus den TreeView-Bereich verlässt]. Hat jemand ne Idee? :-)

Danke,

-M
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Fr 30.04.04 14:52 
Titel: hmm,
so mach ich dass bei einem Stringgrid, sollte aber leicht zur Treeveiw konvertiert werden können
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure Tfrm_mdi_anstehendeANfSchreiben.stg_ZahlungsanweisungenMouseMove(
  Sender: TObject; Shift: TShiftState; X, Y: Integer);

var MyCol, MyRow : integer;
    oldhint : string;
begin
  oldhint := stg_zahlungsanweisungen.hint;
  stg_zahlungsanweisungen.MouseToCell(x, y, MyCol, MyRow);
    if (Mycol = 2then
    begin
      stg_zahlungsanweisungen.showhint := true;
      stg_zahlungsanweisungen.hint := hintliste[MyRow].mandant;
      if oldhint <> stg_zahlungsanweisungen.Hint then Application.cancelhint;
    end;
    if (Mycol = 3then
    begin
      stg_zahlungsanweisungen.showhint := true;
      stg_zahlungsanweisungen.hint := hintliste[MyRow].werbeart;
      if oldhint <> stg_zahlungsanweisungen.Hint then Application.cancelhint;
    end;
    if (Mycol > 3AND (Mycol < 2then
      stg_zahlungsanweisungen.showhint := false;
end;

_________________
mfg. Joel
Nerzhul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 30.04.04 16:41 
Danke, du hast mir sehr geholfen! Jetzt funktioniert alles wie geplant :-)

-M