Buscar

Descobrindo se um form já está criado

Código

{Bem saber se um form já esta ou não criado, melhor dizer instanciado, não é um problema muito crítico, abaixo pode-se ver uma unit padrão criada com um form vazio no Delphi, esta unit alem de declarar o nova classe TForm1 cria também uma variável Form1 do Isto é muito importante que seja observado, uma variável para um tipo "FORM" nada mais é que um ponteiro, ou seja ela apenas mostra em que local da memória está a instancia do seu form, enquanto o seu form não existir este ponteiro deve apontar para lugar }
unit Unit1
interface
uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.DFM}
end. {Partindo deste princípio podemos verificar se um form foi ou não instanciado verificando o valor guardado em FORM1, se este valor for diferente de "NIL" significa que o Form já foi instanciado...

Bem a coisa não é assim tão simples, imagine que um amigo mudou-se para São Paulo e lhe passou seu novo endereço, você recebe e anota em sua agenda,. depois de dois meses ele resolve que não quer mais morar em São Paulo e vai embora, ok o fato de seu amig

A forma mais limpa e automática para se contornar este problema nos obriga acodificar o seguinte no evento OnDestroy do Form :}



procedure TForm1.FormDestroy(Sender: TObject);
begin
Form1 := nil;
end; {Assim, quando o "FORM1" for destruído ele apaga o seu endereço junto.

Assim quando for instanciar um form utilize a seguinte verificação:}



if Form2 = nil then
Form2 := TForm2.Create(Self);
Form2.Show;... {Interessante que o Show quando um form já esta criado tem o efeito de umBringToFront.

Bem tudo isso resolve parte do problema, a outra parte tem de ser resolvida por você estruturando o seu programa de forma aos controles funcionem de acordo.

1 - Este controle não funciona para forms com múltiplas instancias, a não ser que você crie uma variável para cada instancia.

Pessoalmente eu nunca usei isso, se um form pode ter múltiplas instancias em MDI então controle por ActiveMDIChild e se for SDI então não sei porque ter mais de uma instancia.

2 - Quando for criar um novo form não crie variáveis desnecessariamente, utilize a variável que já esta sendo criada na unit do Form.

Ex: Dados FORM1 e FORM2

Apenas FORM1 está no AUTO-CREATE. Quando no uses de FORM1 for referenciada a unit UNIT2 a variável FORM2 estará acessível, use-a.}



FORM2 := TFORM2.CREATE(SELF); {3 - Quando um Form é mostrado com ShowModal este tipo de controle não se aplica já que será impossível mostrar qualquer outro form. }

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Forms
Adicionada dia: 11/06/03
Por: Felipe Monteiro
Visualizada: 18098 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009