AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi VirtualStringTree: Dynamisches Array in Klasse verwenden?
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree: Dynamisches Array in Klasse verwenden?

Ein Thema von 100nF · begonnen am 24. Okt 2011 · letzter Beitrag vom 2. Nov 2011
 
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#1

VirtualStringTree: Dynamisches Array in Klasse verwenden?

  Alt 24. Okt 2011, 18:02
Hallo zusammen,

Ich beschäftige mich wiedermal mit der VirtualStringTree. Dabei arbeite ich mit einer Klasse dieser Form (Hab Sie der Übersichtlichkeit halber auf nur 2 Eigenschaften gekürzt):

Delphi-Quellcode:
type
  TTeil = class (TComponent)
      private
          fID: Integer;
          fName: String;
        published
          property ID: integer read fID write fID;
          property Name: string read fName write fName;
      end;
      pTeil = ^TTeil;
Das Hinzufügen von Datensätzen zur VST geschieht genau so wie es im damaligen Stammtisch-Video gezeigt wurde:
Delphi-Quellcode:
Teil := TTeil.create(nil);
Teil.ID := TeileID;
Teil.Name := 'BlaBla' ;
VST_Teile.AddChild(nil,Teil);
Und so werden die Nodes gespeichert und geladen:
Delphi-Quellcode:
procedure TF_Main.VST_TeileSaveNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Stream: TStream);
var
  Teil: TTeil;
begin
  Teil:=TTeil(Sender.GetNodeData(node)^);
  Stream.WriteComponent(Teil);
end;

procedure TF_Main.VST_TeileLoadNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Stream: TStream);
var
  Teil: TTeil;
  p: pTeil;
begin
  Teil:=Stream.ReadComponent(nil) as TTeil;
  p:=sender.GetNodeData(node);
  p^:=Teil;
end;
Das funktioniert soweit auch alles.
Wie sich vielleicht schon vermuten lässt, handelt es sich bei den Datensätzen um Teile. Es soll also eine kleine Bauteilverwaltung werden Nun kann man das selbe Teil ja auch von verschiedenen Anbietern kaufen, was dann bedeutet, dass ich jedem Bauteil (Datensatz) mehrere Lieferanten, Bestellnummern und Preise zuordnen können muss. Da ich mich dabei nicht auf z.B. maximal 3 Anbietern festlegen will, muss das ganze ja dynamisch werden. Also mit Dynamischen Arrays würde ich mal schätzen.

Und genau da liegt jetzt mein Problem. Dem VST muss ja ganz am Anfang mal die Grösse zugewiesen werden:
VST_Teile.NodeDataSize := SizeOf(TTeil);
So, und wenn nun mein TTeil plötzlich dynamisch wird, wird wohl diese Initialisierung scheitern.

Übrigens wäre es schön wenn ich die, ich nenne sie mal Einkaufsinformationen, auch mit einer Klasse erstellen könnte, da ich dann diese Informationen wiederum ganz einfach in einer separaten VST darstellen kann:
Delphi-Quellcode:
type
  TEinkaufsinformation = class (TComponent)
      private
          fLieferantenID: Integer;
          fBestellnummer: String;
          fPreis: Extended;
      published
          property LieferantenID: integer read fLieferantenID write fLieferantenID;
          property Bestellnummer: String read fBestellnummer write fBestellnummer;
          property Preis: Extended read fPreis write fPreis;
      end;
Und dann mache ich einfach mal ein Array dazu:
type TEinkaufinformationen = Array of TEinkaufsinformation;
Das war jetzt einfach so ein bisschen Brainstorming, ich weiss nämlich nicht was ich nun mit diesem Array genau machen soll Irgendwie müsste das jetzt der Klasse TTeil hinzugefügt werden...nur wie?

Bitte schlagt mich nicht. Ich befürchte dass mein Ansatz schon ziemlich falsch sein könnte, mir fehlt einfach die Erfahrung. Ich habe schon nach Ansätzen im Internet gesucht, aber ich befürchte mein Vorhaben ist da schon sehr speziell, das ist schwierig da irgendwas ähnliches zu finden.

Also: Wie kann ich der Klasse TTeil beibringen, dass Sie einen dynamischen Inhalt annimmt und diesen auch korrekt speichern / laden kann?

Ich wäre extrem dankbar wenn mir da jemand auf die Sprünge helfen könnte!

mfg
  Mit Zitat antworten Zitat
 


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 19:47 Uhr.
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