Hallo,
ich bin echt am verzweifeln und hoffe jetzt hier auf Hilfe. Ich möchte ein Formular aus einem
Package.bpl dynamisch laden und im Hauptprogramm auf ein Panel setzen. Hatte das auch schon mal geschafft, aber den Code nicht mehr. Das Problem ist: beim aufrufen (Button1 des Hauptprogramms) kommt der Fehler: TForm2 ist nicht registriert. Obwohl ich in der
Unit des
Package.bpl die Klasse registriere mit:
initialization
RegisterClass(TForm2);
finalization
UnregisterClass(TForm2);
Habe mal ein Beispiel für hier erstellt: (Im Anhang ist das komplette Projekt als ZIP File drin)
Das Hauptprogramm:
Delphi-Quellcode:
program Project1;
uses
Forms,
MainUnit1
in '
MainUnit1.pas'
{Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit MainUnit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 =
class(TForm)
Panel1: TPanel;
Button1: TButton;
MainPanel: TPanel;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
phm: HModule;
FormClass: TFormClass;
Form: TForm;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.ProcessMessages;
phm := SysUtils.LoadPackage('
Package1.bpl');
If phm > 0
then begin
FormClass := TFormClass(Classes.GetClass('
TForm2'));
If FormClass =
nil then
raise Exception.Create('
TForm2' + '
ist nicht registriert');
if assigned(FormClass)
then begin
Application.CreateForm(FormClass, Form);
Form.Parent := MainPanel;
Form.Position := poDesigned;
Form.BorderStyle := bsNone;
Form.WindowState := wsMaximized;
Form.Show;
end;
end;
end;
initialization
RegisterClass(TForm1);
finalization
UnregisterClass(TForm1);
end.
----------------------------------------------------------------------------------------------------------
Das Nebenprogramm bzw. auch die Unit (xUnit2.pas) welche im Package1.bpl verwendet wird mit der Form2 die angebeblich nicht registriert ist
Delphi-Quellcode:
program xProject2;
uses
Forms,
xUnit2
in '
xUnit2.pas'
{Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
unit xUnit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolWin, StdCtrls;
type
TForm2 =
class(TForm)
Memo1: TMemo;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
initialization
RegisterClass(TForm2);
finalization
UnregisterClass(TForm2);
end.
So sieht das Package1.dpk aus - ist auch dabei in der Anlage
http://x-power.de/package.jpg
Kann mir da jemand helfen. Das muss so ähnlich gehen!
Vielen Dank für eure Hilfe und hoffentlich jede Menge Tipps.
Gruß Firefox