![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем привет. Недавно пишу под дельфи. Проблема такая:
Есть программа, в которой путем выбора меню и последующего выбора в списке этого меню нужного элемента я заставляю прогу сделать определенное действие. Задача состоит в том, чтобы заставить эту прогу делать все эти действия нажатием одной клавиши, например пробела. То есть моя прога на дельфи при нажатии пробела должна выбирать нужные меню и выбирать нужный элемент меню в данной проге. Такой вот shortcut-key нужно сделать =) Вопрос: какой здесь принцип? на какие функции стоит обратить внимание? Последний раз редактировалось KavMax, 22.04.2009 в 13:51. |
#2
|
||||
|
||||
![]() Ловите Key=32 в KeyDown
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Если речь о работе с меню в чужом приложении, то можно так.
Чтобы программно вызвать команду из меню в чужом окне, ему посылается сообщение типа WM_COMMAND. В третьем параметре функции SendMessage (а именно, в младшем слове wParam) нужно указать идентификатор элемента выпадающего меню. Идентификатор можете получить с помощью функции GetMenuItemId. Только для этого необходимо знать позицию элемента меню (фактически порядковый номер начиная с 0). Можно поиздеваться над Блокнотом для примера. Вот так можно вызвать диалог выбора шрифта в Блокноте. Код:
procedure TForm1.Button1Click(Sender: TObject); var NPadHandle: HWND; // handle главного окна Блокнота NPadMenu, NPadSubMenu: HMENU; // дескрипторы главного и выпадающего меню begin NPadHandle := FindWindow(nil, PChar('Безымянный - Блокнот')); NPadMenu := GetMenu(NPadHandle); NPadSubMenu := GetSubMenu(NPadMenu, 2); SendMessage(NPadHandle, WM_COMMAND, GetMenuItemId(NPadSubMenu, 1), 0); end; P.S. Вообще, думаю, вам следует еще посмотреть описание функции GetMenuItemInfo и про структуру MENUITEMINFO. Последний раз редактировалось Nyctos Kasignete, 22.04.2009 в 15:38. |
#4
|
|||
|
|||
![]() 2Nyctos Kasignete
Спасибо=) Но дело в том, что программа немного по другому устроена. Вот скрин http://img50.imageshack.us/img50/6515/ampli.jpg . Там сверху есть обычные меню. Для них тот код, что вы дали, работает правильно. А вот к другому меню, которое вылезает после нажатия на надпись 'Metal', я не знаю как обратиться=\ Код:
NPadSubMenu := GetSubMenu(NPadMenu, 2); Что это за элемент управления такой? Как к нему обратиться? Может перехватить сообщение, которое система пересылает проге во время клика мышью на надпись? Последний раз редактировалось KavMax, 22.04.2009 в 21:16. |