Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como llamar el eventhandler keydown? (https://www.clubdelphi.com/foros/showthread.php?t=74589)

DarkBlue 28-06-2011 08:04:59

como llamar el eventhandler keydown?
 
Código Delphi [-]

procedure Tfcotizacion.Remplazar1Click(Sender: TObject);
var cap:string;
n:integer;
 t:tshiftstate;
begin
  n:=32;
  t := [ssCtrl];
 cap:= popupmenu1.Items.Items[0].Caption;
 stringgrid1.Cells[fcotizacion.col,row]:=cap;
 fcotizacion.OnKeyDown(sender,VK_CANCEL,//que se supone que va aqui?);





end;
gracias,esto me ha matado el sueño desde hace muuucho tiempo.

ecfisa 28-06-2011 13:22:23

Hola DarkBlue.

Para realizar lo que buscas te conviene simular que se ha presionado una tecla mediante la función keybd_event:
Código Delphi [-]
procedure Tfcotizacion.Remplazar1Click(Sender: TObject);
begin
   ...
   keybd_event(VK_CANCEL,0,0,0);
end;
Que ha sido reemplazada por la función SendInput , aunque sigue funcionando perfectamente.

Te pongo un ejemplo con esta última también:
Código Delphi [-]
procedure Tfcotizacion.Remplazar1Click(Sender: TObject);
var
  Inp: TInput;
begin
  ...
  Inp.Itype:= INPUT_KEYBOARD;
  Inp.ki.wVk:= VK_CANCEL;
  Inp.ki.dwFlags:= 0;
  SendInput(1, Inp, SizeOf(Inp));
end;

Saludos.

roman 28-06-2011 16:01:03

Cita:

Empezado por DarkBlue (Mensaje 404998)
gracias,esto me ha matado el sueño desde hace muuucho tiempo.

No debería quitarte el sueño. Es más, no deberias preocuparte por llamar a ese evento. En serio, los eventos no están pensados para que los llames tú sino para que los llame la VCL.

El manejador de un evento, como OnKeyDown, debería limitarse a poco más que llamar a una rutina que sea la encargada real de hacer el trabajo:

Código Delphi [-]
procedure TFCotizacion.OnKeyDown(...);
begin
  HazElTrabajo();
end;

Así, cuando necesites hacer el trabajo desde otro lado, simplemente llamas a la rutina HazElTrabajo, en lugar de andar viendo como llamar al evento.

// Saludos

DarkBlue 28-06-2011 18:50:21

ohh bueno no lo habia pensado de esa manera sus consejos son muy valiosos la proxima ves hare una rutina que haga el trabajo gracias ecfisa y roman son muy atentos.


La franja horaria es GMT +2. Ahora son las 06:33:05.

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