Código
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..
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009