Autor Beitrag
Juppy
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 23.09.08 17:46 
Hallo Delphi Freunde,

ich habe eine TTreeView Komponente benutzt, um eine Menü-Navigation dynamisch aufzubauen. Diese sieht z.B. folgendermaßer aus:

-Knoten1
--Unterknoten1
---Unter-Unternoten11
--Unterknoten2
---Unter-Unternoten21
-Knoten2
--Unterknoten21
---Unter-Unternoten211
--Unterknoten22
---Unter-Unternoten221

Wenn nun der Benutzer einen Klick auf das Menü macht, prüfe ich wo er geklickt und führe entsprechende Anweisungen aus. Meine Schleife sieht dafür wie folgt aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
x:=x+1;
for y:=1 to anz_unterknoten do
begin
    if MenuNav.Items.Item[x-1].Selected=true then
    begin
     ...
    end;
    if MenuNav.Items.Item[x].Selected=true then
    begin                     
     ...
    end;
    if MenuNav.Items.Item[x].Item[0].Selected=true then
    begin
     ...
    end;
x := x+2;
end;

Das klappt auch gut, bis ich auch den Unter-Unternoten11 klicke, dann ruf er immer die Anweisungen für Knoten1 mit auf. Jedoch nur auf diesen Unter-Unterknoten, wenn ich auf Unter-Unternoten21 klicke, macht er es nicht. Und das gleiche für Knoten2 -> Klick auf Unter-Unterknoten 211, ruft Anweisungen von Knoten2 mit auf.

Was mache ich falsch? Oder gibt es eine andere Möglichkeit auf einzelne Knoten zu zugreifen?

Danke im Voraus ;)
petergensfeld
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

Windows Vista 32-Bit
Delphi XE Professional
BeitragVerfasst: Di 23.09.08 20:04 
Hallo Juppy,

Du kannst mit der Methode GetNodeAt feststellen, welcher Knoten sich an gegebener XY-Position befindet - etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.TreeView1DblClick(Sender: TObject);
var
  pt: TPoint;
  node: TTreeNode;
begin
  pt := TreeView1.ScreenToClient(Mouse.CursorPos);
  node := TreeView1.GetNodeAt(pt.X, pt.Y);
  if node <> nil then
    Application.MessageBox(PChar(node.Text + ' angeklickt!'), 'Info', MB_ICONINFORMATION);
end;

Hoffe, das hilft.

Gruß Dirk
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 23.09.08 20:46 
Moin und :welcome: im Forum!

Du kannst auch einfach auf den selektierten Knoten zugreifen, wenn es denn einen gibt: ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.TreeView1Click(Sender: TObject);
begin
  if Assigned(TreeView1.Selected) then
    ShowMessage(TreeView1.Selected.Text)
  else
    ShowMessage('nichts ausgewählt');
end;
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Juppy Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 23.09.08 22:17 
super jungs, hat geklappt danke ^^

lg Juppy