Клавиша по-умолчанию
|
|
Billi_Jo | Дата: Воскресенье, 29.03.2015, 23:00 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 39
Статус: Offline
| Приветствую!
Есть EditorGadget() и ButtonGadget(). Нужно чтобы при нажатии клавиши Enter (когда курсор стоит в EditorGadget()) срабатывал ButtonGadget(). Не нашел решения в справке. Попробовал через AddKeyboardShortcut(hwnd,FVIRTKEY,VK_RETURN,HK_ENTER) - но если в качестве хендла указывать хендл EditorGadget(), то "горячая" клавиша перестает работать.
Спасите, братцы!)
|
|
| |
haav | Дата: Понедельник, 30.03.2015, 06:38 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Код #Include "window9.bi" Dim As Integer event Dim Shared As Long OldWndproc Dim Shared As HWND hwnd,edit
Function edit_ (ByVal Edit As HWND,ByVal uMsg As UINT,ByVal wParam As WPARAM,ByVal lParam As LPARAM) As LRESULT Static As BOOL bFlag Select Case uMsg Case WM_KEYUP If bFlag = 1 Then bFlag = 0 SendMessage(GadgetID(2),BM_SETSTATE,FALSE ,0)' визуально отпускает кнопку SendMessage(GadgetID(2),BM_CLICK,0 ,0) ' посылает сообщение нажатия (чтобы отловить в WaitEvent->EventGadget->EventNumber). Переносит фокус на кнопку. EndIf Case WM_KEYDOWN Dim ch As Byte = wparam If ch = 13 Then bFlag = 1 SendMessage(GadgetID(2),BM_SETSTATE,TRUE ,0) ' визуально нажимает кнопку Return 0 ' блокирует перенос каретки в EditorGadget. Если нужно, чтобы каретка работала, то закомментируй эту строку EndIf End Select Return CallWindowProc(CPtr(WNDPROC,OldWndproc),edit,uMsg,wparam,lparam) End Function
hwnd=OpenWindow("",10,10,200,170) : CenterWindow(hwnd) edit = EditorGadget(1,10,10,100,100) ButtonGadget(2,120,10,50,20,"ок") OldWndproc = SetWindowLong(edit,GWL_WNDPROC,Cast(Long,@edit_)) Do event=WaitEvent() If Event=EventClose Then End If event = eventgadget Then ? eventnumber EndIf Loop
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Billi_Jo | Дата: Понедельник, 30.03.2015, 14:34 | Сообщение # 3 |
Сержант
Группа: Пользователи
Сообщений: 39
Статус: Offline
| haav, спасибо. Я думал будет попроще) Ну что ж, буду разбиратьсяДобавлено (30.03.2015, 14:34) --------------------------------------------- Пока решил ограничиться проверкой условия (мне так понятнее):
if event = EventMenu and EventNumber = HK_ENTER and GetFocus() = {хендл EditorGadget} and PanelGadgetGetCursel(TABS)={номер вкладки, где находится EditorGadget} then
Сейчас обнаружил, что текст в EditorGadget() находящийся на одной вкладке продолжает набираться при вводе с клавиатуры (если там стоял курсор) даже если переключиться на другую вкладку. Это я где-то недосмотрел или баг в библиотеке?
|
|
| |
haav | Дата: Понедельник, 30.03.2015, 15:54 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Цитата Billi_Jo ( ) haav, спасибо. Я думал будет попроще) Ну что ж, буду разбираться
А что ты хотел? EditorGadget захватывая фокус, ловит сочетания клавиш сам (в том числе и ENTER). Нет, можно конечно использовать GetAsyncKeyState для того, чтобы отловить ENTER , но каретка в EditorGadget будет все равно перемещаться по оси Y. Тебе это надо? Да и потом , все равно с учетом симуляции нажатия ButtonGadget , кода будет не меньше .
Цитата Billi_Jo ( ) Сейчас обнаружил, что текст в EditorGadget() находящийся на одной вкладке продолжает набираться при вводе с клавиатуры (если там стоял курсор) даже если переключиться на другую вкладку. Это я где-то недосмотрел или баг в библиотеке?
При переключении вкладок , переноси фокус на нужный гаджет в новой вкладке, или если в новой вкладке еще ничего нет, перенеси фокус на любой другой гаджет в старой вкладке. Фокус устанавливается с помощью функции SetFocus.
Пример:
Цитата SetFocus(GadgetId(1)) - для гаджета с номером 1
или
Цитата hwndButton = ButtonGadget(1,10,10,20,20,"OK") ..... SetFocus(hwndButton) - для кнопки с хендлом hwndButton
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Billi_Jo | Дата: Понедельник, 30.03.2015, 16:41 | Сообщение # 5 |
Сержант
Группа: Пользователи
Сообщений: 39
Статус: Offline
| Цитата haav ( ) При переключении вкладок А как отловить переключение вкладки?
Добавлено (30.03.2015, 16:41) --------------------------------------------- Цитата Billi_Jo ( ) А как отловить переключение вкладки? А, все, проникся: проверяю условие: Код elseif (event = EventGadget and EventNumber = TABS and PanelGadgetGetCursel(TABS)<>{номер вкладки с EditorGadget} then
Сообщение отредактировал Billi_Jo - Понедельник, 30.03.2015, 16:42 |
|
| |
|