GARANTIR DESCONTO

Fórum Evento OnShow (Cencelar aparecimento do form) #262453

17/12/2004

0

Descobrir apenas no evento Onshow que nao posso mostrar o formulario o que faço para que ele não apareca?


Joananjr

Joananjr

Responder

Post mais votado

17/12/2004

Para cancelar a exibição de um form

PostMessage(Form.Handle, WM_Close, 0, 0);


Onde:
[b:555a619a37]Form[/b:555a619a37] é o nome do seu formulário atual[/b]


Tinorj

Tinorj
Responder

Gostei + 1

Mais Posts

17/12/2004

Gandalf.nho

Tente fechar o form nesse evento.


Responder

Gostei + 0

17/12/2004

Rafs

Infelizmente não é possível chamar o método Close de dentro do evento OnShow, nem também chamar algum procedimento que feche o formulário.
Mas você podería colocar um Timer no formulário, coloque sua propriedade Interval para 1 e no evento OnTimer chame o método Close.
Daí você verifica se o formulário deve ou não ser apresentado e seta a propriedade Enabled do Timer para True ou False, conforme a necessidade


Responder

Gostei + 0

17/12/2004

Massuda

Infelizmente não é possível chamar o método Close de dentro do evento OnShow, nem também chamar algum procedimento que feche o formulário.[...]
Isso não está correto... na verdade dentro do evento TForm.OnShow você não pode chamar TForm.Hide nem fazer TForm.Visible := False (dá runtime error... ´Cannot change Visible in OnShow or OnHide´), mas você pode chamar TForm.Close.


Responder

Gostei + 0

17/12/2004

Rafs

[quote:ddd4b21b44=´Rafs´]Infelizmente não é possível chamar o método Close de dentro do evento OnShow, nem também chamar algum procedimento que feche o formulário.[...]
Isso não está correto... na verdade dentro do evento TForm.OnShow você não pode chamar TForm.Hide nem fazer TForm.Visible := False (dá runtime error... ´Cannot change Visible in OnShow or OnHide´), mas você pode chamar TForm.Close.[/quote:ddd4b21b44]
Estranho.... Testei aqui, antes de postar, e no momento em que executava o método Close me retornava o erro de que não é possível chamar Hide ou mudar a propriedade Visible. Mas veja que eu chamei o método Close.
Vou fazer o teste novamente e volto a postar....


Responder

Gostei + 0

17/12/2004

Rafs

Refiz o teste aqui e o que acontece é que depende de como se chama o form (Show ou ShowModal).
Chamando-o com Show ocorre o erro descrito acima, mas se chamá-lo com ShowModal o erro não ocorre, mas também o comando Close não é executado.


Responder

Gostei + 0

18/12/2004

Massuda

[quote:529be22614=´Massuda´][quote:529be22614=´Rafs´]Infelizmente não é possível chamar o método Close de dentro do evento OnShow, nem também chamar algum procedimento que feche o formulário.[...]
Isso não está correto... na verdade dentro do evento TForm.OnShow você não pode chamar TForm.Hide nem fazer TForm.Visible := False (dá runtime error... ´Cannot change Visible in OnShow or OnHide´), mas você pode chamar TForm.Close.[/quote:529be22614]
Estranho.... Testei aqui, antes de postar, e no momento em que executava o método Close me retornava o erro de que não é possível chamar Hide ou mudar a propriedade Visible. Mas veja que eu chamei o método Close.[/quote:529be22614]
Fiz alguns testes... na verdade, chamar TForm.Close dentro do evento TForm.OnShow dá problema [b:529be22614]a não ser que[/b:529be22614] você trate o evento TForm.OnClose e defina um valor para Action diferente de caHide (que é o default). Portanto, o código...
type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    // ...
  end;

// ...

procedure TForm1.FormShow(Sender: TObject);
begin
    Close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Action := caFree;
end;
...funciona sem problemas enquanto este código...
type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    // ...
  end;

// ...

procedure TForm1.FormShow(Sender: TObject);
begin
    Close;
end;
... dá problema se o form não for o form principal do programa.

Moral da estória: dá para chamar Close no OnShow se...[list:529be22614][*:529be22614]no OnClose você fizer Action caHide OU[*:529be22614]o form for o form principal do programa.[/list:u:529be22614]


Responder

Gostei + 0

18/12/2004

Rafs

Mais um adicional ao conhecimento... :D


Responder

Gostei + 0

21/12/2004

Tinorj

Que tal vocês tentarem usar [b:00f78c7bf8]PostMessage(Form1.Handle, WM_Close, 0, 0);[/b:00f78c7bf8] no evento OnShow do Form1?


Responder

Gostei + 0

21/12/2004

Paulo_amorim

Olá

Que tal vocês tentarem usar [b:b7768d18d5]PostMessage(Form1.Handle, WM_Close, 0, 0);[/b:b7768d18d5] no evento OnShow do Form1?

Se essa função funciona a contento então o problema foi resolvido. A discussão foi em torno de ser ou não possível fazer Close em um evento Form.OnShow, e não qual rotina é melhor.

Até+


Responder

Gostei + 0

21/12/2004

Dopi

Pondo mais lenha no fogo ;-)

Eu tb tive alguns problemas usando o Close.... as vezes não fechava, ou dava erro...

Estou usando:
Application.Terminate


Responder

Gostei + 0

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

Aceitar