GARANTIR DESCONTO

Fórum Problema com showmodal #348608

07/11/2007

0

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?


Crpavao

Crpavao

Responder

Posts

07/11/2007

Massuda

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...
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;



Responder

Gostei + 0

07/11/2007

Crpavao

Obrigado Massuda. Vou testar e retorno aqui o resultado


Responder

Gostei + 0

13/11/2007

Crpavao

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.


Responder

Gostei + 0

13/11/2007

Massuda

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.


Responder

Gostei + 0

14/11/2007

Crpavao

Obrigado Massuda, vou testar em momento oportuno e te retorno..
Mais uma vez, obrigado pela força.


Responder

Gostei + 0

14/11/2007

Martins

[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.

  MessageBox(Form2.Handle, pchar(´Testando..´), pchar(´Informação´), mb_ok);


Boa sorte e bons códigos.


Responder

Gostei + 0

14/11/2007

Fabio Ferreira

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


Responder

Gostei + 0

14/11/2007

Massuda

[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.


Responder

Gostei + 0

15/11/2007

Fabio Ferreira

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar