Einzelnen Beitrag anzeigen

firefox
(Gast)

n/a Beiträge
 
#1

Probleme mit LoadPackage Fehler: TForm2 ist nicht registrier

  Alt 19. Mai 2005, 09:21
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
Angehängte Dateien
Dateityp: zip loadpack_900.zip (435,6 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat