Delphi-PRAXiS

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/)
-   -   Zwei VirtualTreeView mit gleicher Datenquelle (https://www.delphipraxis.net/180760-zwei-virtualtreeview-mit-gleicher-datenquelle.html)

ernschd 16. Jun 2014 11:27

Zwei VirtualTreeView mit gleicher Datenquelle
 
Hi,

ich wollte in einer Software zwei VirtualTreeView verwenden, die auf die gleichen Daten zugreifen.
Ein TreeView soll wie beim Windows-Explorer eine Navigations-Baumstruktur anzeigen, der andere eine Tabelle.

Nun Frage ich mich, wie ich die Daten zuordnen kann.
Hat jemand so etwas schon mal gemacht?

Mein erster Versuch wäre ungefähr so:
Delphi-Quellcode:
procedure TForm1.createNodes(Sender: TObject);
var Node, NNode: PVirtualNode;
    i : integer;
    Data, DestData: PTreeData;
begin
    VSTBaum.NodeDataSize := SizeOf(TTreeData);
    VST.NodeDataSize := SizeOf(TTreeData);
    for I := 0 to 49 do begin
        Node := VST.AddChild(nil);
        Data := VST.GetNodeData(Node);
        Data^.FCaption := 'Hallo '+IntToStr(I);
        Data^.FColumn1 := 'Weiterer Wert '+IntToStr(I);
        NNode := VSTBaum.AddChild(nil);
        DestData := VSTBaum.GetNodeData(NNode);
        CopyMemory(DestData, DAta, SizeOf(Data));
    end;
end;
Finde ich aber nicht besonders schön. Kann ich nicht was mit VST.CopyTo machen?

himitsu 16. Jun 2014 12:26

AW: Zwei VirtualTreeView mit gleicher Datenquelle
 
Zitat:

Delphi-Quellcode:
CopyMemory(DestData, DAta, SizeOf(Data));

Delphi-Quellcode:
// entweder den Zeiger
CopyMemory(@DestData, @Data, SizeOf(Data)); // DestData := Data;
// oder die Daten
CopyMemory(DestData, Data, SizeOf(Data^)); // DestData^ := Data^; oder CopyMemory(Data, SizeOf(TTreeData));
Da hier aber Strings im Data drin liegen, muß ich dringend vom CopyMemory abraten !!!



Aber warum kopierst du überhaupt die Daten?

Es gibt die eine Liste mit den Daten und die beiden Treeviews-Knoten bekommen jeweils nur einen Verweis (Index/Zeiger) auf die zugehörigen Daten.
Nja, auch wenn es meist blöd ist, wenn die Daten in der GUI liegen ... in dem einen TreeView sind die Daten und der Andere bekommt nur Zeiger auf diese Daten. (um bei deinem Beispiel zu bleiben)

ernschd 16. Jun 2014 12:29

AW: Zwei VirtualTreeView mit gleicher Datenquelle
 
Zitat:

Es gibt die eine Liste mit den Daten und die beiden Treeviews-Knoten bekommen jeweils nur einen Verweis (Index/Zeiger) auf die zugehörigen Daten.
Und wie mache ich das konkret? Ich dachte, ich muss zuerst mindestens einen TreeView mit Daten füllen.

himitsu 16. Jun 2014 12:32

AW: Zwei VirtualTreeView mit gleicher Datenquelle
 
Zitat:

Zitat von ernschd (Beitrag 1262450)
Ich dachte, ich muss zuerst mindestens einen TreeView mit Daten füllen.

Nein. (OK, das ist der zweite Satz, welchen ich zwischenzeitlich oben nachgetragen hatte)

Statt den Daten im TreeView kann man die Daten natürlich auch in irgend einer anderen Liste/Baum/Struktur speichern und danach mit den Bäumen verknüpfen.

mkinzler 16. Jun 2014 12:39

AW: Zwei VirtualTreeView mit gleicher Datenquelle
 
Da hinter Data ja nur ein Zeiger auf die Daten steckt, solte es reichen diesen zu Kopieren


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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