|
Usuários |
|
62 Usuários Online
|
|
[Artigos]
Abrindo a tela de login após um determinado tempo - Parte II |
Publicado por ruysalles : Sexta, Abril 08, 2005 - 08:52 GMT-3 (5432 leituras)
5 Comentários Enviar para um amigo Versão para impressão
|
Galera, devido a uma falha minha, resolvi postar a segunda parte do artigo Abrindo a tela de login após um determinado tempo, antes do previsto. No evento OnClick do btn_entrar, ficou faltando uma linha de código: Fbol_fecha := true;
Segue abaixo o evento completo: procedure Tfrm_login.btn_entrarClick(Sender:
TObject);
begin
if edt_login.text = '' then
begin
showmessage('Favor informar o nome do usuário do sistema');
edt_login.setfocus;
exit;
end;
if edt_senha.text = '' then
begin
showmessage('Favor informar a senha do usuário do sistema');
edt_senha.setfocus;
exit;
end;
if (edt_login.text = 'teste') and (edt_senha.Text = 'senha') then
begin
Fbol_fecha := true;//Linha que faltou
Close
end
else
begin
showmessage('O seu login e/ou senha está(ão) incorreto(s)!');
end;
end;
Vamos agora passar para a segunda parte do Artigo.
No frm_principal, crie uma variável private do tipo Ttime com nome:
Lstr_ultima_acao, esta variável irá armazenar qual foi o horário da última ação
do usuário (digitação ou movimentação ou clique do mouse) e outra Ftmr_agora a
qual irá armazenar o horário atual.
Depois crie a seguinte procedure:
procedure Tfrm_Principal.controla_mouse_teclado(var Msg: TMsg; var Handled:
Boolean);
begin
//Função que testa se alguma tecla foi digitada
// ou se o mouse foi movimentado ou pressionado
If (Msg.message = WM_KEYDOWN) or
(Msg.message = VK_LBUTTON) or
(Msg.message = VK_RBUTTON) or
(Msg.message = VK_MBUTTON) or
(Msg.message = WM_MOUSEMOVE) then
begin
Ftmr_ultima_digitacao := Time;
end;
end;
No evento OnCreate do frm_principal, coloque o seguinte código:
procedure Tfrm_principal.FormCreate(Sender: TObject);
begin
Application.OnMessage := controla_mouse_teclado;
Ftmr_ultima_digitacao := Time;
end;
Adicione um Ttimer ao seu formulário principal e no evento Timer, renomei-o para
tmr_tela_login, altere o interval para 100 e adicione o seguinte código:
procedure Tfrm_principal.tmr_loginTimer(Sender: TObject);
begin
Ftmr_agora := time;
if (Ftmr_agora - Ftmr_ultima_digitacao) >= strtotime(’03:00:00’) then //A
tela de login aparecerá em 03 minutos
begin
try
frm_login := Tfrm_login.Create(Application);
Application.CreateForm(Tfrm_login, frm_login);
tmr_tela_login.Enabled := false;//Para o Ttimer
frm_login.showmodal;//Exibe a tela de login
frm_login.Destroy;
frm_login := nil;
tmr_tel_login.Enabled := true;
except
exit;
end;
end;
end;
Espero que este artigo seja útil a comunidade do Active Delphi.
Até a próxima,
Ruy Salles
Especialista em Análise de Sistemas
|
|
Comentários | |
| | Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos. |
por: ejmachado488 (mac@gmail.com)
: Jun 20, 2006 - 03:58 (Informações sobre o membro | Enviar uma mensagem)
http://
|
Caro Ruy Salles,
Seu código funciona e é muito importante pra segurança dos usuários. Sendo que existem umas informações que estão com falhas, conforme segue abaixo:
PRIMEIRA PARTE
No trecho de código
procedure Tfrm_MenuPrincipal.tmr_tela_loginTimer(Sender: TObject);
begin
Ftmr_agora := Time;
if (Ftmr_agora - Ftmr_ultima_acao) >= StrToTime('00:00:05') then
begin
try
frm_login := Tfrm_login.Create(Application);
Application.CreateForm(Tfrm_login,frm_login);
tmr_tela_login.Enabled := false;
frm_login.ShowModal;
frm_login.Destroy;
frm_login := nil;
tmr_tela_login.Enabled := true;
except
exit;
end;
end;
end;
Quando vc utiliza frm_login.destroy e logo em seguida frm_login := nil gera erro podendo suprimir o frm_login. Destroy.
SEGUNDA PARTE
1) Você informa a criação de uma variável Private do tipo TTime de nome ( Lstr_ultima_acao) sendo que no código onde existe a referência a esta variável vc utilizou a seguinte sintaxe : Ftmr_ultima_digitacao := Time;
o que gera erro pois esta variável não existe
2) Quando vc utiliza a condição if na procedure Tfrm_principal.tnr_loginTimer(Sender TObject) vc informa a strToTime('03:00:00') informando que a tela de login irá aparecer em 03 minutos, quando na realidade essa referência é pra 03 horas.
Se houver algo que eu tenha me enganado, por favor envie-me por email.
Evandro Jorge
ejmachado@bol.com.br
|
|
|
Edição 112 |
|
|
50 Programas Fontes |
|
|
Produtos |
|
|