jzginez
15-02-2014, 01:04:44
Hola amigos estoy intentando dividir mi aplicación en paquetes, ya lei todas las ayudas que hay aquí en el foro, vi el video que recomiendan, etc.
logro hacer lo siguientes:
Forma principal:
procedure TFrmModCatalogos.SpeedButton1Click(Sender: TObject);
Var
PackageModule: HModule;
Aclass: TPersistentClass;
begin
PackageModule:= Loadpackage('PackCtrlClasiClientes.bpl');
if PackageModule <> 0
Then Begin
Aclass:= GetClass('TFrmGBCLasiClient1');
if Aclass <> nil
Then Begin
FormaHija:= TComponentClass(Aclass).Create(Application) as TForm;
if Assigned(FormaHija)
then FormaHija.OnClose:= ChildFormClose
else begin
UnloadPackage(PackageModule);
PackageModule:= 0;
end;
End;
End;
end;
Creo el paquete PackCtrlClasiClientes.bpl con las siguientes formas
Forma 1:
unit UniFrmGBCLasiClient;
.....
type
TFrmGBCLasiClient = class(TForm)
....
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmGBCLasiClient: TFrmGBCLasiClient;
implementation
{$R *.dfm}
.......
initialization
RegisterClass(TFrmGBCLasiClient);
finalization
UnRegisterClass(TFrmGBCLasiClient);
end.
Forma 2:
unit UniFrmGBCLasiClient1;
...
type
TFrmGBCLasiClient1 = class(TFrmGBCLasiClient)
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmGBCLasiClient1: TFrmGBCLasiClient1;
implementation
{$R *.dfm}
initialization
RegisterClass(TFrmGBCLasiClient1);
finalization
UnRegisterClass(TFrmGBCLasiClient1);
end.
He suprimido el código de los componentes de las formas para ahorrar espacio
Como veran en la forma principal al hacer click en un boton cargo el paquete y mando a llamar a la forma 2 (TFrmGBCLasiClient1) y esto funciona de forma correcta no hay ningun problema, pero al agregar una tercera forma a mi paquete
Forma 3:
unit UniFrmAMClasiClient;
....
type
TFrmAMClasiClient = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmAMClasiClient: TFrmAMClasiClient;
implementation
{$R *.dfm}
.....
initialization
RegisterClass(TFrmAMClasiClient);
finalization
UnRegisterClass(TFrmAMClasiClient);
end.
En ejecutarlo en el programa principal AClass siempre me da nil
Aclass:= GetClass('TFrmGBCLasiClient1');
if Aclass <> nil
Alguna idea para crear esta 3° Forma? o como corregir el error
Gracias
logro hacer lo siguientes:
Forma principal:
procedure TFrmModCatalogos.SpeedButton1Click(Sender: TObject);
Var
PackageModule: HModule;
Aclass: TPersistentClass;
begin
PackageModule:= Loadpackage('PackCtrlClasiClientes.bpl');
if PackageModule <> 0
Then Begin
Aclass:= GetClass('TFrmGBCLasiClient1');
if Aclass <> nil
Then Begin
FormaHija:= TComponentClass(Aclass).Create(Application) as TForm;
if Assigned(FormaHija)
then FormaHija.OnClose:= ChildFormClose
else begin
UnloadPackage(PackageModule);
PackageModule:= 0;
end;
End;
End;
end;
Creo el paquete PackCtrlClasiClientes.bpl con las siguientes formas
Forma 1:
unit UniFrmGBCLasiClient;
.....
type
TFrmGBCLasiClient = class(TForm)
....
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmGBCLasiClient: TFrmGBCLasiClient;
implementation
{$R *.dfm}
.......
initialization
RegisterClass(TFrmGBCLasiClient);
finalization
UnRegisterClass(TFrmGBCLasiClient);
end.
Forma 2:
unit UniFrmGBCLasiClient1;
...
type
TFrmGBCLasiClient1 = class(TFrmGBCLasiClient)
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmGBCLasiClient1: TFrmGBCLasiClient1;
implementation
{$R *.dfm}
initialization
RegisterClass(TFrmGBCLasiClient1);
finalization
UnRegisterClass(TFrmGBCLasiClient1);
end.
He suprimido el código de los componentes de las formas para ahorrar espacio
Como veran en la forma principal al hacer click en un boton cargo el paquete y mando a llamar a la forma 2 (TFrmGBCLasiClient1) y esto funciona de forma correcta no hay ningun problema, pero al agregar una tercera forma a mi paquete
Forma 3:
unit UniFrmAMClasiClient;
....
type
TFrmAMClasiClient = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmAMClasiClient: TFrmAMClasiClient;
implementation
{$R *.dfm}
.....
initialization
RegisterClass(TFrmAMClasiClient);
finalization
UnRegisterClass(TFrmAMClasiClient);
end.
En ejecutarlo en el programa principal AClass siempre me da nil
Aclass:= GetClass('TFrmGBCLasiClient1');
if Aclass <> nil
Alguna idea para crear esta 3° Forma? o como corregir el error
Gracias