Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-08-2005
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
Lightbulb 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
Responder Con Cita
  #2  
Antiguo 31-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 31-08-2005 a las 08:57:41. Razón: (corrección del texto)
Responder Con Cita
  #3  
Antiguo 31-08-2005
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
grasias dec

listo voy a probar con lo que me recomendaron y despues les comento
Responder Con Cita
  #4  
Antiguo 31-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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

Última edición por Lepe fecha: 31-08-2005 a las 22:54:43.
Responder Con Cita
  #5  
Antiguo 01-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 01-09-2005
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
Thumbs up

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
Responder Con Cita
  #7  
Antiguo 01-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 01-09-2005 a las 19:57:59. Razón: (ampliación del texto)
Responder Con Cita
  #8  
Antiguo 02-09-2005
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
Thumbs up grasias por indecarme

grasias dec ya me baje el componente de donde me digiste disculpenme por mi ignorancia lo voy a provar
Responder Con Cita
  #9  
Antiguo 02-09-2005
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 02-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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".
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-09-2005 a las 19:06:53. Razón: (corrección del texto)
Responder Con Cita
  #11  
Antiguo 02-09-2005
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
Thumbs up 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
Responder Con Cita
  #12  
Antiguo 02-09-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por dec
Hola,


No, Lepe, de veras que no: el componente que menciono en segundo
Yo solo leí hasta el JvApplicationHotKey , 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
Responder Con Cita
  #13  
Antiguo 02-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Lepe
Yo solo leí hasta el JvApplicationHotKey , 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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #14  
Antiguo 05-09-2005
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 20
gulder Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:53:07.


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
Copyright 1996-2007 Club Delphi