![]() |
Planungstool - Struktur ok ?
Hallo,
ich bin Dualstudent und habe einen Projektauftrag bekommen, den ich allein umsetzen soll. Bei dem ganzen geht es um Netzwerkplanung. Die funktionale Struktur ist folgendermaßen: Man erstellt ein Projekt. Von da aus geht eine Baumstruktur weiter. Projekt->Länder->Städte->Standorte->Cluster in den Clustern kann man sich dann seine Komponenten fürs Netzwerk zusammenclickern etc. und innerhalb der Cluster wirds dann kompliziert, da viele Informationen aus ner DB da mit reinspielen, doch soweit bin ich noch garnicht. Mein Problem ist folgendes. Ich möchte die Projektstruktur als DB speichern (bevorzugt MSAccess). Das ganze soll dann per TreeView angezeigt werden und für jede Hierachiestufe, soll es ein Formblatt geben, wo man Daten dafür ausfüllen kann. Ich habe mir dazu ein Konstrukt überlegt und wollte mal feedback haben, ob das eine gute lösung ist. Die Hauptklasse stellt das ControlInterface (CI) dar und steuert alles. Im CI ist erstmal das DatenbankInterface(DBI) und die Benutzeroberfläche(GUI). Die GUI besteht aus einem TreeView für die Strukturansicht und einem Panel, auf dem ich ein PageControl einrichte, dass die Formulare für die Hierachieebenen anzeigt. Dazu möchte ich die Daten immer direkt aus der DB laden und beim ändern auch direkt wieder speichern. Die Baumstruktur kann bis zu 1000 Einträge viell. auch mehr haben. Ist es vielleicht besser über eine Hilfsstruktur, wie ein Record zu gehen? Grüße |
AW: Planungstool - Struktur ok ?
Muss man nicht unbedingt ...
Für die Tabellen-Struktur baust du dir einfach eine Tabelle, die die Abhängigkeiten zum Vorgänger (ParentID), den Typen (IDType) und die ID des Eintrags (ItemID) speichert. Nun erstellst du dir ein Basis-Formular, dem du eine ItemID übergeben kannst.
Delphi-Quellcode:
Für alle vorkommenden Typen erstellst du dir ein entsprechendes Formular, abgeleitet vom Basis-Formular,
TFBaseItem = class( TForm )
public property ID : integer; end; // Das brauchen wir später noch :) TFBaseItemClass = class of TFBaseItem; mit dem alle Funktionen zu diesem Item möglich sind. (Daten zur ID aus der DB anzeigen, bearbeiten) Diese Formulare werden dann mit
Delphi-Quellcode:
deiner Anwendung bekannt gegeben.
RegisterClassAlias
Delphi-Quellcode:
Möchtest du nun das passende Formular zu einem Item anzeigen, dann geht das wie folgt:
TFLand = class( TFBaseItem);
initialization RegisterClassAlias( TFLand, '1' ); // Land hat z.B. IDType = 1 // oder auch RegisterClassAlias( TFLand, 'Land' );
Delphi-Quellcode:
procedure ShowItemForm( IDType, ItemID : integer );
begin with TFBaseItem( FindClass( IntToStr( IDType ) ) ).Create( Application ) do begin ID := ItemID; Show; end; end; |
AW: Planungstool - Struktur ok ?
Danke für die schnelle Antwort.
Dass mit der Struktur des Baums in einer Tabelle speichern, war auch genauso meine idee. dazu habe ich dann pro hierachieebene eine tabelle, wo ich die attribute speicher. da bin ich froh, schon nen guten lösungsansatz gefunden zu haben :) die idee mit der formularerstellung ist mir ganz neu und da werd ich mich jetzt mal informieren.
Delphi-Quellcode:
nutze ich um den benötigten klassen-typ zu übergeben, richtig?
// Das brauchen wir später noch :)
TFBaseItemClass = class of TFBaseItem; z.B.
Delphi-Quellcode:
type TFLand = class(TFBaseItem) end; type TFBaseItemClass = class of TFBaseItem; procedure CreateForm(FormType: TFBaseItemClass); begin FormType.Create(Application); end; procedure Click; begin RegisterClass(TFLand,'Land'); CreateForm(FindClass('Land')); end; hoffe ich konnte dir folgen |
AW: Planungstool - Struktur ok ?
Nein, nicht ganz (ich hatte aber auch einen kleinen Fehler drin)
Erzeugt werden die Formulare so
Delphi-Quellcode:
Mit FindClass kannst du nach einem Klassennamen (auch Alias, den wir benutzt haben) suchen lassen.
uses
frmBaseItem; procedure ShowItemForm( IDType, ItemID : integer ); begin with TFBaseItemClass( FindClass( IntToStr( IDType ) ) ).Create( Application ) do begin ID := ItemID; Show; end; end; Der Rückgabewert von FindClass (logischerweise eine Class) wird per Cast auf die Basis TFBaseItemClass gebracht und erzeugt. Der Vorteil ist nun, dass deine HauptAnwendung die Formulare gar nicht kennen muss, sondern nur das Basis-Formular. Weiterhin kannst du auch erst prüfen, ob du eine Klasse zurückbekommen hast und dann erst erzeugen. Wenn keine Klasse kommt, dann eben nichts machen ;) So kannst du die benötigten Formulare auch erst zu einem späteren Zeitpunkt coden und brauchst dich aber nicht um die Abhängigkeiten scheren. Du kannst auch zunächst ein Dummy-Formular erstellen. BTW Als ClassAlias "1" zu nehmen ist natürlich doof, besser wäre es natürlich "ItemType1", "ItemType2", etc. ;) |
AW: Planungstool - Struktur ok ?
Danke dir.
Das ist perfekt für mein Projekt geeignet, da der Komplexitätsgrad sehr hoch ist :) Ich habs noch nicht ganz verstanden, aber nachm Weiterlesen und Schlafen wirds bestimmt ;) Ich melde mich später nochmal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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