Problema com showmodal
Ultimamente meus sistemas estão com um problema que não consigo entender: De vez em quando as telas abertas com SHOWMODAL não funcionam, isto é, ficam atrás da tela que a chamou.
Saindo do programa e voltando o problema some.
Alguém pode me explicar este pepino?
Pode ser o Windows XP?
Saindo do programa e voltando o problema some.
Alguém pode me explicar este pepino?
Pode ser o Windows XP?
Crpavao
Curtidas 0
Respostas
Massuda
07/11/2007
Não é um problema do Windows, mas sim um problema relacionado ao modo como a VCL implementa os objetos TApplication e TForm.
Para ajudar a minimizar isso, inclua isto no seu form modal...
Para ajudar a minimizar isso, inclua isto no seu form modal...
type TSeuFormModal = class(TForm) ... protected procedure CreateParams(var Params: TCreateParams); override; ... end; ... procedure TSeuFormModal.CreateParams(var Params: TCreateParams); begin inherited; if Assigned(Owner) and (Owner is TWincontrol) then Params.WndParent := TWinControl(Owner).handle else if Assigned(Screen.Activeform) then Params.WndParent := Screen.Activeform.Handle; end;
GOSTEI 0
Crpavao
07/11/2007
Obrigado Massuda. Vou testar e retorno aqui o resultado
GOSTEI 0
Crpavao
07/11/2007
Qdo uso MessageDgl também ocorre este problema. Teria alguma solução para este caso?
Substitui todos eles por um form criado por mim, mas gostaria de saber se tem solução.
Grato.
Substitui todos eles por um form criado por mim, mas gostaria de saber se tem solução.
Grato.
GOSTEI 0
Massuda
07/11/2007
Troque seus MessageDlg e ShowMessage por MessageBox da unit Windows.
Note que o primeiro parametro do MessageBox é o handle de uma janela, sempre informe o handle da janela ativa do seu programa (algo do tipo SeuForm.Handle) ou informe Screen.ActiveForm.Handle.
Note que o primeiro parametro do MessageBox é o handle de uma janela, sempre informe o handle da janela ativa do seu programa (algo do tipo SeuForm.Handle) ou informe Screen.ActiveForm.Handle.
GOSTEI 0
Crpavao
07/11/2007
Obrigado Massuda, vou testar em momento oportuno e te retorno..
Mais uma vez, obrigado pela força.
Mais uma vez, obrigado pela força.
GOSTEI 0
Martins
07/11/2007
[quote:d9d0e2dc68=´Pavão´]Obrigado Massuda, vou testar em momento oportuno e te retorno..
Mais uma vez, obrigado pela força.[/quote:d9d0e2dc68]
Algo mais ou menos assim.
Boa sorte e bons códigos.
Mais uma vez, obrigado pela força.[/quote:d9d0e2dc68]
Algo mais ou menos assim.
MessageBox(Form2.Handle, pchar(´Testando..´), pchar(´Informação´), mb_ok);
Boa sorte e bons códigos.
GOSTEI 0
Fabio Ferreira
07/11/2007
Massuda,
Eu utilizo o application.messagebox(...) da unit forms que esta encapsulando a windows.messagebox. Tem alguma vantagem ou é melhor de uma forma ou de outra ?
Fabio
Eu utilizo o application.messagebox(...) da unit forms que esta encapsulando a windows.messagebox. Tem alguma vantagem ou é melhor de uma forma ou de outra ?
Fabio
GOSTEI 0
Massuda
07/11/2007
[quote:3ec6e91675=´Fabio Ferreira´]Eu utilizo o application.messagebox(...)[/quote:3ec6e91675]Com relação ao problema que deu origem a este tópico, TApplication.MessageBox tem o mesmo problema que MessageDlg ou ShowMessage.
GOSTEI 0
Fabio Ferreira
07/11/2007
Estou com um problema que resolvi quebrando o galho, que deve ter relacao com esse topico.
Apos o codigo abaixo a mensagem simplesmente nao aparece :
Frmtroca:= TFrmtroca.create( nil );
result:= Frmtroca.showmodal = mrok;
Frmtroca.release;
retorno:= windows.messagebox( screen.activeform.handle, pchar( mensagem )....;
Neste caso a mensagem nao é apresentada para o usuario, pulando o comando, retornando com 0 (zero);
O que estamos fazendo e testando o ´retorno´ e se for iqual a zero apresenta a mensagem novamente e aí sempre aparece.
Esse problema somente acontece apos a chamada de um form, como no exemplo acima.
O messagebox foi testado tanto com a Windows. quanto com o Application.
Aonde esta o erro desse caso ?
Fabio
Apos o codigo abaixo a mensagem simplesmente nao aparece :
Frmtroca:= TFrmtroca.create( nil );
result:= Frmtroca.showmodal = mrok;
Frmtroca.release;
retorno:= windows.messagebox( screen.activeform.handle, pchar( mensagem )....;
Neste caso a mensagem nao é apresentada para o usuario, pulando o comando, retornando com 0 (zero);
O que estamos fazendo e testando o ´retorno´ e se for iqual a zero apresenta a mensagem novamente e aí sempre aparece.
Esse problema somente acontece apos a chamada de um form, como no exemplo acima.
O messagebox foi testado tanto com a Windows. quanto com o Application.
Aonde esta o erro desse caso ?
Fabio
GOSTEI 0