powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как отловить нажатие клавиши Win в DW?
24 сообщений из 24, страница 1 из 1
Как отловить нажатие клавиши Win в DW?
    #36307246
Anton Losev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не удается отловить нажатие клавиши Win (RWin, LWin) в datawindow.
Пробовал в событии other datawindow обработать WM_KEYDOWN
Код: plaintext
1.
2.
3.
4.
if message.number =  256  then //WM_KEYDOWN
  if wparam =  91  or wparam =  91  then 
    ...
  end if
end if
Такое впечатление, что это сообщение обрабатывается еще раньше, потому что условие message.number = 256 никогда не выполняется, хотя Spy++ показывает вот что:
Код: plaintext
< 00162 > 001F0CF0 P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat: 1  ScanCode:5B fExtended: 1  fAltDown: 0  fRepeat: 0  fUp: 0 
С WM_SYSKEYDOWN тот же результат.
Пробовал в обработчике pbm_dwnkey использовать функции GetKeyState и GetAsyncKeyState, чтобы считать состояние клавиш Win. Первая почти всегда возвращают 1 для RWin даже в том случае, если она не была нажата, а для возвращает всегда 1 после первого нажатия. Вторая возвращает всегда 0.
Что делать?
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36307259
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смапируй событие в dw pbm_dwnkey и все будет хорошо
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36307268
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, поторопился
Что писал в pbm_dwnkey?
Если тот код, что выше, то он там работать не будет
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36307288
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коды этого диапазона не обрабатываются
Код: plaintext
1.
2.
3.
KeyDown only detects ASCII values  65 - 90  (KeyA! - KeyZ!) and  48 - 57  (Key0!-Key9!). 
These ASCII values detect whether the key was pressed, whether or not the user also pressed Shift or Caps Lock. 
KeyDown does not detect other ASCII values (such as  97 - 122  for lowercase letters).
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36307320
Anton Losev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001, то, что в обработчике pbm_dwnkey как и в pmb_keydown напрямую проверить по keycode нажатие RWin или LWin нельзя, я знаю. Тем не менее, это нужно как-то сделать. Почему pbm_other для datawindow стандартным образом не обрабатывается - вот что непонятно.
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36307866
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут всё неоднозначно. Если у вас DW НЕ editable, то всё отрабатывает, DW получает WM_KEYDOWN с VK_L(R)WIN.
Если DW editable и фокус в редактируемой колонке, то Edit Control, а НЕ DW получает WM_KEYDOWN, но никаких notifications в DW не посылает (В него только EN_KILLFOCUS через WM_COMMAND приходит и всё).
Но самое главное - ЗАЧЕМ вам это?
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36308534
Anton Losev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть хитрый userobject - поле ввода, при наведении мыши на который открывается всплывающее дочернее окно с editable datawindow внутри. Это окошко фиксируется на экране, если на него кликнуть и убирается, если увести мышь с поля ввода или с самого окошка. Нужно, не привязываясь к обработчикам событий родительских окон (т.е. тех, на которых будут размещаться userobjects), правильно обрабатывать "деактивацию" приложения - закрывать окошко при переключении на другое приложение. Все работает хорошо за исключением случаев, когда другие приложения запускаются с помощью системных горячих клавиш (Win+Break, например). Вот я и пытаюсь отлавливать эти нажатия - по-просту закрывать окошко, когда пользователь нажимает на Ctrl, Alt, Win.
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36308764
Anton Losev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Филипп, под editable подразумевается DisplayOnly для поля?
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36309058
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может все-таки деактивацию вылавливать чем все кнопки
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36309139
Anton Losev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001, кнопок-то 3 штуки, а форм, на которых будет размещаться uo - сколько угодно и для каждой прописывать deactivate неудобно.
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36309463
Anton Losev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так уж и быть, повешу на deactivate главной формы. Раз уж отловить win в dw не получается.
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36309515
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовал у себя в pbm_dwnkey
Код: plaintext
if KeyDown( KeyLeftWindows! ) then messagebox('','')
нормально отрабатывает
с правым Win не пробовал, так как у меня на буке его нету :)
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36309848
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том что если стоит какая-то прога типа перекодировщика на-лету может и не отрабатывать
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36309893
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну если только перекодировщик на лету (не знаю че эт такое.... если Punto, то у меня стоит и нормально все)
то и все остальное в pbm_dwnkey тоже перестанет работать
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36310064
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton LosevФилипп, под editable подразумевается DisplayOnly для поля?
Подразумевается что фокус в Datawindow, но НЕ в edit controle Datawindow...
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36310067
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRпопробовал у себя в pbm_dwnkey
Код: plaintext
if KeyDown( KeyLeftWindows! ) then messagebox('','')
нормально отрабатывает
с правым Win не пробовал, так как у меня на буке его нету :)
Если фокус в Datawindow, но НЕ в edit controle Datawindow, то сработает, иначе - нет...
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #36311806
Anton Losev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здорово, не знал про KeyLeftWindows!
Спасибо всем, по-моему ответы теперь довольно исчерпывающи.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как отловить нажатие клавиши Win в DW?
    #37577587
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подниму тему:

