Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

TActionMainMenuBar   Найти похожие ветки 

 
Khim ©   (2006-04-03 14:23) [0]

Доброе время суток!
Подскажите плиз, как мне отловить хендл пункта меню, если меню относится к TActionMainMenuBar
Просто нужно понажимать пару кнопочек на меню
Если можно незамудренный примерчик, и помедленее, а то я записываю
Заранее спасиба!


 
Khim ©   (2006-04-03 15:00) [1]

Модераторы, перенесите пожалуйста вопрос на конференцию по API, а то в правилах запрещено дублировать вопросы.


 
Leonid Troyanovsky ©   (2006-04-03 18:42) [2]


> Khim ©   (03.04.06 14:23)  


> Подскажите плиз, как мне отловить хендл пункта меню, если
> меню относится к TActionMainMenuBar

И как оно к нему относится?

> Просто нужно понажимать пару кнопочек на меню

А что за кнопки в меню, чекбоксы?

И, пожалуйста, помедленнее, бо непонятно.

--
Regards, LVT.


 
Khim ©   (2006-04-04 03:54) [3]

Вот кусок кода:
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. Результат тот же


 
Юрий Зотов ©   (2006-04-04 06:11) [4]

> 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 11:55) [5]

Извините, не работал с OTAPI,
не обязательно 6-й подпункт, и не обязательно первый подпункт
Я ведь тока учусь,
Хочу все знать!
Если можно, по данному вопросу. Не могу получить хендл пункта меню.
Заранее пасиба!


 
Khim ©   (2006-04-05 18:41) [6]

Подскажите тогда другой способ понажимать на кнопочки, плиз, если можно



Страницы: 1 вся ветка

Текущий архив: 2006.04.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.068 c
15-1143114528
Der Nechk@ssoff
2006-03-23 14:48
2006.04.23
Политика Мелкософта


4-1138996456
Баяр
2006-02-03 22:54
2006.04.23
TMediaPlayer проигрываю MPG выдергиваю кадр чёрный


15-1143758823
Andy BitOff
2006-03-31 02:47
2006.04.23
Интересная статья о птичьем гриппе.


2-1144325836
Layner
2006-04-06 16:17
2006.04.23
Как правильно сделать "скользящий курсор" по выборке


4-1138965260
V-A-V
2006-02-03 14:14
2006.04.23
Права админа