Fórum Principal.OnKeyDown. Erro!!! #239336

23/06/2004

0

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

Responder

Posts

24/06/2004

Beppe

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.


Responder

Gostei + 0

24/06/2004

Mahdak

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;


Responder

Gostei + 0

24/06/2004

Paulo_amorim

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é+


Responder

Gostei + 0

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

Aceitar