Esse artigo faz parte da revista Clube Delphi edição 7. Clique aqui para ler todos os artigos desta edição


Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML. 

Fazendo um FoRm Showmodal, Utilizando Show


Documento Técnico – Inprise


Algumas vezes, necessitamos ter um form atuando como um form showModal, mas de forma que fosse possível controlá-lo, a partir do form que o está mostrando. Um exemplo corresponderia à apresentação de uma caixa de diálogo com uma barra de progresso. O problema é que se utilizarmos showModal, então, todo o código necessário para se manipular a operação, deverá residir no form showModal. isto não é muitas vezes a maneira desejada de se escrever o código. Uma forma fácil de se fazer isto é através da utilização das funções disableTaskWindows e enableTaskWindows, funções implementadas em form.pas e que fazem uso da função enableWindow da API do Windows. Desta forma, a caixa de diálogo irá comportar-se como um form showModal, mas ao mesmo tempo, permitirá ao form que estaria executando o comando showModal, controlar o diálogo. Para isso declare a procedure abaixo na seção public:

 

procedure ShowProgressDlg;

 

Na seção Implementation escreva o seguinte código da procedure:

 

procedure TForm1.ShowProgressDlg;

var

   WindowList: Pointer;

begin

    {Desabilita todos os forms, exceto o Form2}

     WindowList := DisableTaskWindows(Form2.Handle);

 

try

   Form2.Show;

   {Loop que por exemplo realiza uma tarefa}

    sleep(5000) //tente clicar no form1 e verá que o form2 está agindo //como modal;

   {final do loop}

finally

{habilita todos os forms novamente}

EnableTaskWindows(WindowList);

Form2.Close;

end;

end;

 

No evento OnActivate do Form1, escreva:

 

procedure TForm1.FormActivate(Sender: TObject);

begin

ShowProgressDlg;

end;

 

Salve e execute o projeto. O form2 será carregado como Sendo Showmodal, mas na verdade ele não é.