Hallo noch einmal.
Also klabüsern wir das doch mal auseinander (jetzt mit beispielen).
Fangen wir an mit dem reinen dynamischen erzeugen der Knoten.
Dieses Beispiel werzeug 26 Hauptknoten mit Bild und den Bezeichnungen 'a' bis 'z':
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button1Click(Sender: TObject); var MyArray : array['a'..'z'] of char; NewNode : tTreeNode; i : char; begin for i := 'a' to 'z' do MyArray[i] := i; for i := 'a' to 'z' do begin NewNode := TreeView1.Items.AddChild(nil, MyArray[i]); NewNode.ImageIndex := 0; NewNode.SelectedIndex := 0; end; end; |
Wie du siehst wird ein neuer Knoten einfach mit
NewNode := TreeView1.Items.AddChild(nil, MyArray[i]); erzeugt wobei der erste Parameter der Elternknoten ist (bei Hauptknoten ist
nil anzugeben) der Zweite entspricht der Caption. An dem zurückgeliferten Element (NewNode) können dann sämmliche weitere Eigenschaften geändert werden, was hier am Beispiel von ImageIdex und SelectedIndex vorgeführt wird.
Wenn du den BAum nciht in die Breite sondern in die Tife erzeugen willst kannst du das BEispiel so abändern:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Button1Click(Sender: TObject); var MyArray : array['a'..'z'] of char; NewNode : tTreeNode; i : char; begin for i := 'a' to 'z' do MyArray[i] := i; NewNode := nil; for i := 'a' to 'z' do begin NewNode := TreeView1.Items.AddChild(NewNode, MyArray[i]); NewNode.ImageIndex := 0; NewNode.SelectedIndex := 0; end; end; |
Kommen wir zu den Angehängten Daten:
Wenn du das Array ohne als (Objekt)Globale Vaiable vorliegen hast reicht es wenn du den Index mitspeichers. Das geschit am besten indem du den Pointer
Data misbrauchst. Das sähe so aus:
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: 24: 25: 26: 27: 28:
| procedure TForm1.Button1Click(Sender: TObject); type tMyType = record Caption : string; Bsp1: Integer; Bsp2: String; Bsp3: String; Bsp4: String; end; var MyArray : array[1..26] of tMyType; NewNode : tTreeNode; i : integer; begin for i := 1 to 26 do MyArray[i].Caption := Format('Knoten %d', [i]); for i := 1 to 26 do begin NewNode := TreeView1.Items.AddChild(nil, MyArray[i].Caption); NewNode.ImageIndex := 0; NewNode.SelectedIndex := 0; NewNode.Data := ptr(i); NewNode.Text := NewNode.Text + ' - ' + MyArray[longint(NewNode.Data)].Bsp2; end; end; |
Wenn du die Daten allerdings wiklich anhängen willst musst du ein wenig Zeigerzauberei betrienben. Auch hier ein Beispiel allerdings ohne Array. Diesesmal vergewaltigenwir die Data Eigenschaft nicht sondern nutzen sie so wie es sich gehört:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure TForm1.Button1Click(Sender: TObject); type tMyType = record Caption : string; Bsp1: Integer; Bsp2: String; Bsp3: String; Bsp4: String; end; pMyType = ^tMyType; var MyArray : array[1..26] of tMyType; NewNode : tTreeNode; NewData : pMyType; i : integer; begin for i := 1 to 26 do begin NewData := new(pMyType); NewData^.Caption := Format('Knoten %d', [i]); NewData^.Bsp2 := 'Beispiel Text'; NewNode := TreeView1.Items.AddChild(nil, MyArray[i].Caption); NewNode.ImageIndex := 0; NewNode.SelectedIndex := 0; NewNode.Data := NewData; NewNode.Text := NewNode.Text + ' - ' + pMyType(NewNode.Data)^.Bsp2; end; end; |
Wenn du den Baum wieder abbaust, musst du bei dieser letzten Variante daran denken, auch deinen Dynamischen Apeicher wieder per
dispose frei zu geben.
So ich hoffe ich habe dich nciht al zu sehr verwirrt und du kannst etwas damit anfangen.
Gruß
Klabautermann