Есть форма , в ней dw с редактируемыми полями. Внизу есть кнопки типа Сохранить.
Пользователь хочет навесить алгоритм, чтобы при нажатии F12 - отрабатывал вызов кнопки Сохранить...

На форме это работает без проблем:

if keydown (KeyF12!) then
cb_save_add.event clicked()
end if

А вот на dw даже на событии pm_dwnkey , нет потому как курсор горит в фокусе одного из полей.
Message.number тоже не особо помог.
Проблема имеет решение, если да то поделитесь плиз!
PowerBuilder 9.0
Спасибо...
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #37578286
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через ChangeMenu привесить меню, но не отображать
Туда прописать hotkey F12
Должно сработать
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #37578728
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogimanПодниму тему:

Есть форма , в ней dw с редактируемыми полями. Внизу есть кнопки типа Сохранить.
Пользователь хочет навесить алгоритм, чтобы при нажатии F12 - отрабатывал вызов кнопки Сохранить...

На форме это работает без проблем:

if keydown (KeyF12!) then
cb_save_add.event clicked()
end if

А вот на dw даже на событии pm_dwnkey , нет потому как курсор горит в фокусе одного из полей.
Спасибо...
У меня на событии pm_dwnkey , когда курсор горит в фокусе одного из полей, срабатывает на раз:
Код: sql
1.
2.
3.
IF key = KeyF12! THEN
	MessageBox("Yes", "KeyF12!")
END IF
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #37579063
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппУ меня на событии pm_dwnkey , когда курсор горит в фокусе одного из полей, срабатывает на раз:
Код: sql
1.
2.
3.
IF key = KeyF12! THEN
	MessageBox("Yes", "KeyF12!")
END IF



Попробовал не работает, у меня обычный тип dw - может быть у вас , как то другой тип или оции на ячейках стоят какие то хитрые?
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #37579070
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001Через ChangeMenu привесить меню, но не отображать
Туда прописать hotkey F12
Должно сработать

Это если честно не понял, как это сделать? Меню для dw или для window?
Просто ни разу такого не делал!
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #37580252
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меню конечно для окна
Где-нибудь в Open - changemenu(m_menu)
Даже в респонсе работает.
Но странно что pbm_dwnkey не отрабатывает
...
Рейтинг: 0 / 0
Как отловить нажатие клавиши Win в DW?
    #37580568
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogimanФилиппУ меня на событии pm_dwnkey , когда курсор горит в фокусе одного из полей, срабатывает на раз:
Код: sql
1.
2.
3.
IF key = KeyF12! THEN
	MessageBox("Yes", "KeyF12!")
END IF



Попробовал не работает, у меня обычный тип dw - может быть у вас , как то другой тип или оции на ячейках стоят какие то хитрые?

Абсолютно стандартное всё.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как отловить нажатие клавиши Win в DW?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]