FreeBasic
Главная
Вход
Регистрация
Пятница, 19.04.2024, 07:04Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Клавиша по-умолчанию
Клавиша по-умолчанию
Billi_JoДата: Воскресенье, 29.03.2015, 23:00 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 39
Репутация: 0
Статус: Offline
Приветствую!

Есть EditorGadget() и ButtonGadget().
Нужно чтобы при нажатии клавиши Enter (когда курсор стоит в EditorGadget()) срабатывал ButtonGadget().
Не нашел решения в справке.
Попробовал через AddKeyboardShortcut(hwnd,FVIRTKEY,VK_RETURN,HK_ENTER) - но если в качестве хендла указывать хендл EditorGadget(), то  "горячая" клавиша перестает работать.

Спасите, братцы!)
 
haavДата: Понедельник, 30.03.2015, 06:38 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: 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
Репутация: 0
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: 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
Репутация: 0
Статус: 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
 
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Клавиша по-умолчанию
  • Страница 1 из 1
  • 1
Поиск: