Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как отловить нажатие клавиши Win в DW? / 24 сообщений из 24, страница 1 из 1
12.11.2009, 16:36
    #36307246
Anton Losev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Не удается отловить нажатие клавиши 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
12.11.2009, 16:42
    #36307259
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Смапируй событие в dw pbm_dwnkey и все будет хорошо
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
12.11.2009, 16:45
    #36307268
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Извиняюсь, поторопился
Что писал в pbm_dwnkey?
Если тот код, что выше, то он там работать не будет
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
12.11.2009, 16:54
    #36307288
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Коды этого диапазона не обрабатываются
Код: 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
12.11.2009, 17:08
    #36307320
Anton Losev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
spas2001, то, что в обработчике pbm_dwnkey как и в pmb_keydown напрямую проверить по keycode нажатие RWin или LWin нельзя, я знаю. Тем не менее, это нужно как-то сделать. Почему pbm_other для datawindow стандартным образом не обрабатывается - вот что непонятно.
...
Рейтинг: 0 / 0
12.11.2009, 21:29
    #36307866
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Тут всё неоднозначно. Если у вас DW НЕ editable, то всё отрабатывает, DW получает WM_KEYDOWN с VK_L(R)WIN.
Если DW editable и фокус в редактируемой колонке, то Edit Control, а НЕ DW получает WM_KEYDOWN, но никаких notifications в DW не посылает (В него только EN_KILLFOCUS через WM_COMMAND приходит и всё).
Но самое главное - ЗАЧЕМ вам это?
...
Рейтинг: 0 / 0
13.11.2009, 10:53
    #36308534
Anton Losev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Есть хитрый userobject - поле ввода, при наведении мыши на который открывается всплывающее дочернее окно с editable datawindow внутри. Это окошко фиксируется на экране, если на него кликнуть и убирается, если увести мышь с поля ввода или с самого окошка. Нужно, не привязываясь к обработчикам событий родительских окон (т.е. тех, на которых будут размещаться userobjects), правильно обрабатывать "деактивацию" приложения - закрывать окошко при переключении на другое приложение. Все работает хорошо за исключением случаев, когда другие приложения запускаются с помощью системных горячих клавиш (Win+Break, например). Вот я и пытаюсь отлавливать эти нажатия - по-просту закрывать окошко, когда пользователь нажимает на Ctrl, Alt, Win.
...
Рейтинг: 0 / 0
13.11.2009, 11:47
    #36308764
Anton Losev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Филипп, под editable подразумевается DisplayOnly для поля?
...
Рейтинг: 0 / 0
13.11.2009, 13:04
    #36309058
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Может все-таки деактивацию вылавливать чем все кнопки
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
13.11.2009, 13:24
    #36309139
Anton Losev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
spas2001, кнопок-то 3 штуки, а форм, на которых будет размещаться uo - сколько угодно и для каждой прописывать deactivate неудобно.
...
Рейтинг: 0 / 0
13.11.2009, 14:55
    #36309463
Anton Losev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Так уж и быть, повешу на deactivate главной формы. Раз уж отловить win в dw не получается.
...
Рейтинг: 0 / 0
13.11.2009, 15:22
    #36309515
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
попробовал у себя в pbm_dwnkey
Код: plaintext
if KeyDown( KeyLeftWindows! ) then messagebox('','')
нормально отрабатывает
с правым Win не пробовал, так как у меня на буке его нету :)
...
Рейтинг: 0 / 0
13.11.2009, 16:59
    #36309848
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Дело в том что если стоит какая-то прога типа перекодировщика на-лету может и не отрабатывать
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
13.11.2009, 17:10
    #36309893
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
ну если только перекодировщик на лету (не знаю че эт такое.... если Punto, то у меня стоит и нормально все)
то и все остальное в pbm_dwnkey тоже перестанет работать
...
Рейтинг: 0 / 0
13.11.2009, 18:27
    #36310064
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Anton LosevФилипп, под editable подразумевается DisplayOnly для поля?
Подразумевается что фокус в Datawindow, но НЕ в edit controle Datawindow...
...
Рейтинг: 0 / 0
13.11.2009, 18:30
    #36310067
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
VanoRпопробовал у себя в pbm_dwnkey
Код: plaintext
if KeyDown( KeyLeftWindows! ) then messagebox('','')
нормально отрабатывает
с правым Win не пробовал, так как у меня на буке его нету :)
Если фокус в Datawindow, но НЕ в edit controle Datawindow, то сработает, иначе - нет...
...
Рейтинг: 0 / 0
16.11.2009, 10:11
    #36311806
Anton Losev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Здорово, не знал про KeyLeftWindows!
Спасибо всем, по-моему ответы теперь довольно исчерпывающи.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.12.2011, 14:16
    #37577587
boogiman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Подниму тему:

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

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

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

А вот на dw даже на событии pm_dwnkey , нет потому как курсор горит в фокусе одного из полей.
Message.number тоже не особо помог.
Проблема имеет решение, если да то поделитесь плиз!
PowerBuilder 9.0
Спасибо...
...
Рейтинг: 0 / 0
15.12.2011, 17:34
    #37578286
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
Через ChangeMenu привесить меню, но не отображать
Туда прописать hotkey F12
Должно сработать
...
Рейтинг: 0 / 0
15.12.2011, 21:20
    #37578728
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
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
16.12.2011, 08:23
    #37579063
boogiman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить нажатие клавиши Win в DW?
ФилиппУ меня на событии pm_dwnkey , когда курсор горит в фокусе одного из полей, срабатывает на раз:
Код: sql
1.
2.
3.
IF key = KeyF12! THEN
	MessageBox("Yes", "KeyF12!")
END IF



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

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



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

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


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