Fechar form em Modal no onShow? Tem como?
Ola pessoal
Estou com um problema, preciso fechar um form em Modal no seu próprio onShow. Sei que se eu colocar Close no onShow de um form em Show, isso da certo, ao abrir o form, ele se fecha automaticamente, agora com o ShowModel, mesmo executando o Close, ele se abre. Isso é por causa do Modal, teria como eu quebrar o modal do Form e conseguir fechar ele no onShow? Ou teria algum outro evento após o onShow que pudesse me fazer isso???
Valew
Estou com um problema, preciso fechar um form em Modal no seu próprio onShow. Sei que se eu colocar Close no onShow de um form em Show, isso da certo, ao abrir o form, ele se fecha automaticamente, agora com o ShowModel, mesmo executando o Close, ele se abre. Isso é por causa do Modal, teria como eu quebrar o modal do Form e conseguir fechar ele no onShow? Ou teria algum outro evento após o onShow que pudesse me fazer isso???
Valew
Seu_madruga
Curtidas 0
Respostas
Felipeucc
28/01/2008
Amigo, acho que seria interessante você reavaliar seu código, para ver a real necessidade do que você está solicitando. Pois a principio, não faz nenhum sentido você abrir um form para já fechá-lo ! Seria mais fácil não abrí-lo !
GOSTEI 0
Seu_madruga
28/01/2008
Concordo, mas a unica forma de fazer uma checagem X no meu form é durante o Show, no onCreate ou antes dele não tenho as informações necessárias que são herdadas. Por isso que precisa ser no OnShow.
GOSTEI 0
Junior Miranda
28/01/2008
Bom dia!
O que exatamente faz este formulário ???
[]´s
O que exatamente faz este formulário ???
[]´s
GOSTEI 0
Seu_madruga
28/01/2008
Antes de criar o Form, eu verifico se ele tem acesso, se tiver crio e abro ele, mas agora tenho outra verificação se o form é especial e se o usuário tbém é especial. Na função de verificar acesso não verifico se ele é especial, somente tenho acesso depois do form estar aberto. Tem como resolver isso, se eu modificar a função de verificar acesso mas não sei se vale a pena, pois terei q modificar muita coisa no sistema. É por isso que estou tentando imterromper o ShowModal depois que ele é executado.
GOSTEI 0
Rodc
28/01/2008
PostMessage(this.Handle, WM_CLOSE, 0, 0);
GOSTEI 0
Junior Miranda
28/01/2008
Olá.
Esta sem dúvida não é a forma mais correta da coisa ser feita. Mas tenta isto:
PostMessage(Self.Handle, WM_CLOSE, 0, 0);
Esta sem dúvida não é a forma mais correta da coisa ser feita. Mas tenta isto:
PostMessage(Self.Handle, WM_CLOSE, 0, 0);
GOSTEI 0
Rodc
28/01/2008
PostMessage(this.Handle, WM_CLOSE, 0, 0);
Opa!! Foi mal... ´this´ é no C++, o correto é ´Self´ mesmo.
GOSTEI 0
Onjahyr
28/01/2008
Não sei, não tenho certeza, mas acho que algumas coisas ainda ficam na memória ao fechar esta janela deste jeito. Não há como implementar uma rotina que capture que o form está fechando, e então liberar a memória da form com Release? :shock:
GOSTEI 0
Onjahyr
28/01/2008
Não sei, não tenho certeza, mas acho que algumas coisas ainda ficam na memória ao fechar esta janela deste jeito. Não há como implementar uma rotina que capture que o form está fechando, e então liberar a memória da form com Release? :shock:
Ou, quem sabe, capturar o retorno (código de erro) de [b:6d31f849b2]PostMessage[/b:6d31f849b2]
GOSTEI 0
Micheus
28/01/2008
[b:f39ab2b2bc]Seu_madruga[/b:f39ab2b2bc], experimente algo como criar uma function em seu form que faça a verificação da possibilidade de ele ser mostrado ou não. Se a function validar retorna True do contrário, false.
um ex.:
na hora do uso:
voce poderia ainda, mostrar ou não o form lá mesmo na função, principalmente ser vc precisar do retorno dele (valor de ModalResult). É questão de opção.
Se a verificação só pode ser feita com ele criado, acho que fica mais elegante deste modo.
Abraços
um ex.:
type TForm1 = class(TForm) ... public ... function CanShowForm :boolean; end; ... function TForm1.CanShowForm :boolean; begin If <condições OK> then Result := True else Result := False; end;
na hora do uso:
procedure TMainForm.MenuItem1Click(Sender :TObject); begin Form1 := TForm1.Create(Self); try if Form1.CanShowForm then Form1.ShowModal; finally Form1.Free; end; end;
voce poderia ainda, mostrar ou não o form lá mesmo na função, principalmente ser vc precisar do retorno dele (valor de ModalResult). É questão de opção.
Se a verificação só pode ser feita com ele criado, acho que fica mais elegante deste modo.
Abraços
GOSTEI 0
Rodc
28/01/2008
Não sei, não tenho certeza, mas acho que algumas coisas ainda ficam na memória ao fechar esta janela deste jeito. Não há como implementar uma rotina que capture que o form está fechando, e então liberar a memória da form com Release? :shock:
Considerando que ele está usando ShowModal(), a mensagem WM_CLOSE avisa o form para ele fechar e quando o form processar a mensagem (após a inicialização) ele será fechado e a função que chamou o ShowModal se responsabiliza em destruir o formulário.
Nota: Quando se clica no ´X´ do form, ele envia um WM_CLOSE para o fomulário.
GOSTEI 0
Rangel Alves
28/01/2008
Sei que a dúvida é antiga.. para para os as pessoas que estiverem pesquisando sobre isso vai a dica:
Form1 - Evento OnShow
--
Timer1.Enabled := true;
--
Coloque um Timer no Form com Interval de 100 (num da tempo nem piscar) e Enabled false;
No OnTimer
--
Timer1.Enabled := false;
Close;
--
Prontinho, simples e fácil como o Delphi deve ser!
Form1 - Evento OnShow
--
Timer1.Enabled := true;
--
Coloque um Timer no Form com Interval de 100 (num da tempo nem piscar) e Enabled false;
No OnTimer
--
Timer1.Enabled := false;
Close;
--
Prontinho, simples e fácil como o Delphi deve ser!
GOSTEI 0