Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Agregar Evento a una Clase (https://www.clubdelphi.com/foros/showthread.php?t=73247)

FENIXadr 11-04-2011 02:40:16

Agregar Evento a una Clase
 
Hola gente... estoy buscando por el foro y por otras partes y no encuentro lo que necesito...
Tengo un TPanel y quiero agregarle los eventos del teclado (OnKeyDown, OnKeyPress, OnKeyUp), supongo que los tiene pero no publicados.. alguien me pude decir como lo hago...

desde ya muchas gracias..

ecfisa 11-04-2011 04:17:06

Hola FENIXadr.

Tenes que desprotejer la clase TPanel, luego escribir y asignar los eventos:

Ejemplo:
Código Delphi [-]
type
  TPanel = class(ExtCtrls.TPanel);
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure FormShow(Sender: TObject);
  private
    procedure Panel1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Panel1KeyPress(Sender: TObject; var Key: Char);
    procedure Panel1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
  public
 end;
...
interface
procedure TForm1.Panel1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  ShowMessage('Panel1 OnKeyDown');
end;

procedure TForm1.Panel1KeyPress(Sender: TObject; var Key: Char);
begin
  ShowMessage('Panel1 OnKeyPress');
end;

procedure TForm1.Panel1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  ShowMessage('Panel1 OnKeyUp');
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Panel1.OnKeyDown:= Panel1KeyDown;
  Panel1.OnKeyPress:= Panel1KeyPress;
  Panel1.OnKeyUp:= Panel1KeyUp;
end;
...

Un saludo.

FENIXadr 11-04-2011 04:41:20

Huuuyyyy.. bueniiiisimoo.. casi que anduvo.. te comento el problemita que tiene... yo necesito usar las téclas del cursor y para éstas teclas toma solo el evento OnKeyUp.. para las demás toma lo otros dos eventos .. pero no OnKeyUp.. que puede ser??.. raro no?

ecfisa 11-04-2011 12:34:38

Hola.

No sé, realmente no se me había ocurrido experimentar con esas teclas en un TPanel...
Probá si de este modo le das solución:
Código Delphi [-]
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    ...
  private
    procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
  public
  end;
...

implementation

procedure TForm1.CMDialogKey(var Message: TCMDialogKey);
begin
  if Panel1.Focused then  
  begin
    case Message.CharCode of
      VK_LEFT  : ShowMessage('VK_LEFT');
      VK_RIGHT : ShowMessage('VK_RIGHT');
      VK_UP    : ShowMessage('VK_UP');
      VK_DOWN  : ShowMessage('VK_DOWN');
      VK_TAB   : Perform(WM_NEXTDLGCTL, 1, 0);  (* para abandonar el foco *)
    end;
    Message.CharCode:= 0; (* no pierde el foco con: VK_UP,... *)
  end;
   ...
   inherited;
end;
...

Un saludo.

FENIXadr 11-04-2011 18:42:31

haaaa bueee... genialllllllllll.. de donde sacaste esta info???.. bueniiiiisimooo.. anda joya.. muchisisisisimas gracias..

ecfisa 11-04-2011 21:07:50

Hola.

Me alegra muchisimo que te haya servido.

La idea se me cruzó por que varios controles entre los que está TPanel, no pueden recibir el foco desde teclado.
Pero lo que la encauzó fue un código que habia leido (y usado) de Zarko Gajic para detectar la tecla TAB en un TEdit:
Código Delphi [-]
procedure CMDialogKey(Var Msg: TWMKey) ;message CM_DIALOGKEY;

implementation

procedure TForma.CMDialogKey(Var Msg: TWMKEY) ;
begin
  if (ActiveControl is TEdit) and (Msg.Charcode = VK_TAB) then
   ShowMessage('TAB key pressed?') ;
  inherited;
end;

Así que la info y los laureles son de Zarko... :)

Un saludo.

FENIXadr 12-04-2011 01:49:21

Al amigo Zarko Gajic habría que localizarlo y hacerle unas cuantas preguntitas jeje...

bueno muchisimas gracias (again) y este hilo se puede dar por finalizado..

Saludos.-.


La franja horaria es GMT +2. Ahora son las 05:15:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi