![]() |
[VST] Daten hinzufügen ?
Moin,
kennt einer den Lischkeschen VirtualStringTree etwas besser als ich ? :mrgreen: Wo liegt hier der Fehler ?
Delphi-Quellcode:
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).
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; |
Re: [VST] Daten hinzufügen ?
Zitat:
Delphi-Quellcode:
TVirtualNode = packed record
TotalCount, // sum of this node, all of its child nodes and their child nodes etc. Zitat:
|
Re: [VST] Daten hinzufügen ?
Zitat:
P.S.: TotalCount ist identisch mit "Count Records" in IBExpert. Das geht also so, wie vermutet. 8) |
Re: [VST] Daten hinzufügen ?
Ich mache es etwa so:
Delphi-Quellcode:
Siehe auch
procedure TForm1.TreeGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); begin Data := vst.GetNodeData(Node); CellText := Data.st; end; ![]() |
Re: [VST] Daten hinzufügen ?
Thx, so gehts. Das ist aber wohl nur die Spitze des Eisbergs. Der Thread hier wird lang werden. :mrgreen:
|
Re: [VST] Daten hinzufügen ?
Zitat:
|
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.
|
Re: [VST] Daten hinzufügen ?
Zitat:
Delphi-Quellcode:
Im OnCollapsing kannst du dann die Kindernodes erzeugen.
VST.HasChildren[Node] := True
Falls Node.FirstChild nicht NIL ist, existieren schon Unterknoten. |
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: |
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; |
Re: [VST] Daten hinzufügen ?
wenn du das tutorial nicht lesen willst, kannst du alternativ ein video schauen:
![]() |
Re: [VST] Daten hinzufügen ?
Die Fragen sind NACH dem Lesen des Tutorials aufgetaucht. Ähhm, ist das etwa von dir ? :mrgreen: Master/Detail habe ich jetzt in dem VST abgebildet. Allerdings fehlt mir die Funktion, alle Knoten aufzuklappen. Gibts das überhaupt ? Ich muss noch untersuchen, ob leere Knoten richtig behandelt werden.
|
Re: [VST] Daten hinzufügen ?
VST.FullExpand oder VST.Expanded[Node] := TRUE/FALSE
|
Re: [VST] Daten hinzufügen ?
Ah ja. Thx. :thumb: Das schwierigste an dem Ding ist für mich wohl die Nomenklatur. Da sucht man nach Count und es ist TotalCount. Expand ist FullExpand. :shock: Das Fullexpand brauche ich nur für Testzweccke. Wo ist jetzt aber die Funktion gezielt auf ein Klick auf das + zu reagieren ?
|
Re: [VST] Daten hinzufügen ?
OnExpanded / OnExpanding ;)
|
Re: [VST] Daten hinzufügen ?
Mann, bin ich dämlich. :mrgreen: Wenn ich das + anklicke, wie kriege ich dann noch raus, um welchen Knoten es sich handelt ? Die Detaildaten von Anfang an alle komplett zu lesen, das wird zu viel. Noch besser wäre es, nicht nur das + treffen zu müssen, sondern nur den kompletten Knoten (also egal, ob + oder Beschriftung
|
Re: [VST] Daten hinzufügen ?
In den Events gibt er doch den Node mit?
|
Re: [VST] Daten hinzufügen ?
Zitat:
Delphi-Quellcode:
OnExpanding(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean);
|
Re: [VST] Daten hinzufügen ?
Jetzt habe ich über 2 Stunden gebraucht, noch mit Umwegen über die TreeView-Hilfe, um das rauszufinden :
Delphi-Quellcode:
Zumindest kann ich jetzt weitermachen.
ShowMessage(vstDaten.Text [Node,0]);
Delphi-Quellcode:
Die Datenmengen sind doch zu groß, um den VST direkt komlett zu füllen. Jetzt muss ein + her, sofern Detaildaten überhaupt vorhanden sind. Die Holzhammermethode mit leerem Knoten einfügen die geht. :zwinker: Dann muss das Ding aber wieder weg und richtig gefüllt werden. Das auskommentierte mit dem HasChildren funktioniert so nicht. Warum ? :shock:
NewNode := vstDaten.AddChild(nil);
... if not DS.IsEmpty then // vstDaten.HasChildren [NewNode] := True; NewChildNode := vstRecDaten.AddChild(NewNode); // bleibt vorerst leer !! P.S.: das mit dem HasChildren hat sich vorerst erledigt. DS.Open war falsch auskommentiert. 8) |
Re: [VST] Daten hinzufügen ?
Zitat:
|
Re: [VST] Daten hinzufügen ?
Ist da nicht OnExpanding besser geeignet ? Es soll ja nur bei Klick auf das + reagiert werden.
|
Re: [VST] Daten hinzufügen ?
Zitat:
|
Re: [VST] Daten hinzufügen ?
Und wo liegt jetzt der Vorteil von was ?
|
Re: [VST] Daten hinzufügen ?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz