Problema com ponteiro e Application.MainForm
Amigos estou com um problema com ponteiros mas como naum sou acostumado a usar, naum estou conseguindo resolver ....
Dentro do meu MainForm tenho o seguinte :
e no create o seguinte :
quando faço isso o form2 é criado blz,porém ele aparece e o form principal naum , ou seja, o form2 acaba se tornando o MainForm da minha aplicação.Alguém sabe me dizer o pq ?
Dentro do meu MainForm tenho o seguinte :
private FFteste: ^TForm2;
e no create o seguinte :
procedure TfrmMain.FormCreate(Sender: TObject); begin FFteste:=@Form2; Application.CreateForm(TForm2,FFteste^); end;
quando faço isso o form2 é criado blz,porém ele aparece e o form principal naum , ou seja, o form2 acaba se tornando o MainForm da minha aplicação.Alguém sabe me dizer o pq ?
Alexandre_sbo
Curtidas 0
Respostas
Yallebr
07/04/2005
ALEXANDRE_SBO
Tente assim
Formulario := TFormulario.Create(nil).
Essa forma
Realmente é para criar o form principal.
Obejto := Classe.Create seria o correto.
Tente assim
Formulario := TFormulario.Create(nil).
Essa forma
Application.CreateForm(TForm2,FFteste^);
Realmente é para criar o form principal.
Obejto := Classe.Create seria o correto.
GOSTEI 0
Massuda
07/04/2005
O código que você postou foge um pouco do usual, principalmente porque ele está no evento OnCreate do que parece ser seu form principal. Dava para você esclarecer qual o objetivo desse código? Porque me parece que, na prática, ele equivale a escrever
procedure TfrmMain.FormCreate(Sender: TObject); begin Application.CreateForm(TForm2, Form2); FFteste:=@Form2; end;
GOSTEI 0
Alexandre_sbo
07/04/2005
Massada vou tenta explicar o que quero fazer pra vc ....
é assim eu tenho o dmconexaoPadrao,FrmMainPadrao e FrmLoginPadrao,
Dai faço uma herança dos Ficando dmConexao,FrmMain,frmLogin....
Dai no create no frmmain antes inherited, e seto uma variavel login:=@frmlogin
dai no create do frmmainPadrao eu quero criar o frmlogin e fazer algumas coisa com ele .....
é assim eu tenho o dmconexaoPadrao,FrmMainPadrao e FrmLoginPadrao,
Dai faço uma herança dos Ficando dmConexao,FrmMain,frmLogin....
Dai no create no frmmain antes inherited, e seto uma variavel login:=@frmlogin
dai no create do frmmainPadrao eu quero criar o frmlogin e fazer algumas coisa com ele .....
GOSTEI 0
Alexandre_sbo
07/04/2005
to mandando o codigo do frmMainPadrao pra ver se fica mais facil de entender o que preciso......
{cria classe de configuração}
Configuracoes:=TConfiguracoes.Create;
with frmSplash,Configuracoes.Geral do
begin
{checa se a applicação já existe}
ChecaApplicationTitle;
{cria tela de splash}
frmSplash := TfrmSplash.Create(Application);
try
frmSplash.Show;
frmSplash.Update;
AtualizaGauge(Gauge,1,30);
{Cria Dm de Conexao}
Application.CreateForm(TDmConexaoPadrao,Conexao^);
AtualizaGauge(Gauge,31,60);
with Conexao^ do
begin
{Conecta no banco com usuario sysdba para Carregar Configurações iniciais}
Conectar(UsuarioRoot,SenhaRoot);
AtualizaGauge(Gauge,61,80);
{seta usuario root para user control}
ControleUsuario:=TControleUsuario.Create(IBOUserControl,MailUserControl,Database,UsuarioRoot,SenhaRoot);
{caso o controle de usuario seja por empresa arruma o titulo da applicação para o usercontrol}
if FControlePorEmpresa then
IBOUserControl.ApplicationID:=Application.Title + IntToStr(Empresa.Codigo);
CarregaConfPadrao(CampoImagem,cds,self.img);
AtualizaGauge(Gauge,81,90);
{cria tela de login --> ela deve ser chamada de frmLogin e ser registrada no initialization do main herdado}
Application.CreateForm(TComponentClass(GetClass(´TfrmLogin´)),Login^);
AtualizaGauge(Gauge,91,100);
Empresa.Codigo:=EmpresaPadrao;
end; { <-- with }
{atualiza envio de e-mail}
ConfigMadExcept.updateSubject(Conexao^.UsuarioRoot,ClienteAgsi);
{seta caption}
Self.Caption:=´Menu - ´+Application.Title;
finally
frmSplash.Free;
end;
end; { <-- with }
GOSTEI 0
Massuda
07/04/2005
Mantendo o foco no seu problema original...
No seu caso, como está o código que cria sua janela principal (TfrmMain) no .DPR?
quando faço isso o form2 é criado blz,porém ele aparece e o form principal naum , ou seja, o form2 acaba se tornando o MainForm da minha aplicação.
Acho que isso está acontencendo porque o primeiro form criado em um aplicativo Delphi através do método TApplication.CreateForm é assumido pela VCL como sendo o form principal da aplicação.No seu caso, como está o código que cria sua janela principal (TfrmMain) no .DPR?
GOSTEI 0
Alexandre_sbo
07/04/2005
é o frmmain ....
e esta acontecendo isso que vc disse mesmo...ele está assumindo o primeiro form criado....
e esta acontecendo isso que vc disse mesmo...ele está assumindo o primeiro form criado....
GOSTEI 0
Massuda
07/04/2005
e esta acontecendo isso que vc disse mesmo...ele está assumindo o primeiro form criado....
Geralmente no .DPR do projeto o código é parecido com isto:begin Application.Initialize; Application.CreateForm(TfrmMain, frmMain); Application.Run; Application.Terminate; end.
GOSTEI 0
Alexandre_sbo
07/04/2005
este desse jeito sim...mudei o algoritmo e consegui arrumar meu problema ...vlw...........
GOSTEI 0