NumPadEnter
|
|
symargl | Дата: Воскресенье, 05.07.2015, 09:01 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 27
Статус: Offline
| Как правый энтер отличить от основного? Как-то ведь можно, если очень хочется. В интернете есть один - и совершенно мне непонятный в принципе - пример для Delphi. А что надо сделать в нашем любимом FB ?
|
|
| |
haav | Дата: Воскресенье, 05.07.2015, 12:16 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| На винде без проблем. В событии WM_KEYDOWN проверить 24 бит параметра LPARAM:
Код #Include "windows.bi"
Dim Shared As Integer oldProc
Function newProc(hwnd As HWND, msg As UINT, wparam As LPARAM, lparam As WPARAM) As Integer If msg = WM_KEYDOWN Then if Bit(CInt(lparam),24) Then ? "Right ENTER" Else ? "Left ENTER" EndIf EndIf Return CallWindowProc(Cast(wndproc,oldProc),hwnd,msg,wparam,lparam) End Function
Screen 11
Dim as Integer hw
ScreenControl(2,hw)
oldProc = SetWindowLong(Cast(hwnd,hw),GWL_WNDPROC,CInt(@newProc)) Do Sleep(1) Loop Until MultiKey(1)
Как сделать на других системах не в курсе.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
symargl | Дата: Воскресенье, 05.07.2015, 14:05 | Сообщение # 3 |
Сержант
Группа: Пользователи
Сообщений: 27
Статус: Offline
| Работает!!! Однако торможу, а как такое не на «чистом API», а на window9 осуществить?
|
|
| |
haav | Дата: Воскресенье, 05.07.2015, 14:37 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Я не знаю , что ты в конце концов хочешь. С пустым окном (например окно и прямо на нем рисуешь) будет работать такой код:
Код #Include "window9.bi" Dim As Integer event Dim as HWND hwnd hwnd=OpenWindow("",10,10,500,500) : CenterWindow(hwnd) Do event=WaitEvent() Select Case event Case EventKeyDown If EventKEY=&hd Then If Bit(CInt(EventLParam),24) Then ? "Right ENTER" Else ? "Left ENTER" EndIf EndIf End Select If Event=EventClose Then End Loop
А если у окна будут гаджеты, то они (при клике по ним) будут отбирать себе фокус и тогда уже надо в оконной процедуре нужных гаджетов ловить WM_KEYDOWN. Может тебе нужно отлавливать ENTER глобально, тогда наверно лучше хук ставить (я не пробовал, но думаю там должно работать).
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
symargl | Дата: Воскресенье, 05.07.2015, 15:17 | Сообщение # 5 |
Сержант
Группа: Пользователи
Сообщений: 27
Статус: Offline
| Пытаюсь сделать глобально посредством AddKeyboardShortcut(hwnd,FVIRTKEY,VK_RETURN... Не получается
|
|
| |
haav | Дата: Воскресенье, 05.07.2015, 16:41 | Сообщение # 6 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Ну если глобально, то так можно:
Код #Include "window9.bi"
Dim As Integer event Dim As HWND hwnd
Function windowproc(hwnd As HWND,msg As UINT,wParam As WPARAM,lParam As LPARAM) As Integer If msg = WM_KEYDOWN Then If wparam = &hd Then ' Сканкод "Enter" = &hd If Bit(CInt(lParam),24) Then ' проверяем 24 бит ? "Right ENTER" Else ? "Left ENTER" EndIf EndIf EndIf Return 0 End Function
hwnd=OpenWindow("",10,10,500,500) : CenterWindow(hwnd) ButtonGadget(1,10,10,100,30,"Button") SetWindowCallback(CInt(@windowproc),1)
Do event=WaitEvent() If Event=EventClose Then End Loop
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
symargl | Дата: Воскресенье, 05.07.2015, 17:28 | Сообщение # 7 |
Сержант
Группа: Пользователи
Сообщений: 27
Статус: Offline
| Превосходно, именно то, что требовалось. БлагоДарю!
|
|
| |