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

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

раскрытие MenuItem


mega ©   (2004-12-14 16:59:00) 

Привет, Мастера. Есть пункт меню с подменю, как оследить событие,когда пользователь раскрыл и закрыл подменю? Или его текущее состояние (закрыто/открыто)?


Экспериментатор   (2004-12-15 13:35:00) [1]

Если нужно отследить открытие и перед ним что-нибудь сделать с меню или с его подменю
достаточно обратить внимание на OnClick
перед появлением подменю  -  срабатывает событие OnClick .


Leonid Troyanovsky   (2004-12-15 10:33:00) [2]


> mega   (14.12.04 16:59)  
> Привет, Мастера. Есть пункт меню с подменю, как оследить
> событие,когда пользователь раскрыл и закрыл подменю? Или


В форме, владеющей этим меню, надо сделать обработчик
message WM_MENUSELECT (var msg: TWMMenuSelect)
(не забыть вызов inherited).

Анализируя msg.MenuFlag на наличие MF_POPUP можно
узнать, что выбран пункт, содержащий подменю.
Идентифицировать TMenuItem можно сравнивая его
Command v msg.IDItem (рекурсивный поиск).

Закрывается меню при (msg.MenuFlag = $FFFF) and (msg.Menu=0).

--
С уважением, LVT.


mega   (2004-12-15 08:41:00) [3]

Виноват - из кеша открыл... Спасибо за ответ.


Gero   (2004-12-15 08:38:00) [4]

Мда, чукча не читатель, чукча писатель.


mega   (2004-12-15 08:37:00) [5]

Можеть есть какие нибудь варианты?


Игорь Шевченко   (2004-12-14 23:58:00) [6]


> Есть пункт меню с подменю, как оследить событие,когда пользователь
> раскрыл



unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 Menus;

type
 TfMain = class(TForm)
   MainMenu1: TMainMenu;
   File1: TMenuItem;
   N1: TMenuItem;
   Open1: TMenuItem;
   N2: TMenuItem;
   Save1: TMenuItem;
   Saveas1: TMenuItem;
   N3: TMenuItem;
   Exit1: TMenuItem;
   Text1: TMenuItem;
   Binary1: TMenuItem;
 private
   procedure WMInitMenuPopup (var Message : TWMInitMenuPopup);
      message WM_INITMENUPOPUP;
 end;

var
 fMain: TfMain;

implementation

{$R *.DFM}

{ TfMain }

procedure TfMain.WMInitMenuPopup(var Message: TWMInitMenuPopup);
var
 SubMenu, NewItem: TMenuItem;
begin
 SubMenu := MainMenu1.FindItem (Message.MenuPopup, fkHandle);
 if Assigned(SubMenu) then begin
   NewItem := TMenuItem.Create(Self);
   NewItem.Caption := 'New item';
   SubMenu.Add (NewItem);
 end;
end;

end.


При закрытии меню, по-моему, окну посылается сообщение WM_EXITMENULOOP

С уважением,


Piter   (2004-12-14 22:08:00) [7]

mega   (14.12.04 16:59)

а зачем это нужно?


Наверх

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