Vamos criar uma aplicação qualquer com um formulário e um data module, mas apenas o data module será criado automaticamente pela aplicação e não definiremos o formulário principal (Figura 1).
Figura 1 |
Se você tentar rodar sua aplicação, não funcionará. Ela fecha logo que compila, pois a propriedade Application.MainForm está vazia.
Como esta propriedade é somente leitura, não podemos definir um valor a ela, então vamos trocar este valor trabalhando diretamente com sua posição na memória.
Para isso, inicie um novo projeto e insira nele:
1 Form
Propriedade Name:= 'foPrincipal'
Salve como untFoPrincipal
1 DataModule
Propriedade Name:= 'dmPrincipal'
Salve como untDmPrincipal
Crie esta procedure no dmPrincipal:
procedure DefineFormMain(FormAtivo:TForm);
var
TmpMain: ^TCustomForm; //Crio um ponteiro com classe TcustomForm
begin
//Passa o endereço da memória do Application.MainForm para a variável
TmpMain:= @Application.Mainform;
//Troca o valor da propriedade direto na memória no endereço que esta o Application.MainForm
TmpMain^:= FormAtivo;
end;
Declare na uses do dmPrincipal a unit untFoPrincipal
Aí no evento OnCreate do dmPrincipal faça:
procedure TdmPrincipal.DataModuleCreate(Sender: TObject);
begin
foPrincipal:= TfoPrincipal.Create(Application);
DefineFormMain(foPrincipal);
foPrincipal.Show;
end;
Se tiverem dúvidas, comentem aí e tentamos solucioná-la.
Download do projeto disponível neste link: https://www.dropbox.com/s/eflqnuhg80e33gg/Tutorial1.zip
Nenhum comentário:
Postar um comentário