AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Datenhaltung mit VirtualStringTree und Trennung der Businesslogik
Thema durchsuchen
Ansicht
Themen-Optionen

Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

Ein Thema von jus · begonnen am 24. Mär 2019 · letzter Beitrag vom 2. Mai 2019
Antwort Antwort
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 25. Mär 2019, 03:49
Hi,

vor einiger Zeit stand ich vor einem Ähnlichen Problem mit VST, weshalb ich mir eine Klasse geschrieben hat,
die, die Daten in der gleichen Art und Weise handhabt, wie VST, diese aber eben nur verwaltet und nix mit der
Darstellung zu tun hat.

Ist vielleicht auch für dein Problem etwas (https://bitbucket.org/urupprecht/datatree)
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
350 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 25. Mär 2019, 22:36
Hi,

vor einiger Zeit stand ich vor einem Ähnlichen Problem mit VST, weshalb ich mir eine Klasse geschrieben hat,
die, die Daten in der gleichen Art und Weise handhabt, wie VST, diese aber eben nur verwaltet und nix mit der
Darstellung zu tun hat.

Ist vielleicht auch für dein Problem etwas (https://bitbucket.org/urupprecht/datatree)
@Ghostwalter: Vielen Dank für die Unit. Die muß ich mir in Ruhe mal anschauen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 07:02
Ist vielleicht auch für dein Problem etwas (https://bitbucket.org/urupprecht/datatree)
Oder https://github.com/davidberneda/GenericTree
Markus Kinzler
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 11:55
Also eine sehr abgespeckte Variante wäre diese hier. (Aus dem Kopf geschrieben und auch nicht vollständig). Damit weist du der Node eine Objekt Instanz aus einer ObjectList zu. Dieses Objekt muss natürlich mit dem Index auch existieren. Beim Sortieren sollte sogar dann auch nichts passieren, da die Referenz ja bleibt. Es wird nur im Init Event einmal auf die ObjectList zugegriffen und das Item genommen, das mit dem NodeIndex übereinstimmt.

Delphi-Quellcode:
procedure TForm1.VSTInitNode(Sender: TBaseVirtualTree; Node: PVirtualNode; var InitialStates: TVTInitialStates);
var
  NodeData: PNodeData;
begin
  NodeData := Sender.GetNodeData(Node);
  NodeData^ := ObjectList[Node^.Index];
end;
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.052 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 12:43
Wir nutzen dafür schon seit Jahren erfolgreich den TTreeViewPresenter aus DSharp. Der Übernimmt die Interaktion zwischen Daten (funktioniert über Spring4D IObjectList), Darstellungslogik (data template steuert, was wie ausgegeben und wie Daten strukturiert sind) und dem TVirtualTreeView.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#6

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 13:22
Ich würde es so machen

1. Datenklasse
Delphi-Quellcode:
unit Datenklasse;

interface

type
 TNodeData = class(TClass)
 private
  FText: string;
 public
   property Text: string read FText write SetText;
 end;

type
 TNodeDataList = TObjectList<TNodeData>;

implementation

procedure TNodeData.SetText(const Value: string);
begin
 FText:= 'Hallo ' + Value + '!';
end;

end.
2. Instanz(variable) der generischen Datenklassenliste bereitstellen und Datenklassenliste erzeugen
Delphi-Quellcode:
var // irgendwo ...
 NodeDataList: TNodeDataList;

// FormCreate oder so
NodeDataList := NodeDataList.Create(True);
3. Daten der Liste hinzufügen
Delphi-Quellcode:
var
 NodeData: TNodeData;
begin
 NodeData := TNodeData.Create;
 NodeData.Text := 'jus';

 NodeDataList.Add(NodeData);
 VST.RootCount := NodeDataList.Count;
4. Node (löscht automatisch Datenklasseninstanz)
NodeDataList.Delete(2); 5. Node im VST initialisieren
Delphi-Quellcode:
procedure TNodeEvents.VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
begin
 Node.SetData<TNodeData>(NodeDataList[Node.Index]);
end;
6. Node-Daten anzeigen
Delphi-Quellcode:
procedure TNodeEvents.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
var
 NodeData: TNodeData;
begin
 NodeData := Node.GetData<TNodeData>;
 if not Assigned(NodeData) then
  Exit;

 case Column of
  0: CellText := NodeData.Text;
 end;
end;

Geändert von DieDolly (26. Mär 2019 um 14:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#7

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 13:37
@DieDolly: Huch, seit wann kann denn der VST generische Daten? Ich nutz den schon soooo lange, dass ich immer noch mit klassischen Records arbeite. Geht auch, aber dein Beispiel würde hier auch vieles sehr vereinfachen. Irgendwie ist dieses Feature komplett an mir vorbei gegangen.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#8

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 13:41
Die OOP/generischen Ansätze gingen schon mehrmals hier durch die Praxis. Wie man sieht, jetzt schon wieder.
Ich benutze das VST nur noch so und es ist so unglaublich viel einfacher als vorher.

Man braucht keine riesen Helferklassen im Hintergrund. Mein Beispiel ist das was man braucht, um seine Daten getrennt vom VST halten und managen zu können.
Natürlich kommen noch mehr Properties und Helferprozeduren hinzu. Je nachdem was man denn braucht. Aber das ist dann noch immer einfacher als mit den hier erwähnten Helferklassen.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Datenhaltung mit VirtualStringTree und Trennung der Businesslogik

  Alt 26. Mär 2019, 20:39
@DieDolly: Huch, seit wann kann denn der VST generische Daten? Ich nutz den schon soooo lange, dass ich immer noch mit klassischen Records arbeite. Geht auch, aber dein Beispiel würde hier auch vieles sehr vereinfachen. Irgendwie ist dieses Feature komplett an mir vorbei gegangen.
Also ich würde mal sagen das es das schon seit 4 Jahren gibt. https://github.com/Virtual-TreeView/...c4f91c0a096aeb

Ich selbst benutze die Generics auch kaum bis gar nicht. Ich arbeite nur noch mit Objekt Instanzen in einer TObjectList<T>. Und da noch ein PClass = ^TClass dazu zuschreiben stört mich weniger.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 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