Autor Beitrag
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 21.02.07 22:36 
ganz einfach, wenn du in den source lurkst, den ich dir gab.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  function AddNode(const ol: tObjectList;nd: tTreeNode): ttreenode;
  var
   dta: tft;
  begin
   dta := tft.Create;
   dta.grp := tft(ol.Items[0]).grp; //gruppenid
   dta.nd  := tft(ol.items[0]).nd;  //node id
   dta.bez := tft(ol.items[0]).bez; //knotenbezeichnung
   result  := tv.Items.AddChildObject(nd, tft(ol.Items[0]).bez, dta)//hier wird ein neuer node erzeugt und zugewiesen.
  end;


du kannst nicht direkt mit 'ner id 'n neuen node erzeugen, hierfür musst du ein neues objekt erzeugen (läuft normal automatisch, in AddChild). lurk mal dort unter der hilfe, es gibt da 'ne menge an methoden die dafür gedacht sind, 'n node an den tree zu heften.

<HTH>
cyberax Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 247

Win XP Pro
Delphi 5 Enterprise
BeitragVerfasst: So 25.02.07 22:33 
Hallo,

ich glaube ich hab's nun endlich (mit eurer Hilfe) hinbekommen. :D

Hier mal der Code:
ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
function TForm1.GetFieldList: TStringList;
var gruppen_id:integer;
    akt_id:integer;
    akt_gruppe:integer;
    id_wert:integer;
begin
 FieldList.clear;
 with form1.ZQuery2 do begin
  sql.Text:='SELECT * FROM GRUPPE WHERE ID = :GRUPPE';
  With Params.ParamByName('GRUPPE'do begin
   DataType := ftinteger;
   Value := form1.ZQuery1.fieldbyname('GR_ID').asinteger;
  End;
  open;
 end;
 if ZQuery2.RecordCount>0 then
  if ZQuery2.FieldByName('gr_id').asinteger > 0 then begin //ZUM ROOT VORDRINGEN
   akt_id:=ZQuery2.fieldbyname('id').AsInteger;
   akt_gruppe:=zQuery2.fieldbyname('gr_id').AsInteger;
   repeat
    with form1.ZQuery2 do begin
     sql.Text:='SELECT * FROM GRUPPE WHERE ID = :GRUPPE';
     With Params.ParamByName('GRUPPE'do begin
      DataType := ftinteger;
      Value := akt_gruppe;
     End;
     open;
    end;
    akt_gruppe:=ZQuery2.fieldbyname('GR_ID').AsInteger;
    if akt_gruppe=0 then repeat //ROOT GEFUNDEN NUN WIEDER TIEFER IN BAUM
     id_wert:= ZQuery2.fieldbyname('ID').asinteger;
     FieldList.add(ZQuery2.fieldbyname('NAME').asstring);
     with form1.ZQuery2 do begin
      sql.Text:='SELECT * FROM GRUPPE WHERE gr_id = :GRUPPE';
      With Params.ParamByName('GRUPPE'do begin
       DataType := ftinteger;
       Value := id_wert;
      End;
      open;
     end;
//     exit;
    until ID_wert = AKT_ID;
   until akt_gruppe=0;
  end //ZUM ROOT VORDRINGEN
  else
   repeat
    FieldList.add(ZQuery2.fieldbyname('NAME').asstring);
   until ZQuery2.FindNext=false;
 FieldList.add(ZQuery1.fieldbyname('NAME').asstring);

 Result := FieldList;
end;


Das Problem ist halt, dass ich erst in die eine Richtung nach weiteren Einträgen / Knoten suchen und dann in die andere. Sicher kann man das Verbessern. Nur leider hat's bei mir nie funktioniert, so wie ich's probiert hatte.

Bin für Verbesserungsvorschläge und Fragen offen.

Danke schonmal auch für die bisherige Hilfe!!!
Gruß cyberax
cyberax Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 247

Win XP Pro
Delphi 5 Enterprise
BeitragVerfasst: Mo 26.02.07 20:49 
Hallo nochmal,

hier nochmal eine geänderte Variante der Function. Konnte bis jetzt keine "Fuktionsstörungen" festestellen....
ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
function TForm1.GetFieldList: TStringList;
var akt_gruppe:integer;
    i,j:integer;
begin
 FieldList.clear;
 with form1.ZQuery2 do begin
  sql.Text:='SELECT * FROM GRUPPE WHERE ID = :GRUPPE';
  With Params.ParamByName('GRUPPE'do begin
   DataType := ftinteger;
   Value := form1.ZQuery1.fieldbyname('GR_ID').asinteger;
  End;
  open;
 end;
 if ZQuery2.RecordCount>0 then
  if ZQuery2.FieldByName('gr_id').asinteger > 0 then begin //ZUM ROOT VORDRINGEN
   repeat
    FieldList.add(ZQuery2.fieldbyname('NAME').asstring);
    akt_gruppe:=zQuery2.fieldbyname('gr_id').AsInteger;
    with form1.ZQuery2 do begin
     sql.Text:='SELECT * FROM GRUPPE WHERE ID = :GRUPPE';
     With Params.ParamByName('GRUPPE'do begin
      DataType := ftinteger;
      Value := akt_gruppe;
     End;
     open;
    end;
   until akt_gruppe=0;
   i:= 0;
   j :=  FieldList.count-1;
   while i<j do
    begin
     FieldList.Exchange(I,J);
     inc(i);
     dec(j)
    end;
  end
  else
   repeat
    FieldList.add(ZQuery2.fieldbyname('NAME').asstring);
   until ZQuery2.FindNext=false;
 FieldList.add(ZQuery1.fieldbyname('NAME').asstring);
 Result := FieldList;
end;


Gruß cyberax