Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi [VST] Daten hinzufügen ? (https://www.delphipraxis.net/113028-%5Bvst%5D-daten-hinzufuegen.html)

Hansa 1. Mai 2008 14:05


[VST] Daten hinzufügen ?
 
Moin,

kennt einer den Lischkeschen VirtualStringTree etwas besser als ich ? :mrgreen: Wo liegt hier der Fehler ?

Delphi-Quellcode:
type PMydata = ^TMyData;

  TMyData = Record
    st : string;
  end;

var
  Form1: TForm1;
  Data : PMyData;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
var NewNode : PVirtualNode;
begin
  with DS do begin
    Close;
    SelectSQL.Text := 'SELECT * FROM TABLE';
    Open;
    vst.NodeDataSize := SizeOf (TMyData);
    while not Eof do begin
      NewNode := vst.AddChild(nil);
      Data := vst.GetNodeData(NewNode);
      Data^.st := DS.FieldByName...;
      Next;
    end;
  end;
Es sind anscheinend genauso viele Nodes vorhanden, wie Datensätze gefunden werden. Soweit stimmt das. Obwohl, wie kriegt man eigentlich die Anzahl raus ? :gruebel: Aber die heißen alle "Node". Stattdessen soll ein Feld angezeigt werden (siehe FieldByName).

toms 1. Mai 2008 14:41

Re: [VST] Daten hinzufügen ?
 
Zitat:

Zitat von Hansa
Obwohl, wie kriegt man eigentlich die Anzahl raus ?

Delphi-Quellcode:
  TVirtualNode = packed record
    TotalCount,             // sum of this node, all of its child nodes and their child nodes etc.
Zitat:

Zitat von Hansa
Aber die heißen alle "Node". Stattdessen soll ein Feld angezeigt werden (siehe FieldByName).

Hast du OnGetText implementiert?

Hansa 1. Mai 2008 18:14

Re: [VST] Daten hinzufügen ?
 
Zitat:

Zitat von toms
..Hast du OnGetText implementiert?

Erkläre mir, was die Parameter zu bedeuten haben, dann mache ich das. :lol: Aber ich sehe schon : hier kommt wohl kaum was. Der VST scheint nicht so verbreitet zu sein, wie von mir angenommen.

P.S.: TotalCount ist identisch mit "Count Records" in IBExpert. Das geht also so, wie vermutet. 8)

toms 1. Mai 2008 18:20

Re: [VST] Daten hinzufügen ?
 
Ich mache es etwa so:

Delphi-Quellcode:
procedure TForm1.TreeGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
begin
  Data := vst.GetNodeData(Node);
  CellText := Data.st;
end;
Siehe auch VirtualTreeView Tutorial

Hansa 1. Mai 2008 18:27

Re: [VST] Daten hinzufügen ?
 
Thx, so gehts. Das ist aber wohl nur die Spitze des Eisbergs. Der Thread hier wird lang werden. :mrgreen:

toms 1. Mai 2008 18:52

Re: [VST] Daten hinzufügen ?
 
Zitat:

Zitat von Hansa
Thx, so gehts. Das ist aber wohl nur die Spitze des Eisbergs. Der Thread hier wird lang werden. :mrgreen:

Kein Problem. Frag nur, falls du noch weitere Fragen hast.

Hansa 1. Mai 2008 19:18

Re: [VST] Daten hinzufügen ?
 
Du kennst dich damit aus ? Das ist gut. :-D Das nächste ist jetzt : Detaildaten hinzuzufügen. Wie/wo kann man unterscheiden, ob überhaupt welche da sind (-> + erscheint) oder nicht ? Dann fehlt noch das Ereignis beim klicken auf das +. Ich muss da eben dann die Detaildaten zusammensuchen und anzeigen.

toms 1. Mai 2008 19:33

Re: [VST] Daten hinzufügen ?
 
Zitat:

Zitat von Hansa
Du kennst dich damit aus ? Das ist gut. :-D Das nächste ist jetzt : Detaildaten hinzuzufügen. Wie/wo kann man unterscheiden, ob überhaupt welche da sind (-> + erscheint) oder nicht ? Dann fehlt noch das Ereignis beim klicken auf das +. Ich muss da eben dann die Detaildaten zusammensuchen und anzeigen.

Wenn du HasChildren eines Nodes auf True setzt, wird vor dem Node ein + angezeigt.

Delphi-Quellcode:
VST.HasChildren[Node] := True
Im OnCollapsing kannst du dann die Kindernodes erzeugen.
Falls Node.FirstChild nicht NIL ist, existieren schon Unterknoten.

Hansa 1. Mai 2008 20:13

Re: [VST] Daten hinzufügen ?
 
D.h., ich muss selber ermitteln, ob Detaildaten vorhanden sind und dann HasChildren entsprechend setzen ? Dann müsste ich mal das Laufzeitverhalten überprüfen. Meine Testdaten liefern ca. 30.000 Haupt-Nodes und diese dürften jewils im Schnitt 10-30 Unternodes haben. Mit IsEmpty, Count (*), WHERE etc. dürfte das aber wohl gehen.

Allerdings ist folgendes noch unklar : bei den Hauptnodes brauche ich als Daten nur die Nr. Bei dn Detailnodes wird mehr gebraucht. Wie setze ich da konkret die Daten-Records ein (sizeof..) ? :shock: Ich muss das ja irgendwie unterscheiden. Und selbst wenn klar ist, ob ein + da ist oder nicht. Wie kriege ich nur dieses eine + aufgeklappt ? In der dann erscheinenden Liste müssten dann völlig andere Detaildaten drinstehen. Mal sehen, ob am "Tag der Arbeit" noch ein Ergebnis rauskommt. :mrgreen:

himitsu 1. Mai 2008 20:20

Re: [VST] Daten hinzufügen ?
 
die Größe (SizeOf) setzt du einfach auf den größeren Record, oder du erstellst dir gleich Einen für beide

z.B.:
Delphi-Quellcode:
TMyNodeData = Record
  Case Integer of
    0: (
      {Typen für Hauptnode}
      Nr: Integer;
    );
    1: (
      {Typen für Detailnode}
      EtwasMehr...
    );
End;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz