Principal.OnKeyDown. Erro!!!

Delphi

23/06/2004

pessoal, implementei uma rotina onde tenho que dar um comando de um formulario(Tdestravar), para o evento OnKeyDown do formulario(TPrincipal), fiz o código como está abaixo, só que o delphi me da um erro assim:

------------------------------ERRO---------------------------------
[Error] Unit_destravar.pas(89): Incompatible types: ´TKeyEvent´ and ´procedure, untyped pointer or untyped parameter´
---------------------------------------------------------------------

----------------------------CODIGO-------------------------------
public
{ Public declarations }
fecha: Boolean;

procedure TDestravar.Button1Click(Sender: TObject);
var
OldValue : LongBool;
Key:word;

begin
Principal.OnKeyDown := if GetStateK (VK_LMENU) And (Key = VK_F4) Then fecha:=true;
end;
end.
---------------------------------------------------------------------------

aguem poderia me ajudar com a solução????


Mahdak

Mahdak

Curtidas 0

Respostas

Beppe

Beppe

23/06/2004

Vc está atribuindo um statement à um evento. O Delphi não permite isso.

Coloque o [if GetKeyStateK(...] em um método(função na sua classe), e use este método como manipulador de evento OnKeyPress.


GOSTEI 0
Mahdak

Mahdak

23/06/2004

Caro colega, da uma olhadinha no codigo abaixo, acho que isso é o que vc quiz me passar, mas o problema é que quero anular essa função que é ativada no evento OnKeyDown do Formulario Tprincipal, entao tentei colocar aquele codigo no formulario Tdestravar, para que ele anulasse essa função, para que eu pudesse usar novamente o Alt+F4, só que o que aconteceu foi aquele erro acima descrito. se vc pudesse me ajudar com um exemplo, ficaria grato...
abraços!



{FUNCAO RESPONSAVEL PELO BLOQUEIO DO ALT+F4 }
Function GetStateK (Key: integer): boolean;
begin
Result := Odd (GetKeyState (Key));
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;


-----------------AQUI ESTA AQUELE ERRO!!!-----------------------------------

procedure TDestravar.Button1Click(Sender: TObject);
begin
Principal.OnKeyDown := if GetStateK (VK_LMENU) And (Key = VK_F4) Then fecha:=true; // habilita o alt+f4
end;


GOSTEI 0
Paulo_amorim

Paulo_amorim

23/06/2004

Olá

Você quer que o código do OnKeyDown seja esse que você escreveu né

Então crie uma procedure ´Teste´

procedure Form1.Teste(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if GetStateK (VK_LMENU) And (Key = VK_F4) Then fecha:=true; // habilita o alt+f4 
end;


Agora vá ao OnKeyDown do form e escolha essa procedure que vc criou...pronto!
Você também pode fazer em tempo de execução, p.ex. no OnActivate do form:
Self.OnKeyDown := Teste;


Espero que ajude
Até+


GOSTEI 0
POSTAR