"ON KEY" para todo sistema
Moderador: Moderadores
-
casesistemas
- Usuário Nível 1

- Mensagens: 32
- Registrado em: 04 Ago 2004 16:50
- Localização: Campinas/SP
- Contato:
"ON KEY" para todo sistema
Boa Tarde
Estou tentando declarar ON KEY ... no Formulario Principal, porem o proximo formulario nao reconhece esat tecla.
ex: tenho uma calculadora declarada como F10 e gostaria de chama-la em todo sistema
Joao Carlos
CASE Sistemas
Estou tentando declarar ON KEY ... no Formulario Principal, porem o proximo formulario nao reconhece esat tecla.
ex: tenho uma calculadora declarada como F10 e gostaria de chama-la em todo sistema
Joao Carlos
CASE Sistemas
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
"ON KEY" para todo sistema
Olá!
Talvez este código possa te dar alguma ideia. Encontra-se em C:\HMG.3.0.35\SAMPLES\ON.KEY.1\demo.prg, em uma instalação padrão da HMG 3.0.35.
Talvez este código possa te dar alguma ideia.
Código: Selecionar todos
/*
* HMG ON KEY Demo
*/
/*
Available Keys
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12
BACK
TAB
RETURN
ESCAPE
END
HOME
LEFT
UP
RIGHT
DOWN
INSERT
DELETE
PRIOR
NEXT
ALT+A
ALT+B
ALT+C
ALT+D
ALT+E
ALT+F
ALT+G
ALT+H
ALT+I
ALT+J
ALT+K
ALT+L
ALT+M
ALT+N
ALT+O
ALT+P
ALT+Q
ALT+R
ALT+S
ALT+T
ALT+U
ALT+V
ALT+W
ALT+X
ALT+Y
ALT+Z
ALT+0
ALT+1
ALT+2
ALT+3
ALT+4
ALT+5
ALT+6
ALT+7
ALT+8
ALT+9
ALT+F1
ALT+F2
ALT+F3
ALT+F4
ALT+F5
ALT+F6
ALT+F7
ALT+F8
ALT+F9
ALT+F10
ALT+F11
ALT+F12
ALT+BACK
ALT+TAB
ALT+RETURN
ALT+ESCAPE
ALT+END
ALT+HOME
ALT+LEFT
ALT+UP
ALT+RIGHT
ALT+DOWN
ALT+INSERT
ALT+DELETE
ALT+PRIOR
ALT+NEXT
SHIFT+A
SHIFT+B
SHIFT+C
SHIFT+D
SHIFT+E
SHIFT+F
SHIFT+G
SHIFT+H
SHIFT+I
SHIFT+J
SHIFT+K
SHIFT+L
SHIFT+M
SHIFT+N
SHIFT+O
SHIFT+P
SHIFT+Q
SHIFT+R
SHIFT+S
SHIFT+T
SHIFT+U
SHIFT+V
SHIFT+W
SHIFT+X
SHIFT+Y
SHIFT+Z
SHIFT+0
SHIFT+1
SHIFT+2
SHIFT+3
SHIFT+4
SHIFT+5
SHIFT+6
SHIFT+7
SHIFT+8
SHIFT+9
SHIFT+F1
SHIFT+F2
SHIFT+F3
SHIFT+F4
SHIFT+F5
SHIFT+F6
SHIFT+F7
SHIFT+F8
SHIFT+F9
SHIFT+F10
SHIFT+F11
SHIFT+F12
SHIFT+BACK
SHIFT+TAB
SHIFT+RETURN
SHIFT+ESCAPE
SHIFT+END
SHIFT+HOME
SHIFT+LEFT
SHIFT+UP
SHIFT+RIGHT
SHIFT+DOWN
SHIFT+INSERT
SHIFT+DELETE
SHIFT+PRIOR
SHIFT+NEXT
CONTROL+A
CONTROL+B
CONTROL+C
CONTROL+D
CONTROL+E
CONTROL+F
CONTROL+G
CONTROL+H
CONTROL+I
CONTROL+J
CONTROL+K
CONTROL+L
CONTROL+M
CONTROL+N
CONTROL+O
CONTROL+P
CONTROL+Q
CONTROL+R
CONTROL+S
CONTROL+T
CONTROL+U
CONTROL+V
CONTROL+W
CONTROL+X
CONTROL+Y
CONTROL+Z
CONTROL+0
CONTROL+1
CONTROL+2
CONTROL+3
CONTROL+4
CONTROL+5
CONTROL+6
CONTROL+7
CONTROL+8
CONTROL+9
CONTROL+F1
CONTROL+F2
CONTROL+F3
CONTROL+F4
CONTROL+F5
CONTROL+F6
CONTROL+F7
CONTROL+F8
CONTROL+F9
CONTROL+F10
CONTROL+F11
CONTROL+F12
CONTROL+BACK
CONTROL+TAB
CONTROL+RETURN
CONTROL+ESCAPE
CONTROL+END
CONTROL+HOME
CONTROL+LEFT
CONTROL+UP
CONTROL+RIGHT
CONTROL+DOWN
CONTROL+INSERT
CONTROL+DELETE
CONTROL+PRIOR
CONTROL+NEXT
*/
#include "hmg.ch"
Function Main
Local bBlock
DEFINE WINDOW Win_1 ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 400 ;
TITLE 'Hello World!' ;
MAIN
ON KEY SHIFT+A ACTION MsgInfo ('Shift+A')
ON KEY TAB ACTION MsgInfo ('TAB')
ON KEY RETURN ACTION MsgInfo ('RETURN')
ON KEY CONTROL+END ACTION MsgInfo ('CONTROL+END')
ON KEY ESCAPE ACTION MsgInfo ('ESCAPE')
ON KEY ALT+C ACTION MsgInfo ('ALT+C')
DEFINE BUTTON Button_1
ROW 10
COL 10
CAPTION 'Activate F2'
ACTION EnableF2()
END BUTTON
DEFINE BUTTON Button_2
ROW 40
COL 10
CAPTION 'Release F2'
ACTION DisableF2()
END BUTTON
DEFINE BUTTON Button_3
ROW 70
COL 10
CAPTION 'Store Key Test'
ACTION StoreTest()
END BUTTON
END WINDOW
ACTIVATE WINDOW Win_1
Return
Procedure EnableF2()
ON KEY F2 OF Win_1 ACTION MsgInfo ('F2')
Return
Procedure DisableF2()
RELEASE KEY F2 OF Win_1
Return
Procedure StoreTest()
Local bBlock
STORE KEY RETURN OF Win_1 TO bBlock
RELEASE KEY RETURN OF Win_1
ON KEY RETURN OF Win_1 ACTION Eval ( bBlock )
Return[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
Claudio Soto
- Colaborador

- Mensagens: 566
- Registrado em: 27 Ago 2012 12:31
- Localização: Uruguay
- Contato:
"ON KEY" para todo sistema
Hola Joao Carlos,casesistemas escreveu:Boa Tarde
Estou tentando declarar ON KEY ... no Formulario Principal, porem o proximo formulario nao reconhece esat tecla.
ex: tenho uma calculadora declarada como F10 e gostaria de chama-la em todo sistema
Joao Carlos
CASE Sistemas
la única forma es hacer un hook de teclado.
Fíjate en estos links:
http://www.hmgforum.com/viewtopic.php?p=31154#p31154
http://www.hmgforum.com/viewtopic.php?f=15&t=1331
Saludos,
Claudio.
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
"ON KEY" para todo sistema
Amigos, na MiniGui Extended tem o comando SET GLOBALHOTKEYS ON, mas pelo que notei este comando é só usado para programas que vão ficar em execução no System Tray (na barra do Windows, do lado do relógio), pois mesmo estando em um outro programa aberto, a Hotkey vai funcionar. Por exemplo, se você abrir o seu programa e minimizar ele e abrir também o Word, a tecla Hotkey vai funcionar dentro do Word ou qualquer outro programa que esteja sendo executado.
Eu testei apenas os exemplos que estão na pasta \SAMPLES, que usam este comando SET GLOBALHOTKEYS ON, e todos eles são executados no System Tray, então não sei qual será o efeito em um programa que abre em uma janela normal.
Abraços,
Eu testei apenas os exemplos que estão na pasta \SAMPLES, que usam este comando SET GLOBALHOTKEYS ON, e todos eles são executados no System Tray, então não sei qual será o efeito em um programa que abre em uma janela normal.
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
"ON KEY" para todo sistema
Olá!
MiniGui não é minha praia mas, fico pensando se não seria possível fazer o seguinte, usando SET GLOBALHOTKEYS ON:
- ativar as teclas desejadas no início do programa, ao carregar a janela principal;
- desativar as teclas ao minimizar a janela principal;
- ativar as teclas ao maximizar a janela principal;
- desativar as teclas ao fechar a janela principal;
MiniGui não é minha praia mas, fico pensando se não seria possível fazer o seguinte, usando SET GLOBALHOTKEYS ON:
- ativar as teclas desejadas no início do programa, ao carregar a janela principal;
- desativar as teclas ao minimizar a janela principal;
- ativar as teclas ao maximizar a janela principal;
- desativar as teclas ao fechar a janela principal;
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
"ON KEY" para todo sistema
Boa ideia Alexandre ! Acho que é muito bem que seja possível implementar isso nos eventos:
ON MAXIMIZE
ON MINIMIZE
ON RELEASE
You are great !
ON MAXIMIZE
ON MINIMIZE
ON RELEASE
You are great !
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
Claudio Soto
- Colaborador

- Mensagens: 566
- Registrado em: 27 Ago 2012 12:31
- Localização: Uruguay
- Contato:
"ON KEY" para todo sistema
Esto es una simplificación del ejemplo que esta en C:\MiniGUI\SAMPLES\Advanced\ReadKey
Espero que les sirva de ayuda.
Saludos,
Claudio.
Espero que les sirva de ayuda.
Saludos,
Claudio.
Código: Selecionar todos
****************************************************************************
* PROGRAMA: READ THE KEYBOARD
* LENGUAJE: HARBOUR-MINIGUI
* FECHA: 13 ABRIL 2010
* AUTOR: CLAUDIO SOTO
* PAIS: URUGUAY
* E-MAIL: srvet@adinet.com.uy
****************************************************************************
***************************************************************************************************
* DESCRIPCION
*
* Lee las entradas entradas del teclado y devuelve informacion sobre la tecla presionada.
* Estas funciones interceptan los mensajes de teclado que el sistema le envia a la aplicacion
* (WM_KEYUP y WM_KEYDOWN) y almacena informacion sobre la tecla virtual generada.
*
***************************************************************************************************
* SINTAXIS:
*
* INSTALL_READ_KEYBOARD () // Instala el manejador que lee el teclado (Retorna .T. si tiene exito)
* UNINSTALL_READ_KEYBOARD () // Desinstala el manejador que lee el teclado (Retorna .T. si tiene exito)
*
* GET_LAST_VK() // Retorna el valor virtual (VK Code) de la tecla presionada
* GET_LAST_VK_NAME() // Retorna el nombre de la tecla virtual presionado
*
* GET_STATE_VK_SHIFT () // Retorna .T. si la tecla SHIFT esta presionada
* GET_STATE_VK_CONTROL () // Retorna .T. si la tecla CONTROL esta presionada
* GET_STATE_VK_ALT () // Retorna .T. si la tecla ALT esta presionada
*
* PAUSE_READ_VK (.T.) // Pausa la lectura del teclado para poder procesar la tecla presionada
* PAUSE_READ_VK (.F.) // Restablece la lectura del teclado luego de la pausa
*
***************************************************************************************************
#include "minigui.ch"
Procedure Main
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 600 ;
TITLE 'Form_1' ;
MAIN ;
ON INIT On_Init();
ON RELEASE On_Release()
@ 380 , 10 LABEL Label_10 VALUE "Presionar SHIFT + A abre Caja Dialogo" AUTOSIZE BOLD
@ 450 , 10 EDITBOX EditBox_1 WIDTH 200 HEIGHT 100 VALUE "Escribir algo"
END WINDOW
DEFINE WINDOW Form_2 ;
AT 0,0 ;
WIDTH 300 ;
HEIGHT 200 ;
TITLE 'Form_2' ;
CHILD
@ 10 , 10 EDITBOX EditBox_1 WIDTH 200 HEIGHT 100 VALUE "Escribir algo"
END WINDOW
Form_1.Center
ACTIVATE WINDOW Form_1, Form_2
Return
Procedure On_Init
IF INSTALL_READ_KEYBOARD() == .F.
MsgInfo ("ERROR al instalar READ_KEYBOARD")
ELSE
DEFINE TIMER timer_1 OF Form_1 INTERVAL 100 ACTION Procesar_Tecla()
ENDIF
Return
Procedure On_Release
IF UNINSTALL_READ_KEYBOARD() == .F.
MsgInfo ("ERROR al desinstalar READ_KEYBOARD")
ENDIF
Return
Procedure Procesar_Tecla
Static Flag := .F.
IF Flag == .T.
Return // impide la reentrada
Endif
Flag := .T.
IF GET_LAST_VK() == 65 .AND. GET_STATE_VK_SHIFT() == .T. // VK code de A = 65
PAUSE_READ_VK (.T.) // pausa la lectura del teclado
Msginfo ("Procesar la accion de la tecla SHIFT + A")
PAUSE_READ_VK (.F.) // restablece la lectura del teclado
ENDIF
Flag := .F.
Return
*##################################################################################################
* FUNCIONES EN C
*##################################################################################################
#pragma begindump
#include <windows.h>
#include "hbapi.h"
HB_BOOL flag_hhk = FALSE;
HB_BOOL PAUSE_hhk = FALSE;
HHOOK hhk = NULL;
HB_LONG VK_PRESIONADO = 0;
HB_LONG VK_lParam = 0;
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(hhk, nCode, wParam, lParam);
if (PAUSE_hhk == FALSE)
{ VK_PRESIONADO = (long) wParam;
VK_lParam = (LONG) lParam;
}
else
{ VK_PRESIONADO = 0;
VK_lParam = 0;
}
return CallNextHookEx(hhk, nCode, wParam, lParam);
}
HB_FUNC (GET_STATE_VK_SHIFT)
{
if (GetKeyState(VK_SHIFT) & 0x8000)
hb_retl (TRUE);
else
hb_retl (FALSE);
}
HB_FUNC (GET_STATE_VK_CONTROL)
{
if (GetKeyState(VK_CONTROL) & 0x8000)
hb_retl (TRUE);
else
hb_retl (FALSE);
}
HB_FUNC (GET_STATE_VK_ALT)
{
if (GetKeyState(VK_MENU) & 0x8000)
hb_retl (TRUE);
else
hb_retl (FALSE);
}
HB_FUNC (GET_LAST_VK)
{
if (flag_hhk == TRUE)
hb_retnl (VK_PRESIONADO);
else
hb_retnl (0);
}
HB_FUNC (GET_LAST_VK_NAME)
{
CHAR cadena [128];
if (flag_hhk == TRUE)
{ GetKeyNameText (VK_lParam, (LPTSTR) &cadena, 128);
hb_retc (cadena);
}
else
hb_retc ("");
}
HB_FUNC (PAUSE_READ_VK)
{
if (hb_pcount () == 1 && hb_parinfo (1) == HB_IT_LOGICAL)
{ if (hb_parl (1) == TRUE)
{ VK_PRESIONADO = 0;
VK_lParam = 0;
}
PAUSE_hhk = hb_parl (1);
}
}
HB_FUNC (INSTALL_READ_KEYBOARD)
{
if (flag_hhk == FALSE)
{ hhk = SetWindowsHookEx (WH_KEYBOARD, KeyboardProc, (HINSTANCE) NULL, GetCurrentThreadId());
if (hhk == NULL)
hb_retl (FALSE);
else
{ flag_hhk = TRUE;
hb_retl (TRUE);
}
}
else
hb_retl (TRUE);
}
HB_FUNC (UNINSTALL_READ_KEYBOARD)
{
if (flag_hhk == TRUE)
{ if (UnhookWindowsHookEx (hhk) == TRUE)
{ flag_hhk = FALSE;
hb_retl (TRUE);
}
else
hb_retl (FALSE);
}
else
hb_retl (TRUE);
}
#pragma enddump
-
casesistemas
- Usuário Nível 1

- Mensagens: 32
- Registrado em: 04 Ago 2004 16:50
- Localização: Campinas/SP
- Contato:
"ON KEY" para todo sistema
Boa Noite
Que coisa heim ? Isto é simples de fazer em Clipper.
Vou testar e tentar encaixar a dica do Claudio.
Agradeço pelas respostas
Att
João Carlos
CASE Sistemas
Que coisa heim ? Isto é simples de fazer em Clipper.
Vou testar e tentar encaixar a dica do Claudio.
Agradeço pelas respostas
Att
João Carlos
CASE Sistemas