Formulário MDI

Delphi

15/10/2008

Olá amigos, minha dificuldade é o seguinte: tenho uma aplicação que funciona com formulários MDI...

Gostaria que o usuário pudesse abrir diversas janelas, mas caso ele clique para abrir uma janela que já esteja aberta o sistema apenas trazesse ela para frente e não abrisse uma duplicata da janela...

Testeis umas funções que buscam os formulários na memória, mas nenhuma funcionou corretamente...

Se alguém tiver alguma dica agradeço,
Lex.


Buenolex

Buenolex

Curtidas 0

Respostas

Rasn

Rasn

15/10/2008

buenolex,

Por favor, poste o código-fonte exemplo da chamada de um form para que eu possa tentar ajudá-lo.


GOSTEI 0
Rodrigo Lopez

Rodrigo Lopez

15/10/2008

Tente assim

if Assigned(form1) then
form1.show;


GOSTEI 0
Buenolex

Buenolex

15/10/2008

Estou tentando o seguinte:

if Formexiste(frmCadEmpresa)= false then
frmCadEmpresa := tfrmCadEmpresa.Create(Self);

----------

function TfrmTelaPrincipal.Formexiste(nomejanela: Tform): boolean;
var
I : integer;
begin
Formexiste := false;
for i := 0 to componentcount - 1 do
if Components[i] is TForm then
if TForm(Components[i]) = nomejanela then
Formexiste := true
else
begin
nomejanela.WindowState := WsNormal;
nomejanela.BringToFront;
nomejanela.Setfocus;
end;
end;


Tentei verificar se já existe e existindo chamar para primeiro plano... Não funcionou certo pois dá um erro ao tentar abrir outro formulário...
Lex.


GOSTEI 0
Wdrocha

Wdrocha

15/10/2008

Eu não cheguei a testar....

mas o seu código para verificar se o form existe tem possivelmente um erro..



Function TfrmTelaPrincipal.Formexiste(nomejanela: Tform): boolean; 
var 
I : integer; 
begin 
Formexiste := false; 
for i := 0 to componentcount - 1 do 
if Components[i] is TForm then 
if TForm(Components[i]) = nomejanela then //AQ NESTA LINHA
Formexiste := true 
else 
begin 
nomejanela.WindowState := WsNormal; 
nomejanela.BringToFront; 
nomejanela.Setfocus; 
end; 
end; 




Acho q vc poderia ter feito assim...


Function TfrmTelaPrincipal.Formexiste(nomejanela: Tform): boolean; 
var 
I : integer; 
begin 
Formexiste := false; 
for i := 0 to componentcount - 1 do 
if Components[i] is TForm then 
if TForm(Components[i]).Name = nomejanela.Name  then//TROQUE AQ NESTA LINHA 
Formexiste := true 
else 
begin 
nomejanela.WindowState := WsNormal; 
nomejanela.BringToFront; 
nomejanela.Setfocus; 
end; 
end; 



ou até mesmo assim...

Antes do End final da Unit do form MDI vc pode fazer assim...


Initialization 
     RegisterClass(ClasseDoSeuForm);


E na hora d verificar fazer como o colega disse..


If Assigned (ClasseDoSeuForm) Then
   Form.Show



Espero ter ajudado...


Flw


GOSTEI 0
POSTAR