Evento OnShow (Cencelar aparecimento do form)
Descobrir apenas no evento Onshow que nao posso mostrar o formulario o que faço para que ele não apareca?
Joananjr
Curtidas 0
Melhor post
Tinorj
17/12/2004
Para cancelar a exibição de um form
Onde:
[b:555a619a37]Form[/b:555a619a37] é o nome do seu formulário atual[/b]
PostMessage(Form.Handle, WM_Close, 0, 0);
Onde:
[b:555a619a37]Form[/b:555a619a37] é o nome do seu formulário atual[/b]
GOSTEI 1
Mais Respostas
Gandalf.nho
17/12/2004
Tente fechar o form nesse evento.
GOSTEI 0
Rafs
17/12/2004
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
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
GOSTEI 0
Massuda
17/12/2004
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.GOSTEI 0
Rafs
17/12/2004
[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....
GOSTEI 0
Rafs
17/12/2004
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.
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.
GOSTEI 0
Massuda
17/12/2004
[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;
type TForm1 = class(TForm) procedure FormShow(Sender: TObject); // ... end; // ... procedure TForm1.FormShow(Sender: TObject); begin Close; end;
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]
GOSTEI 0
Rafs
17/12/2004
Mais um adicional ao conhecimento... :D
GOSTEI 0
Tinorj
17/12/2004
Que tal vocês tentarem usar [b:00f78c7bf8]PostMessage(Form1.Handle, WM_Close, 0, 0);[/b:00f78c7bf8] no evento OnShow do Form1?
GOSTEI 0
Paulo_amorim
17/12/2004
Olá
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é+
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é+
GOSTEI 0
Dopi
17/12/2004
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
Eu tb tive alguns problemas usando o Close.... as vezes não fechava, ou dava erro...
Estou usando:
Application.Terminate
GOSTEI 0