Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - bestimmten Item einer TTreeView selektieren
Robert - Di 17.09.02 18:42
Titel: bestimmten Item einer TTreeView selektieren
Hi!
Ich habn Problem. Könnte mir jemand saen, wie man ein Item einer TreeView auswählt?
Sagen wir mal, ich wollte das zweite Item der gesamten Baumstrucktur auswählen. Das wäre dann ja das erste Item im ersten Zweig der Treeview.
Aber welchen Quellecode muss ich dafür eingeben?
Vielen Dank im Vorraus
LCS - Di 17.09.02 18:49
Hi
wenn du definitiv weisst, dass es sich um das zweite Item handelt, kannst du einfach über den Index der Items darauf zugreifen.
Quelltext
1:
| Treeview1.Items[1].Selected := True; |
Gruss Lothar
Robert - Di 17.09.02 19:12
Danke!
Jedoch wenn ich mit folgendem versuche, die ersten beiden Zeichen des Textes der TreeView in Icons umzuwandel, dann werden nur die Items der ersten Ebene "beICONt":
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); var i: integer; Markiert_beim_laden: string; Image_number: integer; begin for i:=0 to TreeView1.Selected.Count+0 do begin Markiert_beim_laden := TreeView1.Selected.Text; Image_number := strtoint(Copy(TreeView1.Selected.Text, 1, 2)); TreeView1.Selected.ImageIndex := Image_number; TreeView1.Selected.SelectedIndex := Image_number; Delete(Markiert_beim_laden, 1, 2); TreeView1.Selected.Text := Markiert_beim_laden; Treeview1.Items[TreeView1.Selected.Count + 1].Selected := True; end; end; |
aogwaba - Di 17.09.02 23:01
Hi!
Quelltext
1:
| for i:=0 to TreeView1.Selected.Count+0 do begin |
Liefert die Root-Knoten. Wenn du alle Knoten ansprechen willst, musst
du dich rekursiv durch die Baumstruktur hangeln.
Wieso eigentlich +0?
cu
waba
Delete - Mi 18.09.02 08:11
Quelltext
1:
| for i:=0 to TreeView1.Selected.Count+0 do begin |
Das berücksichtigt die Root-Knoten wohl nur, wenn "Selected" der Super-Root ist. Wenn du gar nichts gewählt hast, und "Selected" demzufolge
nil ist, rumpelt´s schon mal.
Quelltext
1: 2: 3: 4:
| for i := 0 to TreeView1.Items.Count - 1 do if(TreeView1.Items.Item[i].Level = 0) then // <-- begin end; |
bringt tatsächlich alle Root-Knoten des TreeView.
Warum in der Funktion von Robert da ein +Null steht, ist mir allerdings auch ein Rätsel.:?:
Robert - Mi 18.09.02 14:42
Hi!
Das hat leider nur die Wirkung des ersten Codes auch.
Was ich will isz folgendes:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| if ("selected Node" <> "letzter Node der TreeView") and (modus = 'laden') then begin ...mach irgendwas...; Wähle nächsten Node aus; end else begin ...mach irgendwas...; modus = 'fertig'; //hauptsache nicht 'laden, dann würde 'if ...' wieder von vorne losgehen Wähle ersten Node überhaupt aus; |
Das geht mit dem anderen Code leider nicht. Der andere wählt nur die ersten beiden Übergeordneten Nodes aus.
Kann mir jemand helfen?
Delete - Mi 18.09.02 18:57
Hi Robert.
Darf ich ehrlich sein? So ganz habe ich immer noch nicht kapiert, was du eigentlich machen willst. Aber wir können ja versuchen, das anhand eines Beispiels zu klären. Also, mein TreeView ("tv1" genannt, weil ich zu lange Kompo-Namen im Code hasse :wink:) sieht so aus:
Quelltext
1: 2: 3: 4: 5: 6:
| [ ] Erster Eintrag [-] Zweiter Eintrag [ ] Ein Unterknoten in Punkt 2 [-] Dritter Eintrag [-] Ein Unterknoten in Punkt 3 [ ] Ein Unterunterknoten |
Bis hier kein Problem. Folgende Funktion "Button1.OnClick" zeigt dir alle Knoten, die sich im
Hauptverzeichnis des Baums befinden:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin with tv1,Items do for i := 0 to Count - 1 do if(Item[i].Level = 0) then // <-- mal auskommentieren! ShowMessage(Item[i].Text); end; |
Kommentier nach dem Test einfach mal die von mir markierte Zeile aus, und probier´s erneut. Es ist also so, dass du ohne die Level-Prüfung durch den
kompletten Baum gehst.
Die nächste Prozedur (Button2.OnClick) zeigt dir den allerersten und den allerletzten Knotennamen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button2Click(Sender: TObject); begin with tv1 do begin ShowMessage(Items[0].Text); ShowMessage(Items[Items.Count-1].Text); end; end; |
Und wenn du mal die Einträge aus meinem TreeView bei dir benutzt, dann wirst du sehen, dass der allerletzte Eintrag nicht zwangsläufig im Hauptverzeichnis sein muss.
Und zu guter Letzt, diese Funktion hier:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button3Click(Sender: TObject); var i : integer; begin with tv1,Items do begin // zuerst mal der Reihe nach auswählen for i := 0 to Count - 1 do begin Selected := Item[i]; SetFocus; // <-- damit man´s auch sieht! // oder "HideSelection" im Objektinspektor auf // FALSE setzen!!
sleep(150); // <-- damit´s nicht zu schnell geht end;
// jetzt den allerersten Knoten auswählen Selected := Item[0]; end; end; |
wählt sich der Reihe nach durch den Baum und springt am Schluss wieder auf den allerersten Knoten zurück.
So, ich hoffe, das hilft dir weiter.
Gruß,
Mathias.
Robert - Mi 18.09.02 19:35
ja, danke, hat mir weiter geholfen. Die letzte Funktion.
Wenn du das Programm 'MagazinCollector 1.0' haben willst: ICh werde es auf AUQ.de posten und, wenn du willst, schick ich dir eine Mail mit dem Code und der eigentlichen Install-datei.
Musst du mir halt sagen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!