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

Moderador: Moderadores
/*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.
* 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
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
****************************************************************************
* 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
Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes