PDA

Ver la Versión Completa : ayuda con las hotkey en delphi


MCanuto
09-05-2013, 18:11:33
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 (http://www.clubdelphi.com/foros/guiaestilo.php).

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).

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
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:


llamar mi aplicacion con una combinacion de teclas (http://www.clubdelphi.com/foros/showthread.php?t=24699)
register a systemwide hotkey? (http://www.swissdelphicenter.ch/torry/showcode.php?id=147)

Podes encontrar mas sobre la funcion aqui: RegisterHotKey (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309%28v=vs.85%29.aspx).

Saludos. :)

FerJavRec
11-05-2013, 02:33:32
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
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.

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 (http://www.clubdelphi.com/foros/showpost.php?p=103791&postcount=4) ?

Ahí decían que con JEDI se intala el componente HotKeyManager, pero ni rastro del RegisterHotKey que mencionabas.
RegisterHotKey (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309%28v=vs.85%29.aspx) 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 (http://www.vclcomponents.com/Delphi/System_Components/HotKeyManager-info.html).

Saludos :)

MCanuto
12-05-2013, 17:53:35
Hola ecfisa.

Problema resuelto, use este 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:
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 :)