Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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, а то в правилах запрещено дублировать вопросы.


Наверх

Титульная страница Поиск, карта сайта Написать письмо