Fechar um form no evento OnShow

19/05/2006

32

Olá pessoal
Estou fazendo uma rotina para validar o perfil de acesso dos usuarios no sistema. Gravo as permisoes em uma string q fica armazenada no banco de dados.
Uso uma herança de formularios... No form pai eu coloco todos os eventos comuns para todos os formularios q eu criar...
Eu queria saber se existe uma forma de forçar o fechamento de um formulario no Evento OnShow.
Por exemplo: Um usuario clica para abir uma tela. No form Pai eu tenho uma rotina para verificar se o usuario logado tem acesso aquela tela. Eu queria q no Show do formulario, dependento da resposta da verificacao, o form fechasse depois de uma msg de Acesso Negado.
Se alguem tiver alguma dica eu agradeço.
Valeu

rocedure TFrModeloCadastro.FormShow(Sender: TObject);
begin
Paginas.ActivePage := Acesso;
TbPrincipal.Open;
TbPrincipalOrderingChanged(TbPrincipal);

edPesquisa.SetFocus;
Screen.Cursor := crDefault;

if VerificaPermissao(FrPrincipal.PerfilAcesso,cod_tabela) = ´NAO PERMITIDO´ then
begin
MessageDlg(´Acesso não permitido´, mtWarning, [mbOK], 0);
Close;
end;
end;


Responder

Post mais votado

22/05/2006

Passa como parâmetro o Handle do form que você deseja fechar. Digamos estando no form FrModeloCadastro você está criando o form FrCadastroEmpresa, então ficaria assim:
PostMessage(FrCadastroEmpresa.Handle, WM_CLOSE, 0, 0); 



Responder

Mais Posts

19/05/2006

Siam

Ative um Timer e no evento onTimer dê o Close


Responder

19/05/2006

Colerapunk

Blz cara... foi isso mesmo q eu fiz... funcionou certinho...
mas pensei q tivesse outra forma de resolver.... so pra nao ficar usando um compenete pra fechar a tela...
Valeu


Responder

22/05/2006

Rodc

mas pensei q tivesse outra forma de resolver.... so pra nao ficar usando um compenete pra fechar a tela... Valeu

E tem sim, por sinal, quanto menos Timer seu sistema usar melhor!
Teste com o código abaixo:
PostMessage(Form1.Handle, WM_CLOSE, 0, 0);



Responder

22/05/2006

Colerapunk

Cara realmente o comando
PostMessage(Form.Handle, WM_CLOSE, 0, 0) funciona blz se for executado no proprio form

No meu caso estou usando um formulario padrao... todos os outros formularios sao decendentes de form padrao... A rotina de fechar a tela esta no formulario padrao e este comando de fechar a janela tem que ser excutado neste form padrão
Tipo assim:
PostMessage(FrModeloCadastro.Handle, WM_CLOSE, 0, 0);
onde FrModeloCadastro é o formulario pai, todos os outros form de cadastro descendem dele.

Esta dando um erro qdo o comando é executado. Talvez pq este form padrao nao é criado apenas o form q descende dele... teria uma forma de resolver isso?

Valeu


Responder

22/05/2006

Massuda

Como vai ser executado no próprio form que vai ser fechado, você não precisa dar o nome (da variável) do form...
PostMessage(Handle, WM_CLOSE, 0, 0);



Responder