problemas com evento Tform1.OnKeyDown

Delphi

02/08/2004

estou fazendo um aplicativo simples para travar e destravar o windows, ele esta travando ts beleza, mas quando mando destravar o Tform1, do botao destravar do Tform2 gera um erro no evento, pq esse evento seria o responsavel por liberar o formulario principal da trava do Alt+F4...
erro do compilador = [Error] Unit_destravar.pas(90): Incompatible types: ´TKeyEvent´ and ´procedure, untyped pointer or untyped parameter´

-----------------------------------**-----------------------------------------------
vai o codogo abaixo...


---------TRAVA O WINDOWS NO ONCREATE DO FORMULARIO----------

procedure TPrincipal.FormCreate(Sender: TObject);
var
i:integer;
OldValue : LongBool;

begin
For i := 1 to 8000 do
begin
Splash.PB.Position := Splash.PB.Position + 1;
Splash.Update;
end;
{ se o alias não existir... }
if not Session.IsAlias(´Trava´) then
begin
{ Adiciona o alias }
Session.AddStandardAlias(´Trava´, ´C:\Arquivos de programas\Xst\Trava\Db´, ´PARADOX´);
{ Salva o arquivo de configuração do BDE }
Session.SaveConfigFile;
end;
Label_Data.Caption := FormatDateTime(´dddd, dd ´de´ mmmm ´de´ yyy´,Date);

{*************************************TRAVA********************************************}
keybd_event(VK_LWIN, 0, 0, 0); // ---------------------------
keybd_event(Ord(´M´), 0, 0, 0); // minimizar todas as
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0); // aplicações, mesnos a trava
//ShowWindow(Principal.Handle, SW_SHOWNORMAL); // ---------------------------
SystemParametersInfo(97, Word(True), @OldValue, 0); // desabilita o (CTRL+ALT+DEL),(Alt+Tab), (Ctrl+Esc)
ShowWindow(FindWindow(nil,´Program Manager´),SW_HIDE); //Esconder icones do desktop
ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_HIDE); // AutoOcultar a barra de tarefas
{**************************************************************************************}

end;







-----------BOTAO DESTRAVAR-------------------------
procedure TDestravar.Button1Click(Sender: TObject);
var
user,pass : String;
OldValue : LongBool;
Key:word;

begin

if Edit_Usu.Text = ´´ then
begin
MessageDlg(´Não foi especificado um usuário!´, mtError, [mbOK], 0);
Exit;
Edit_Usu.clear;
end;
try
Tbl_User.FindKey([Edit_Usu.Text,Edit_Pass.Text]);
except
on exception do
MessageDlg(´Usuário ou Senha especificada é inválida!´,mtError, [mbOK], 0);
end;
user := Tbl_User.FieldByName(´Usuario´).AsString;
Pass := Tbl_User.FieldByName(´Senha´).AsString;
//verifica usuario
if edit_usu.text = Tbl_User.FieldByName(´Usuario´).AsString then
begin
//verifica senha
if edit_Pass.text = Tbl_User.FieldByName(´Senha´).AsString then
begin

{*********************}
{*************************************DESTRAVA*****************************************}
ShowWindow(FindWindow(nil,´Program Manager´),SW_SHOW); // MOSTRA ICONES DO DESKTOP
ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_RESTORE); // RESTAURAR a barra de tarefas
SystemParametersInfo(97, Word(False), @OldValue, 0); // HABILITAR O (CTRL+ALT+DEL),(Alt+Tab), (Ctrl+Esc)
{**************************************************************************************}
Close;

// O CODIGO ABAIXO NAO FUNCIONA, QUE SERIA ONDE DESTRAVARIA O FORMULARIO
Principal.OnKeyDown := if GetStateK (VK_LMENU) And (Key = VK_F4) Then fecha:=true; // habilita o alt+f4
Principal.Close;

{*********************}

end
else begin
MessageDlg(´Senha especificada é inválida ou inexistente, por favor tente novamente!´,mtError, [mbOK], 0);
Edit_Usu.clear;
Edit_Pass.clear;
Edit_Usu.SetFocus;
end;
end
else begin
MessageDlg(´Usuário ou Senha especificada é inválida ou inexistente, por favor tente novamente!´,mtError, [mbOK], 0);
Edit_Usu.clear;
Edit_Pass.clear;
Edit_Usu.SetFocus;
exit;
end;


se alguem puder me ajudar... muito grato...


end;


Mahdak

Mahdak

Curtidas 0

Respostas

Mahdak

Mahdak

02/08/2004

- me esqueci de postar o codigo responsavel pelo travamento o Alt+f4 do Tform1(Tprincipal)...

codigo abaixo:



{FUNCAO RESPONSAVEL PELO BLOQUEIO DO ALT+F4 }
Function GetStateK (Key: integer): boolean;
begin
Result := Odd (GetKeyState (Key));
end;



procedure TPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
var
OldValue : LongBool;
begin
//If Not fecha Then // ---------------
//Action := caNone Else// ALT+F4
//Action := caFree; // ---------------

{*************************************DESTRAVA*****************************************}
ShowWindow(FindWindow(nil,´Program Manager´),SW_SHOW); // MOSTRA ICONES DO DESKTOP
ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_RESTORE); // RESTAURAR a barra de tarefas
SystemParametersInfo(97, Word(False), @OldValue, 0); // HABILITAR O (CTRL+ALT+DEL),(Alt+Tab), (Ctrl+Esc)
{**************************************************************************************}

end;

procedure TPrincipal.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If GetStateK (VK_LMENU) And (Key = VK_F4) Then // ALT+F4
fecha := False; // ALT+F4
end;


GOSTEI 0
Nildo

Nildo

02/08/2004

Troque aquela linha

Principal.OnKeyDown := if GetStateK (VK_LMENU) And (Key = VK_F4) Then fecha:=true; // habilita o alt+f4


por essa:

Principal.OnKeyDown := EventoKeyDown;


e declare esta procedure no seu Form

    procedure EventoKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);


e aqui é o código dela:

procedure TPrincipal.EventoKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if GetStateK (VK_LMENU) And (Key = VK_F4) Then 
      fecha:=true;
end;



GOSTEI 0
POSTAR