![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TActionMainMenuBar [D7, 95/98, XP]
Khim © (2006-04-03 14:23:00)Доброе время суток!
Подскажите плиз, как мне отловить хендл пункта меню, если меню относится к TActionMainMenuBar
Просто нужно понажимать пару кнопочек на меню
Если можно незамудренный примерчик, и помедленее, а то я записываю
Заранее спасиба!
Khim (2006-04-05 18:41:00) [1]Подскажите тогда другой способ понажимать на кнопочки, плиз, если можно
Khim (2006-04-04 11:55:00) [2]Извините, не работал с OTAPI,
не обязательно 6-й подпункт, и не обязательно первый подпункт
Я ведь тока учусь,
Хочу все знать!
Если можно, по данному вопросу. Не могу получить хендл пункта меню.
Заранее пасиба!
Юрий Зотов (2006-04-04 06:11:00) [3]> Khim © (04.04.06 03:54) [3]
Из MSDN:
GetMenu does not work on floating menu bars. Floating menu bars are custom controls that mimic standard menus; they are not menus. To get the handle for a floating menu bar, use the Active Accessibility APIs.
Похоже, причина в этом (проверьте, работает ли код с Word'ом, там меню тоже на плавающем тулбаре). Вообще, вместо подобных полухакерских приемов я бы попытался использовать интерфейсы OTAPI, это легальный способ работы с IDE. К тому же нет гарантии, что 6-й подпункт 1-го пункта меню будет одним и тем же во всех версиях Delphi , а вот через OTAPI все будет работать железно.
Khim (2006-04-04 03:54:00) [4]Вот кусок кода:
Var
Men :HMenu;
Hnd,HndDialog,HndControl,HndAsc,HndBtn :HWnd;
HndMen,HndSMen :HMenu;
StrClass :PChar;
StrBase :string;
IdBtn,idMen :integer;
begin
Hnd:=FindWindow('TAppBuilder', nil);
if Hnd <>0 then begin
//фокусируем:
windows.SetForegroundWindow(Hnd); //или можно так:windows.BringWindowToTop(Hnd);
//Работа с меню:
//===============================================================================
HndMen:=GetMenu(Hnd);//получили описатель главного меню окна.
HndSMen:=GetSubMenu(HndMen,1);//получили описатель второго пункта главного меню (0 -первый пункт)
//получили идентификатор 7 пункта подменюменю (черты в меню - это также пункты)
idMen:=GetMenuItemID(HndSMen,6);
//в данном случае idMen это word(33206)
if idMen<>0 then begin
//запускаем пункт меню. Именно PostMessage, SendMessage - не работает.
PostMessage(Hnd,WM_COMMAND,idMen,0);
Этот код работает с блокнотом
Hnd:=FindWindow('Notepad', nil);.......
и т.д.
Но вот с дельфи не работает. IdMen возвращает -1. Пробовал кинуть на форму ActionMainMenuBar. Результат тот же
Leonid Troyanovsky (2006-04-03 18:42:00) [5]
> Khim © (03.04.06 14:23)
> Подскажите плиз, как мне отловить хендл пункта меню, если
> меню относится к TActionMainMenuBar
И как оно к нему относится?
> Просто нужно понажимать пару кнопочек на меню
А что за кнопки в меню, чекбоксы?
И, пожалуйста, помедленнее, бо непонятно.
--
Regards, LVT.
Khim (2006-04-03 15:00:00) [6]Модераторы, перенесите пожалуйста вопрос на конференцию по API, а то в правилах запрещено дублировать вопросы.