Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ayuda con las hotkey en delphi (https://www.clubdelphi.com/foros/showthread.php?t=83085)

MCanuto 09-05-2013 18:11:33

ayuda con las hotkey en delphi
 
que código hay poner para que una hotkey pare un timer, por ejemplo. Hace falta la función Getasynckeystate?

ecfisa 09-05-2013 19:59:55

Hola MCanuto y bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Para tu caso creo que te puede servir capturar la tecla presionada en el evento OnKeyDown de tu form.
En el ejemplo el TTimer es activado por la tecla F1 y desactivado por F2, pero podes elegir las que desees (busca por Virtual key codes en la ayuda de Delphi).
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview := True;
  ...
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_F1: Timer1.Enabled := True;  
    VK_F2: Timer1.Enabled := False;
  end;
end;

Saludos. :)

MCanuto 09-05-2013 20:27:18

no veo ese evento no sé si será porque me baje un programa algo antiguo, tengo el Borland Delphi 7 no veo esa opción, que programa me recomendarías que tuviese todas las opciones?

ecfisa 09-05-2013 20:47:31

Cita:

Empezado por MCanuto (Mensaje 460144)
no veo ese evento no sé si será porque me baje un programa algo antiguo, tengo el Borland Delphi 7 no veo esa opción, que programa me recomendarías que tuviese todas las opciones?

Hola MCanuto.

En tiempo de diseño, hace lo siguiente:
  • Click sobre tu form (el form quedará como el objeto actualmente seleccionado).
  • Presiona la tecla F11 (tiene que aparecer el Object Inspector si estaba oculto).
  • En el Object Inspector, click en la pestaña Events.
  • Doble click sobre OnKeyDown.

Saludos. :)

MCanuto 10-05-2013 14:30:37

Gracias, el código me funciono pero solo se activa o desactiva el timer si tengo la ventana del proyecto abierta y pulso la tecla, si tengo otra ventana abierta y pulso la tecla de activar o desactivar no hace nada

¿No habría alguna forma de solucionar eso?

Un saludo.

ecfisa 10-05-2013 17:44:02

Hola MCanuto.

Revisa en estos enlaces:
Podes encontrar mas sobre la funcion aqui: RegisterHotKey.

Saludos. :)

FerJavRec 11-05-2013 02:33:32

Cita:

Empezado por MCanuto (Mensaje 460211)
Gracias, el código me funciono pero solo se activa o desactiva el timer si tengo la ventana del proyecto abierta y pulso la tecla, si tengo otra ventana abierta y pulso la tecla de activar o desactivar no hace nada

¿No habría alguna forma de solucionar eso?

Un saludo.

Hola MCanuto, fíjate que hay un componente que solo lo arrastras al Form y te hace todo lo que necesitas. CKeysOnForm si no lo encontras te lo subo.

saludos
FerJavRec

MCanuto 11-05-2013 19:13:23

Cita:

Empezado por FerJavRec (Mensaje 460279)
Hola MCanuto, fíjate que hay un componente que solo lo arrastras al Form y te hace todo lo que necesitas. CKeysOnForm si no lo encontras te lo subo.

saludos
FerJavRec

Hola FerJavRec no encuentro ese componente, pasamelo si no es molestia.

Un saludo.

MCanuto 12-05-2013 01:41:51

Saludos ecfisa.

Seguí el primer link que me dejaste y decía que había que instalar los componentes JEDI, yo al intentar instalarlos me da error, porque no tengo el rad studio ni ninguno de los que requiere el JEDI, tengo el Borland Delphi 7. Ahí decían que con JEDI se intala el componente HotKeyManager, pero ni rastro del RegisterHotKey que mencionabas.

ecfisa 12-05-2013 02:04:32

Hola MCanuto.

Cita:

Seguí el primer link que me dejaste y decía que había que instalar los componentes JEDI, yo al intentar instalarlos me da error, porque no tengo el rad studio ni ninguno de los que requiere el JEDI,
Según tengo entendido no tendrías que tener problemas para istalar los JEDI en Delphi 7. Pero fijate que en ese hilo hay dos opciones, ¿ Probaste lo que sugiere Lepe en el mensaje #4 ?

Cita:

Ahí decían que con JEDI se intala el componente HotKeyManager, pero ni rastro del RegisterHotKey que mencionabas.
RegisterHotKey es una función API windows.

En cuanto a el componente HotKeyManager que comenta dec no lo conozco, pero tal vez se refiera a este.

Saludos :)

MCanuto 12-05-2013 17:53:35

Hola ecfisa.

Problema resuelto, use este código:
Código:

unit Unit2;
 
interface
 
uses Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
  ExtCtrls;
 
type
 TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure HotKey(var Message: TMessage); message WM_HOTKEY;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer1Timer(Sender: TObject);
 end;
 
var Form1: TForm1;
 
implementation
 
{$r *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 RegisterHotKey(Handle, 111, 0, VK_F1);
 RegisterHotKey(Handle, 222, 0, VK_F2);
end;
 
procedure TForm1.HotKey(var Message: TMessage);
begin
  case Message.WParam of
    111: Timer1.Enabled := True;    // F1
    222: Timer1.Enabled := False;    // F2
  end;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnregisterHotKey(Handle, 111);
  UnregisterHotKey(Handle, 222);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Beep(1000, 100);
end;
 
end.

Mire más en la web que me dejaste de MSDN y mire la función RegisterHotKey más a fondo. Lo único que me dio problemas es la línea del timer:
Código:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Beep(1000, 100);
end;

Me salía el error: Too many parameters

Al final probé quitando esa línea y funcionó, no se si será importante.

Saludos.:)

ecfisa 12-05-2013 18:08:46

Hola MCanuto.

Me alegro que lo solucionaras, y muchas gracias por publicar como lo resolviste ^\||/

Saludos :)


La franja horaria es GMT +2. Ahora son las 13:42:34.

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