Buscar

Criando forms dinamicamente

Código

A Abordagem SDI

Com certeza criar os forms que vc vai utilizar em tempo de execução
é uma das grandes "sacadas" do Delphi, uma tarefa não tão complicada mas
com varias alternativas de como ser executada.

Vamos supor inicialmente que vc está trabalhando com uma aplicação
SDI (Single Document Interface) ou documento de interface simples,
utilizando essa forma de desenvolvimento vc tem janelas sobre
janelas, o Delphi é um exemplo disso, para criar um form em tempo
de execução siga os seguintes passos.

1- Crie um projeto novo (SDI), o Delphi automaticamente cria o Form1.
2- Crie um Form Novo, ele recebera o nome de Form2.
3- Va em Options/Project, vc vai ver dois list boxes, o da esquerda
   contem os forms que devem ser criados automaticamente quando sua
   aplicação for iniciada,  os dois forms devem estar ai,  pois bem
   mova Form2 para o List Box da direita que  deve conter os forms
   que ficam disponíveis porém não são automaticamente criados.
-------------------------------------------------------------------
(importante) Nesse momento vc retirou do Delphi a obrigação de criar
             o Form2,se vc não o criar e em algum momento fizer
             referencia a ele isso deve causar um erro.
--------------------------------------------------------------------
4- Ok, esqueca temporariamente Form2,em Form1 crie um botao e digite
   o código abaixo em seu evento TForm1.Button1Click

implementation

{$R *.DFM}

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(self);
  Form2.Show;
end;

end.

5- Observe o uses criado logo após {$R *.DFM}, ele deve fazer
   referencia a Unit de Form2, que no caso do meu exemplo
   chama-se Unit2.

Pronto, com esses pequenos cuidados  vc ja estara criando seus forms
em tempo de execução :)

Agora uma dica interessante, se vc executar esse programa vc vai ver
que quando Form2 for criado o usuario pode clicar em Form1 e esse
receberá o foco, coisa que pode nao ser interessante.

Para evitar este tipo de comportamento da sua aplicação utilize
ShowModal e não Show para chamar o segundo form...

  Form2 := TForm2.Create(self);
  Form2.ShowModal;

O ShowModal vai fazer com que a aplicação fique com Form2
permanentemente em primeiro plano, Form1 não poderá ser
acessado até que Form2 seja fechado.

A Abordagem MDI

   A coisa muda um pouquinho quando voce esta trabalhando em um
projeto MDI, basicamente o controle que voce tem de executar é
o mesmo, mas as caracteristicas do projeto podem lhe trair ...

   Primeiro que em um projeto MDI não podem existir forms não
visiveis, ou seja, assim que um determinado form é criado ele
já se torna visivel, não é necessario um SHOW ou SHOWMODAL para
fazer isso, portanto não existe outro caminho senão criar todos
os forms de sua aplicação em RUN TIME.

Todos os passos descritos no exemplo acima são validos aqui tambem,
mas para que o seu projeto caracterize-se como MDI você tem de mudar
a propriedade FormStyle dos forms do projeto como segue :

O form principal da aplicação tem de estar como fsMDIForm.

Os outros forms que fazem parte da aplicação como fsMDIChild.

Algum form especial, como o form onde o usuario configura a
impressora, deve ser deixado como fsNormal.

Vá até Project/Options e deixe apenas o form principal como
AutoCreate.

----------------------------------------------------------------
(importante) Nesse  momento  vc retirou do Delphi a obrigação de
             criar o Form2,se vc não o criar e em algum momento
             fizer referencia a ele isso deve causar um erro.
-----------------------------------------------------------------

Pois bem,  como uma das  caracteristicas de uma  aplicação MDI é
o form principal conter os outros forms não podemos ficar colocando
botões para testar a criação dinamica desses forms, melhor utilizar
um componente do tipo Menu e codificar a chamada aos outros forms
nele ...

implementation

{$R *.DFM}

uses Unit2;

procedure TForm1.Form21Click(Sender: TObject);
begin
  Form2 := TForm2.Create(self);
end;

end.

Uma das primeiras coisas diferentes é que não é mais necessário usar
o Show :) ...

Alguns cuidados devem ser tomados quando trabalhamos com uma aplica-
ção MDI.

Primeiro não existe porque ficar discutindo como evitar que o
usuário fique abrindo muitos forms ao mesmo tempo, já que esta
é a principal qualidade de um projeto MDI,caso voce não queira
este tipo de comportamento pare de ler e volte para SDI ...

O controle de multiplas instancias pode ser feito ou não, fica a crite-
rio do desenvolvedor..

Publicidade

Vote na dica




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


Detalhes da dica

Categoria: Forms
Adicionada dia: 13/01/04
Por: Fabricio Giovanni Costa De Souza
Visualizada: 9458 vezes

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