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/)
-   -   Delphi Formulare als Datei speichern und zur Laufzeit laden? Wie? (https://www.delphipraxis.net/28426-formulare-als-datei-speichern-und-zur-laufzeit-laden-wie.html)

Dani 24. Aug 2004 17:08


Formulare als Datei speichern und zur Laufzeit laden? Wie?
 
Hallo :hi:

Ich möchte ein im Designer estelltes Formular inklusive aller Komponenten, Methoden, Eigenschaften, Ereignissen usw. in compilierter Form in einer Datei speichern. Diese Datei soll nachher sozusagen als Plugin von einer Übergeordneten Anwendung geladen werden, sodass wieder Instanzen des Formulars erzeugt werden können. Konkret handelt es sich um MDI-Childs. Der Inhalt der Plugin-Formulare soll aber völlig beliebig sein.

Lässt sich sowas mit BPL-Packages erledigen? Falls ja, wie speichere/lade ich ein Formular in/aus einer BPL-Datei?

Dani 25. Aug 2004 15:32

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Okay, wie man ein Form in einem Package speichert, ist klar... aber wie lädt man das jetzt dynamisch zur Laufzeit? Sorry, ich steh total auf dem Schlauch :(

LoadPackage() gibt ein Handle zurück, mit dem kann ich aber nichts anfangen.

Bernhard Geyer 25. Aug 2004 15:42

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Vieleicht hilft dir das:

Dynamische Laden von packages funktioniert nicht
Packages, alles oder nichts ?

Dani 25. Aug 2004 16:31

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Jau, danke! Werde erstmal eine Weile brauchen, um das zu verstehen :gruebel:

Dani 29. Aug 2004 11:26

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Hallo nochmal,

ich hätte da gerne mal ein Problem. :mrgreen:
Aus einem mir verborgenem Grund findet FindClass() die modulare Formklasse nicht, obwohl sie im initialization-Abschnitt der Package-Unit mit RegisterClass registriert wird. Hier der Code:

Form laden:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 aClass: TClass;
 frmMod: TForm;
begin
  aClass := nil;
  // Package laden
  LoadPackage('Package1.bpl');
  // Klasse finden
  aClass := FindClass('TModuleForm');
  // Instanz erzeugen
  If Assigned(aClass) then
   begin
    frmMod := TFormClass(aClass).Create(self);
    frmMod.Show;
   end;
end;
Unit in Package:
Delphi-Quellcode:
unit uMod1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TModuleForm = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

{$R *.dfm}

procedure TModuleForm.Button1Click(Sender: TObject);
begin
 close;
end;

initialization
 RegisterClass(TModuleForm);
finalization
 UnRegisterClass(TModuleForm);

end.
Woran könnte das liegen? :gruebel:

Dani 30. Aug 2004 16:17

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Hmm... wenn ich den initialization-Abschnitt so verändere...
Delphi-Quellcode:
initialization
begin
 Windows.Beep(500, 100);
 RegisterClass(TModuleForm);
 FindClass('TModuleForm');
end;
...gibts hier bei FindClass keine Exception. Hat das damit zu tun, dass der Aufruf von FindClass in einer anderen Unit statt findet? Sollte RegisterClass die Klasse nicht für die gesamte Anwendung registieren? :|

MrKnogge 30. Aug 2004 16:20

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Hi, du könntest die Formulare auch als DLL-Compilieren, dann kannst du sie ganz normalanzeigen.

gruss

Dani 30. Aug 2004 19:11

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Schon gut... danke

Alter Mann 31. Aug 2004 04:37

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Hi Dani,

in der Toolbox wurde einmal eine Artikelserie zu dem Thema der modularen
Programmentwicklung veröffentlicht. Sie nutze die Möglichkeit des nachladen
von *.BPL Dateien, die nichts anderes als DLL's sind (wenn ich mich recht erinnere).
Es fing im Heft 1 von 2002 damit an
Zitat:

Intelligenter Programmaufbau und Optimierung mit Packages – Michaël Van Canneyt
und hörte schon in Heft 2 von 2002
Zitat:

Navigation in Form-Masken – Michaël Van Canneyt
auf.
In den Heften Nr. 3 und 4 - 2002, kam dan dies
Zitat:

Packages – Die ganz besonderen DLLs
.
Aber schau selbst Toolbox.

Von Van Canneyt kammen im laufe des Jahres noch weitere Artikel die sich mit Design-Fragen
beschäftigten, unter anderem Formulare.
Man kan die Hefte nachbestellen, kosten aber auch je Ausgabe 10 €.

Gruss

Dani 31. Aug 2004 09:12

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Naja wenn die Ausgabe 1/2002 mit Sicherheit weiterhilft, wären die 10€ die Sache schon wert... wenn nicht... Pech...

Falls ich rausfinde, woran es liegt, poste ich es halt hier rein. Vielleicht ist das ganze Modulare-Forms-Zeug ja auch nen Eintrag in der Code-Library wert...

Alter Mann 31. Aug 2004 19:00

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Hi Dani,

mal eine kleine Frage: Willst Du ein Plugin oder in einer MDI-Anwendung dynamisch MDI-CHILD'S nachladen? Für den letzen Fall noch einige Anmerkungen zur Toolbox 1'2002. Ich habe den Artikel
ebend kurz überflogen, er beinhaltet:
- Modularer Aufbau einer Datenbankanwendung mittels Module und Packages
- Erläuterungen warum das laden/erzeugen eines Formulars aus einer DLL nicht funktioniert
- Modulverwaltung mittels Formularmanager (Registrieren/Dergistrieren von Formularen,
Zitat:

..., so dass der Form-Manager eine Form auf Basis seines Klassennamens erzeugen kann.
)


Gruss

PS Ich bin nicht am Umsatz der Toolbox beteidigt :cry: , aber empfehlen kann ich den Artikel.

Dani 1. Sep 2004 07:20

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Na ganz toll, jetzt ist die Ausgabe 1 / 2002 auch noch vergriffen :twisted:

Wäre evtl. jemand bereit, mir sein Exemplar für 10€ zu überlassen? (Versand zahle ich)

Und ja, es sollen MDI-Child's nachgeladen werden :-)

Alter Mann 5. Sep 2004 19:27

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alle Miteinander,

da der Toolbox-Verlag einer Anfrage zur Veröffentlichung nicht zugestimmt hat,
habe ich mir die ganze Geschichte mal durch gelesen und folgendes Ergebniss "zusammengeschustert" :wink:

Ich habe es mit Delphi 7 fabriziert, sollte aber mit ein paar Änderungen auch mit anderen Delphi-Versionen laufen.
Kern der ganzen Sache ist das Pakage Formmanage.dpk, in ihr wird die erforderliche Unit "Frmmgr" gebunden.
Für den modularen Anwendungsaufbau muss diese Unit immer eingebunden sein(siehe Beispiel).
In den Units, die Formulare enthalten muss so nur noch ein Initialization und ein Finalization
zum registrieren der Formulare eingefügt werden. Im Hauptprogramm kann dann mittels der vorhandenen
Informationen auf das jeweilige Formular zugegriffen und dynamisch geladen werden.

Thanatos81 9. Feb 2005 10:38

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Hi Leute!

Ich steh auch gerade aufm Schlauch und hab ein Brett vorm Kopp. Ich hab mir mal das Beispielprojekt runtergeladen und angeschaut.

Gut, da werden dann ein paar Einträge in ein Memo geschrieben. Jetzt haben form1 und form2 nicht so die Wahnsinnsfunktionalität.

Könnte mir mal jemand ein Beispiel-Package rüberschicken, die ein Formular mit nem Button enthält und erzählen, wie ich aus dem Hauptprojekt das Formular aufrufe?

Würde mir wirklich weiterhelfen. Hab nämlich noch gar nix mit modularem Programmaufbau unter Delphi gemacht, und mir gehen diese riesigen Echsen auf den Geist.

maximov 9. Feb 2005 10:53

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Zitat:

Zitat von Dani
...
ich hätte da gerne mal ein Problem. :mrgreen:
Aus einem mir verborgenem Grund findet FindClass() die modulare Formklasse nicht, obwohl sie im initialization-Abschnitt der Package-Unit mit RegisterClass registriert wird. Hier der Code:
...

Ich kann mir sehr gut vorstellen voran es liegt. Die preisfrage wäre, ob du die RTL auch extern gelinkt hast? Dh. bei solch einem PlugIn zeug müssen die Hauptanwendung und das plugIn sich die RTL (und am besten die VCL auch) teilen, denn sonst haben hat die hauptanwendung eine RTL mit einer leeren klassen-registratur und das PlugIn hat eine mit registrierten klassen, die leider niemand finden wird!

Liege ich mit der annahme richtig?

Quake 9. Feb 2005 11:15

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Ich bin mir nicht sicher, aber gehört das
Delphi-Quellcode:
initialization
RegisterClass(TModuleForm);
den in das Package? Ich würde es in die Anwendung schreiben.
Oder irre ich mich?.

maximov 9. Feb 2005 11:23

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Zitat:

Zitat von Quake
Ich bin mir nicht sicher, aber gehört das
Delphi-Quellcode:
initialization
RegisterClass(TModuleForm);
den in das Package? Ich würde es in die Anwendung schreiben.
Oder irre ich mich?.

Ja gehört in das package! Das plugIn soll seine klassen ja schliesslich selbst registrieren, die anwendung darf garnicht wissen, das diese klasse existiert, also nicht explizit.

maximov 9. Feb 2005 11:24

Re: Formulare als Datei speichern und zur Laufzeit laden? Wi
 
Zitat:

Zitat von Dani
...
ich hätte da gerne mal ein Problem. :mrgreen:
Aus einem mir verborgenem Grund findet FindClass() die modulare Formklasse nicht, obwohl sie im initialization-Abschnitt der Package-Unit mit RegisterClass registriert wird. Hier der Code:
...

Ich kann mir sehr gut vorstellen voran es liegt. Die preisfrage wäre, ob du die RTL auch extern gelinkt hast? Dh. bei solch einem PlugIn zeug müssen die Hauptanwendung und das plugIn sich die RTL (und am besten die VCL auch) teilen, denn sonst haben hat die hauptanwendung eine RTL mit einer leeren klassen-registratur und das PlugIn hat eine mit registrierten klassen, die leider niemand finden wird!

Liege ich mit der annahme richtig?


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