Entwickler-Ecke

Sonstiges (Delphi) - Modular per ini


ardani - Fr 15.01.10 12:12
Titel: Modular per ini
Ich habe zu dem Thema schon die Suche bemüht, aber nichts gefunden.

Es geht mir darum, ich habe ein Programm, in dem ich mehrere Formulare in mein "Hauptformular" lade (per TMainMenu), jetzt möchte ich diese aber beim Kompilieren nicht direkt in der exe haben, sondern als extra dateien, um leichter updates machen zu können, haben. Und die Menüpunkte dann aus einer ini oder einer anderen Datei auslesen. So das ich wenn sich was ändert, nicht das ganze Programm neu "ausgeben" muss, sondern nur noch die neuen Dateien mitliefer und ein Update der Datei mache, in dem die neuen Menüpunkte stehen.

Ich hoffe ich habe mich verständlich ausgedrückt und ihr könnt mir helfen

mfg

ardani


elundril - Fr 15.01.10 13:21

das heißt du willst gewissen formulare in einer Datei haben und dein Programm soll die Formulare beim Starten des Programms aus diesen Dateien laden?

lg elundril


ardani - Fr 15.01.10 13:26

ja, so ungefähr, z.B. nen Ordner Formular1, wo dann das Formular drinne liegt, aber auch die Unit die dazu gehört, und diese sollen beim start, bzw nach Aufruf einer Prozedur geladen werden und somit im Programm verfügbar sein.


Xentar - Fr 15.01.10 13:47

Das einzige, was mir im Moment dazu einfällt, wäre ein Plugin System, z.B. mit DLLs.
Aber wozu das Ganze? Nur um ein paar MB Datenmengen bei einem Update zu sparen?
Warum nicht einfach alle Formulare in die exe einkompilieren, und per Ini oder was auch immer nur die Menüpunkte ausblenden?


elundril - Fr 15.01.10 13:52

weil ardani ja immer wieder neue formulare hinzufügen möchte vielleicht und auch diese einzeln updaten.

das einzige was mir einfallen würde ist ebenfalls DLL, oder du schickst einfach immer die ganze Exe als update. auf die paar MB kommts im 21. Jhdt auch nimma an.

lg elundril


ardani - Fr 15.01.10 14:32

mir ging es eher darum, das Programm sozusagen live, oder "on the fly" updaten zu können.
Da wäre das ja eine gute Möglichkeit gewesen.


Nersgatt - Fr 15.01.10 16:03

user profile iconardani hat folgendes geschrieben Zum zitierten Posting springen:
mir ging es eher darum, das Programm sozusagen live, oder "on the fly" updaten zu können.
Da wäre das ja eine gute Möglichkeit gewesen.


Ich habe früher mit Progress 4Gl gearbeitet. Da geht das, weil jedes Formular in einer eigenen (vorkompilierten) Datei liegt.
In der Regel haben wir die Dateien auf einem Fileserver abgelegt und die Clients haben die dann von dort ausgeführt. Ich weiß gar nicht wie viele tausend Male ein Kunde verärgert war, weil Funktionen nicht mehr gingen, weil vergessen wurde die eine oder andere Datei zu kopieren. Oder Formular A öffnet Formular B. Jetzt macht man eine Änderung, wofür man beide Formulare ersetzen muss. Währenddessen hat aber User Forumular A geöffnet (also die alte Version im Speicher) -> beim Aufruf vom Formular B schmiert das Programm ab, weil die Versionen nicht zusammenpassne -> Kunde sauer -> "die sche*ß Software ist Schuld"

Ich würde die Idee verwerfen. Das bringt Dir mehr Probleme als Vorteile. Mit einer einzelnen EXE hast Du immer einen definierten Zustand.


Sinspin - Fr 15.01.10 16:14

Du hast zum einen die Möglichkeit das ganze via Laufzeitpackages zu erledigen also ist dann jedes Fenster oder jedes Modul ein Package (Bpl).
Weiter wäre es möglich mit Dll's zu arbeiten. Dafür soltest du dir aber eine Schnittstelle schreiben, über die du die Kommunikation vernünftig hinbekommst.
Wenn es dir nur um Dateneingabemasken geht reicht es auch nur die Dfm's der neuen Dialoge zu übertragen und diese dynamisch zu laden.

Aber eigentlich regt sich Heute keiner mehr auf wenn er beim Update mal ein paar MB serviert bekommt. Im Gegenteil, viel MB = viel schönes Programm, auch wenn es nur neue Skins sind. (DevExpress derzeit 10MB)


FinnO - Fr 15.01.10 20:04

Hi,

ich persönlich empfehle da ja gerne mal user profile iconHelgeLanges Modular Application Framework [http://maf-components.com]. Das ganze gibt es selbstverständlich als Personal Edition für lau. Alles weitere hierzu kann man dann seinem Post [http://www.delphi-forum.de/topic_Modular+Application+Framework+Components++Developers+Blog_70824.html] entnehmen.

Damit kannst du gänzlich dynamisch Formulare ergänzen, Funktionen austauschen, hinzufügen, Methoden anders implementieren, Komponenten erstellen und hassunichgesehn. Alles via DLLs.

Also: Merken!


dummzeuch - Fr 15.01.10 22:06

user profile iconardani hat folgendes geschrieben Zum zitierten Posting springen:

Es geht mir darum, ich habe ein Programm, in dem ich mehrere Formulare in mein "Hauptformular" lade (per TMainMenu), jetzt möchte ich diese aber beim Kompilieren nicht direkt in der exe haben, sondern als extra dateien, um leichter updates machen zu können, haben. Und die Menüpunkte dann aus einer ini oder einer anderen Datei auslesen. So das ich wenn sich was ändert, nicht das ganze Programm neu "ausgeben" muss, sondern nur noch die neuen Dateien mitliefer und ein Update der Datei mache, in dem die neuen Menüpunkte stehen.

Ich hoffe ich habe mich verständlich ausgedrückt und ihr könnt mir helfen


Kein Problem, ein Plugin-System am einfachsten basierend auf Packages. Was Du brauchst, ist ein Basis-Package, welches eine Moeglichkeit bietet, Formulare (oder generell Objekte) zu registrieren. Dann diese Registrier-Funktion beim Laden eines Plugin-Packages automatisch aufrufen lassen. Danach stehen dann die Objekte/Formulare zum Aufruf zur Verfuegung.

OK, vielleicht ist es doch ein wenig komplizierter als das, aber so ist das generelle Prinzip ... ;-)

twm