Modularização do Sistema - Packages

20/02/2003

0

Alguém sabe como trabalhar com Packages?

Meu problema é o seguinte :

var
Cls : TPersistentClass;
begin
phm := LoadPackage(´pk_tela1.bpl´);
Try
InitializePackage(phm);
try
Cls := FindClass(´TTela1´);
except
Cls := nil;
end;
if Cls <> nil Then
begin
if AForm = nil Then
begin
Application.CreateForm(TComponentClass(Cls), AForm);
with AForm do
begin
FormStyle := fsMDIChild;
Show;
end;
end;
end;
finally
UnLoadPackage(phm);

Quando eu executo o UnLoadPackage() neste caso onde a janela é MDI e não posso usar o ShowModal, ele Mostra a Janela e fecha em seguida gerando uma Access Violation por que não existe um ´PAUSE´ entre o SHow e o UnLoadPackage()

Alguém sabe como controlar as MDI´s que já estão abertas na memória e impedir que se abram outras.

Luiz


Anonymous

Anonymous

Responder

Posts

20/02/2003

Lfernandos

Não sei se resolve o seu problema mas use a propriedade MDIChidCount do Form para contar quantas janelas MDI já tem na tela e se tiver mais que uma não permita criar mais janelas.

var
Cls : TPersistentClass;
begin
phm := LoadPackage(´pk_tela1.bpl´);
Try
InitializePackage(phm);
try
Cls := FindClass(´TTela1´);
except
Cls := nil;
end;
if Cls <> nil Then
begin
if (AForm = nil) and (MDIChildCount = 0 ) Then
begin
Application.CreateForm(TComponentClass(Cls), AForm);
with AForm do
begin
FormStyle := fsMDIChild;
Show;
end;
end;
end;
finally
UnLoadPackage(phm);

E mais o UnLoadPackage vc deveria usar quando fechar o form principal ou quando fechar a janela MDI. Ficaria assim:

procedure TForm1.FormClose(Sender: TObject; var Action: CloseAction);
begin
if(phm <> 0) then
begin
AForm.Free;
UnloadPackage(phm);
end;
end;


Responder

20/02/2003

Anonymous

Valeu CAra!!

Resolveu sim... Até fiz uma função para verificar se o formulário está a berto ou não.

Luiz


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar