Chamada de Form em BPL por Show e não ShowModal

Delphi

26/06/2013

Acompanhando os exemplos apresentados no Site DevMedia sobre a modularização de aplicações, percebi
que todos que fazem os exemplos fazendo chamadas ShowModal. Então tenho essa situação no form dentro da BPL
  procedure Exec_form_SModal(const NomeConex: TSQLConnection); StdCall;
      Exports Exec_form_SModal;

em seguida faço a declaração do procedimento

procedure Exec_form_SModal(const NomeConex: TSQLConnection); StdCall;
begin
Application.CreateForm(Tfr_CadP, fr_CadP);
fr_CadP.ConexaoSQL := NomeConex;
fr_CadP.ShowModal;
fr_CadP.Free;
end;

No lado da aplicação, eu tenho a seguinte situação ao chamar o form

procedure Tf_Principal.ac_CadPacExecute(Sender: TObject);
type
  TExecModule = procedure(const NomeConex: TSQLConnection); stdCall;
var
  myHandle : THandle;
  ExecMo   : TExecModule;
begin
  myHandle := LoadLibrary('C_CadP.bpl');
  if myHandle > 0 then
  begin
    @ExecMo := GetProcAddress(myHandle,'Exec_form_SModal');
    ExecMo(dmConex.Conexao);
    FreeLibrary(myHandle);
  end;
end;


Vejam que passo um parâmetro que é a conexão de banco de dados. No ShowModal funciona belamente. Porém, como poderia fazer a mesma coisa só que chamando o form com Show. Se substituo por Show no form da BPL ele é fechado automaticamente. Tenho que fazer alguma configuração extra? Alguém poderia me dar uma luz?

Obrigado desde já.
Dalton Corbetta

Dalton Corbetta

Curtidas 0

Respostas

Francisco Macário

Francisco Macário

26/06/2013

Olá.

Você está alterando nesse ponto?


procedure Exec_form_SModal(const NomeConex: TSQLConnection); StdCall;
begin
Application.CreateForm(Tfr_CadP, fr_CadP);
fr_CadP.ConexaoSQL := NomeConex;
fr_CadP.Show;//fr_CadP.ShowModal;
fr_CadP.Free;
end;


Se for, você precisa mudar a forma de liberação do form (fr_CadP.Free) para um outro evento.

At.
GOSTEI 0
Dalton Corbetta

Dalton Corbetta

26/06/2013

Bem, eu consegui uma função que carrega o modulo de acordo e faz o devidor upload do pacote.
O problema é que agora o sistema me exige uma conexão definida por um parâmetro que coloquei na inicialização.

um evento usa LoadPackage e o outro usa loadlibrary.
GOSTEI 0
POSTAR