Форум » [x]Harbour » Как отловить ON KEY глобально по всей программе ? » Ответить

Как отловить ON KEY глобально по всей программе ?

Softlog86: Подскажите команду чтоб отлавливать ON KEY по всей программе . Нужно чтоб отрабатывалось нажатие независимо от того в каком окне сейчас фокус ...

Ответов - 4

Dima: Про Set key речь или я что то не понял ?

gfilatov2002: Softlog86 пишет: Нужно чтоб отрабатывалось нажатие независимо от того в каком окне сейчас фокус Команду SET GLOBAL HOTKEYS ON пробовал Кстати, она есть в примерах из поставки Минигуи Дополнение. См. рабочий пример ниже [pre]/* * Harbour MiniGUI Demo */ #include "minigui.ch" #define WM_HOTKEY 786 STATIC bHotKey, cForm Function Main SET GLOBAL HOTKEYS ON SET EVENTS FUNCTION TO MYEVENTS DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 400 ; TITLE 'Hello World!' ; MAIN ; ON GOTFOCUS cForm := This.Name @ 010,005 BUTTONEX BTNOK ; CAPTION "Click" ; ACTION m1() ; WIDTH 100 HEIGHT 30 bHotKey := {|| MsgInfo( cForm ) } ** ** ON KEY ALT+1 ACTION bHotKey ** ** END WINDOW ACTIVATE WINDOW Win_1 Return Nil ** ** ** FUNCTION m1() DEFINE WINDOW Win_2 ; AT 50,50 ; WIDTH 400 ; HEIGHT 400 ; TITLE " Win_2 " ; MODAL ; ON GOTFOCUS cForm := This.Name SetDummyKey() @ 010,005 BUTTONEX BTNOK ; CAPTION "Click" ; ACTION m2() ; WIDTH 100 HEIGHT 30 END WINDOW *** Ativa janela ACTIVATE WINDOW Win_2 ** ** ** FUNCTION m2() DEFINE WINDOW Win_3 ; AT 100,100 ; WIDTH 400 ; HEIGHT 400 ; TITLE " Win_3 " ; MODAL ; ON GOTFOCUS cForm := This.Name SetDummyKey() @ 010,005 BUTTONEX BTNOK ; CAPTION "Click" ; ACTION Win_3.RELEASE ; WIDTH 100 HEIGHT 30 END WINDOW *** Ativa janela ACTIVATE WINDOW Win_3 FUNCTION SetDummyKey() ON KEY ALT+1 ACTION _dummy() *--------------------------------------------------------* FUNCTION MyEvents ( hWnd, nMsg, wParam, lParam ) *--------------------------------------------------------* LOCAL result := 0 SWITCH nMsg CASE WM_HOTKEY * Process HotKeys i := ASCAN( _HMG_aControlIds, wParam ) IF i > 0 IF _HMG_aControlType[ i ] == 'HOTKEY' Eval( bHotKey ) ENDIF ENDIF EXIT #ifdef __XHARBOUR__ DEFAULT #else OTHERWISE #endif result := Events( hWnd, nMsg, wParam, lParam ) END RETURN result[/pre]

Softlog86: Спасибо за наводку ! Но тут есть проблема . Как только ставлю SET GLOBAL HOTKEYS ON - программа забирает на себя все HOTKEYS . Другие приложения (в фокусе) не реагируют на нажатия .... Независимо от того в фокусе моя Harbour программа или нет ....


gfilatov2002: Softlog86 пишет: Как только ставлю SET GLOBAL HOTKEYS ON - программа забирает на себя все HOTKEYS Все правильно - на то и команда GLOBAL HOTKEYS. Но можно обойтись и без этой команды Попробуйте приведенный выше пример без нее - все работает



полная версия страницы