Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   HotKeys Globales: RegisterHotKey (https://www.clubdelphi.com/foros/showthread.php?t=39528)

chico_bds 23-01-2007 10:08:35

HotKeys Globales: RegisterHotKey
 
HOla amigos necesito hacer una aplicacion que se encuentre en el TrayIcon y que al presionar digamos Ctrl+l se muestre el formulario, esto seria un ejemplo basico para despues guiarme.

He visto por aqui por los foros que hay que utilizar RegisterHotKeys o algo asi.

Por favor si alguien pudiera postear un ejemplo sencillo.

Desde ya muchas gracias

fdelamo 23-01-2007 10:45:07

Mira este hilo

http://www.clubdelphi.com/foros/showthread.php?t=24699

chico_bds 23-01-2007 19:47:41

Sobre la respuesta:
 
HOla:

Ya ese post lo habia visto pero me da un error osea este es mi codigo:

-----------------------------------------------------------------------------

Código Delphi [-]
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
  protected
     procedure WndProc(var Msg: TMessage); override;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

procedure TForm2.WndProc(var Msg: TMessage);

begin
  if msg.msg = wm_hotkey then
  begin
// esto es lo interesante, al registrar una combinación
// le damos un número entero, partiendo de cero y sumandole uno 
// si vamos a registrar varias teclas rápidas.
// Pues ese número  es el que llega en msg.WParam

     case msg.WParam of
       0: Form2.Show; // se pulsó la tecla F10
             1: Application.Terminate;// se pulsó la tecla F11
          end;

{$R *.dfm}

  end;
end;

procedure TForm2.DecodeHotKey(shortcut: Tshortcut; var key: Word; var modif: Integer);
var
  comb:     String;
   shiftkey: TshiftState;
begin
  modif := 0;
  shortcuttokey(shortcut, key, shiftkey);
  comb := shortcuttotext(shortcut);
  if pos('Shift', comb) <> 0 then
     inc(modif, 4);
  if pos('Ctrl', comb) <> 0 then
     inc(modif, 2);
  if pos('Alt', comb) <> 0 then
     inc(modif, 1);
end;

procedure FormCreate;
var teclappal :word;
 modificadores:integer;

begin
// suponemos que en Hotkey1.Hotkey es la tecla F10
    decodehotkey(hotkey1.hotkey, teclappal, modificadores);
    registerhotkey(self.Handle, 0, modificadores, teclappal);
// EL PARAMETRO CON UN CERO, NOS SIRVE PARA IDENTIFICAR ESTE HOTKEY


// suponemos que en Hotkey2.Hotkey es la tecla F11
    decodehotkey(hotkey2.hotkey, teclappal, modificadores);
    registerhotkey(self.Handle, 1, modificadores, teclappal);
// EL PARAMETRO CON UN UNO, NOS SIRVE PARA IDENTIFICAR ESTE HOTKEY
end;

procedure FormClose;
begin
  unregisterhotkey(self.Handle, 0);
  unregisterhotkey(self.Handle, 1);
end;

end.

Mi pregunta es me falta un libreria o un componente?

Si pudieran conlgarme un ejemplo sencillo se los agradeceria mucho, ya que no puedo hacer busquedas en internet, porque solo tengo acceso a este forum y al email.

Saludos y desde ya muchas gracias

roman 23-01-2007 20:36:06

Cita:

Empezado por chico_bds
Mi pregunta es me falta un libreria o un componente?

Pues quizá falte incluir alguna unidad, pero si no nos dices cuál error te marca, es difícil determinar.

// Saludos

chico_bds 24-01-2007 00:54:05

Sobre el error
 
Código Delphi [-]
procedure TForm2.DecodeHotKey(shortcut: Tshortcut; var key: Word; var modif: Integer);
var
  comb:     String;
   shiftkey: TshiftState;
begin
  modif := 0;
  shortcuttokey(shortcut, key, shiftkey);
  comb := shortcuttotext(shortcut);
  if pos('Shift', comb) <> 0 then
     inc(modif, 4);
  if pos('Ctrl', comb) <> 0 then
     inc(modif, 2);
  if pos('Alt', comb) <> 0 then
     inc(modif, 1);
end;

procedure FormCreate;
var teclappal :word;
 modificadores:integer;

begin
// suponemos que en Hotkey1.Hotkey es la tecla F10
    decodehotkey(hotkey1.hotkey, teclappal, modificadores);
    registerhotkey(self.Handle, 0, modificadores, teclappal);
// EL PARAMETRO CON UN CERO, NOS SIRVE PARA IDENTIFICAR ESTE HOTKEY


// suponemos que en Hotkey2.Hotkey es la tecla F11
    decodehotkey(hotkey2.hotkey, teclappal, modificadores);
    registerhotkey(self.Handle, 1, modificadores, teclappal);
// EL PARAMETRO CON UN UNO, NOS SIRVE PARA IDENTIFICAR ESTE HOTKEY
end;

El error me lo da ahy me dice algo como:

Undeclared Indentifiquer: DecodeHootKey
Undeclared Indentifiquer:shortcuttokey

etc.

Si pudieran postear un ejemplo sencillo..

Saludos y desde ya mucha gracias

roman 24-01-2007 05:41:41

A juzgar por el código que pusiste al principio, te falta poner la declaración de DecodeHotKey en la cabecera del formulario:

Código Delphi [-]
type
  TForm2 = class(TForm)
  public
    procedure DecodeHotKeyshortcut: Tshortcut; var key: Word; var modif: Integer);
  end;

Por otra parte, la funcion ShortcutToKey está en la unidad Menus, así que supongo que te falta ponerla en la cláusula uses.

// Saludos

chico_bds 24-01-2007 07:31:32

uhhh sigue el error
 
Hola roman muchas gracias por dedicar tu tiempo a mi duda pero lamento decirte que todavia no me sale lo que quiero...

roman te agradeceria mucho si pudieras ponerme un pequeño ejemplo es que lo necesito urgente.

Saludos para ti y para los foreros

Lepe 24-01-2007 17:05:05

Que estuviera dentro de etiquetas delphi, no significa que compile y funcione al 100 %, primero hay que mirar algunas cosas, por ejemplo FormClose no pertenece a ninguna clase, así que jamás se ejecutará.


Lo siento por tu apuro, pero en un foro no hay "urgencias", en un servicio técnico a lo mejor.

FormClose y FormCreate no forman parte del formulario, así que jamás se ejecutará, no puedes copiar y pegar el código y listo.

En tu ventana, en el inspector de objetos, busca el evento FormClose doble clic y ahora si, copia el código de mi evento FormClose, dentro del que acabas de crear.

Lo mismo para FormCreate, pero obviamente usando el evento OnCreate de tu Form.

Después borra los procedimientos originales, es decir, los posteados en este mensaje para que no te confundas.

Todavía no se puede compilar, aunque si lo puedes guardar :p.

Ahora situa el cursor sobre la palabra TShortCut (da igual si está en mayúsculas o minúsculas y pulsa F1, debe salirte el "uses" que debes añadir para que pueda compilar.

Lo mismo para todo aquello que te de errores.

PD: Es mejor explicarte como solucionarlo que darte el código... de esa forma no aprendes, de esta sí ;).


Saludos.


La franja horaria es GMT +2. Ahora son las 00:44:12.

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