GARANTIR DESCONTO

Fórum Fechar form em Modal no onShow? Tem como? #352582

28/01/2008

0

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


Seu_madruga

Seu_madruga

Responder

Posts

28/01/2008

Felipeucc

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 !


Responder

Gostei + 0

28/01/2008

Seu_madruga

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.


Responder

Gostei + 0

28/01/2008

Junior Miranda

Bom dia!
O que exatamente faz este formulário ???
[]´s


Responder

Gostei + 0

28/01/2008

Seu_madruga

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.


Responder

Gostei + 0

28/01/2008

Rodc

PostMessage(this.Handle, WM_CLOSE, 0, 0);



Responder

Gostei + 0

28/01/2008

Junior Miranda

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


Responder

Gostei + 0

28/01/2008

Rodc

PostMessage(this.Handle, WM_CLOSE, 0, 0);

Opa!! Foi mal... ´this´ é no C++, o correto é ´Self´ mesmo.


Responder

Gostei + 0

28/01/2008

Onjahyr

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:


Responder

Gostei + 0

28/01/2008

Onjahyr

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]


Responder

Gostei + 0

28/01/2008

Micheus

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


Responder

Gostei + 0

29/01/2008

Rodc

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.


Responder

Gostei + 0

21/09/2011

Rangel Alves

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!

Responder

Gostei + 0

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

Aceitar