Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   llamar mi aplicacion con una combinacion de teclas (https://www.clubdelphi.com/foros/showthread.php?t=24699)

gulder 30-08-2005 23:14:29

llamar mi aplicacion con una combinacion de teclas
 
hola delphianos como anan mi pregunta es la siguiente mi aplicacion esta escondida en la sona del tray nada mas se ve el icono yo necesito que al precionar una combinacion de teclas o incluso una sola tecla mi aplicacion aparesca grasias por la atencion prestada

dec 31-08-2005 06:10:53

Hola,

En la Jedi library cuentas con un componente de nombre "JvApplicationHotKey", el cual hallarás en la pestaña "Jv Application, Forms" que podría irte bien. Empero, yo he probado el componente "HotKeyManager" y me ha ido muy bien con el mismo. Básicamente puedes añadir combinaciones de teclas (o, simplemente, teclas) y responder a un evento que se produce cuando son pulsadas: independientemente de si tu publicación está "activa", "en segundo plano", "minimizada", etc., etc. Entrambos componentes son de código abierto.

gulder 31-08-2005 17:47:44

grasias dec
 
listo voy a probar con lo que me recomendaron y despues les comento

Lepe 31-08-2005 22:50:48

Lo comentado por dec, es para las teclas rápidas pulsadas cuando tu aplicación tiene el foco, y quieres centralizar el proceso de qué hace cada tecla rápida al ser pulsada.

Al estar la aplicación escondida, hay que hacer un Hook a windows con esa tecla rápida, para ello se puede usar las funciones RegisterHotKey de la api de windows.

A partir de aquí, da igual en qué programa estes, al pulsar esa combinación, se enviará esa tecla a tu programa.

Para registrar las teclas puedes usar esto:
Código Delphi [-]
procedure TForm1.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;
Ahora, en nuestro programa tenemos que detectar cuando windows nos informa que se ha presionado F10 o F11:

Código Delphi [-]
TForm1 = class (Tform)
  protected
     procedure WndProc(var Msg: TMessage); override;
  end;


procedure TForm1.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: Form1.Show; // se pulsó la tecla F10
             1: Application.Terminate;// se pulsó la tecla F11
          end;

espero se entienda.

EDITO: No incluyo los uses porque son varios, simplemente haz clic sobre uno de ellos y pulsa F1, la ayuda de delphi te dirá los uses que necesites.

Un saludo

dec 01-09-2005 08:36:19

Hola,

Cita:

Empezado por Lepe
Lo comentado por dec, es para las teclas rápidas pulsadas cuando tu aplicación tiene el foco, y quieres centralizar el proceso de qué hace cada tecla rápida al ser pulsada.

No, Lepe, de veras que no: el componente que menciono en segundo lugar consigue precisamente lo que comentas, porque, de hecho, las combinaciones de teclas o teclas pueden ser "respondidas" independientemente de que la aplicación tenga o no el foco: he hecho algún programa con él y doy fe que funciona estupendamente.

En definitiva el componente "HotKeyManager" te permite añadir tantas combinaciones de teclas o teclas solas como te sean menester. Luego este cuenta con un evento "OnHotKey" en el cual puedes determinar qué tecla o teclas se pulsaron y obrar en consecuencia: insisto, independientemente de que la aplicación guarde o no el foco del usuario en ese punto.

gulder 01-09-2005 16:37:24

Cita:

Empezado por dec
Hola,



En definitiva el componente "HotKeyManager" te permite añadir tantas combinaciones de teclas o teclas solas como te sean menester. Luego este cuenta con un evento "OnHotKey" .

hola a todos mira dec disculpame la ignorancia pero ese componente no lo pude encontrar por ningun lado dime si tengo que instalarlo, bajarmelo de algun lado o delphi lo trae estoy utilizando delphi 7 grasias de antemano.

hola Lepe grasias voy a probar el codigo que dices att logula

dec 01-09-2005 19:47:58

Hola,

El enlace que te propuse (en el nombre del componente) te lleva a la página Delphi32.com desde donde puede descargarse. No aparece, sin embargo, la página del propio componente o la del autor del mismo.

Aquí te indico el enlace para descargarlo directamente. Por cierto, añadiendo algo a lo dicho. El componente que incluye la Jedi Library funciona muy bien (supongo que internamente hace algo similar a lo que Lepe refiere) pero tiene una diferencia respecto de "HotKeyManager".

El de la Jedi Library solo permite incluir una determinada combinación de teclas (siempre podrías añadir varios componentes, claro está), empero, "HotKeyManager" puede manejar más de una combinación de teclas al mismo tiempo y pueden añadirse y/o quitarse además en tiempo de ejecución.

Después de todo lo dicho cabe añadir tal vez algo: lo que propone Lepe acaso pudiera servirte perfectamente: de hecho los componentes mencionados deben hacer el trabajo de forma muy similar y, en caso de que te decidas a hacerlo así, te evitas el uso de componente alguno.

gulder 02-09-2005 18:26:00

grasias por indecarme
 
grasias dec ya me baje el componente de donde me digiste disculpenme por mi ignorancia lo voy a provar

gulder 02-09-2005 18:57:38

error en las funciones
 
hola lepe probe tu codigo y me aparecio el siguiente codigo en las siguientes funciones shortcuttokey, shortcuttotext las busque en la ayuda y estaban en ma yuscula la iniciales esa parte la corregi despues me pide que declare en la parte del uses lo siguiente ssCtrl lo ejecuto y me bota el siguiente error ssCtrl.dcu o ssCtrl.pas alguno de los dos no se que hacer de antemano grasias. :confused:

dec 02-09-2005 19:03:53

Hola,

En cuanto a las diferecias entre mayúsculas y minúsculas no tiene importancia, en el sentido de que no es estrictamente necesario que se escriban de una forma u otra. En cuanto a la función y el procedimiento en cuestión estos se hallan en la unidad "Menus.pas". "scCtrl" no es una unidad, es una constante que se declara en "Classes.pas".

gulder 02-09-2005 20:10:01

que me pasa estoy un poco brutus
 
si las mayusculas no importan pense que estaba en c++ de la de scCtrl la voy a probar

Lepe 02-09-2005 21:34:46

Cita:

Empezado por dec
Hola,


No, Lepe, de veras que no: el componente que menciono en segundo

Yo solo leí hasta el JvApplicationHotKey :D, lo siento.

He obviado decir qué es el Hotkey1, no está demás indicarlo: Hotkey1 es el componente que trae delphi en la paleta Win32 y que permite que el usuario final, decida la combinación de teclas que desea usar. El uso bien podría ser a través de un TactionList o Taction Manager, con los cuales, podemos asignar una tecla rápida (Shortcut) a cualquier botón o componente que tenga la propiedad Action.

Decidida la tecla rápida a usar, solo hay que asignarla en tiempo de ejecución al menú, o TAction que se desee, por tanto, se puede permitir que el usuario decida la tecla que desee y tambien, qué operación quiere que realice.


Un saludo

dec 02-09-2005 21:44:46

Hola,

Cita:

Empezado por Lepe
Yo solo leí hasta el JvApplicationHotKey :D, lo siento.

Bueno... el caso es que ese componente también consigue lo que el otro, salvo que no puede sino con una combinación de teclas, mientras que el otro puede con las que le echen. Pero de que lo sientas, nada de eso, hombre, pues no faltaba más que eso. ;)

gulder 05-09-2005 19:56:35

grasias dec y lepe
 
grasias dec por la ayuda si me sirvio el componente que me indicaste que me bajara sirve de maravilla jejeje y lepe tambin grasias por el codigo que subiste a al foro



logula


La franja horaria es GMT +2. Ahora son las 21:18:01.

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