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

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

TPopupMenu [D6, WinXP]


nachinayuschij ©   (2008-11-26 16:03:00) 

Имеется PopupMenu как можно определить какой пункт меню выделен в данный момент или как определить при перемещений выделения???


nachinayuschij   (2008-11-27 16:46:00) [1]

Большое Спасибо! Завтра попробую сделать


clickmaker   (2008-11-27 16:41:00) [2]

да там все тупо

type
 TPopupListEx = class(TPopupList)
   procedure WndProc(var Message: TMessage); override;
 end;

var OldPopupList: TPopupList;

procedure TPopupListEx.WndProc(var Message: TMessage);
begin
 if (Message.Msg = WM_MENUSELECT) then begin
   if (HiWord(Message.WParam) <> $FFFF) then
     Application.MainForm.Caption := Format('We are at the item %d', [LoWord(Message.WParam)])
   else
     Application.MainForm.Caption := 'We are closed menu';
 end;
end;

initialization
 OldPopupList := PopupList;
 PopupList := TPopupListEx.Create;
finalization
 PopupList := OldPopupList;


nachinayuschij   (2008-11-27 16:25:00) [3]

clickmaker ©   (26.11.08 18:19) [11]

лезем в исходники VCL
constructor TPopupMenu.Create(AOwner: TComponent);
...
FWindowHandle := Application.Handle;
...

думаем

clickmaker ©   (26.11.08 18:31) [13]

через глобальную переменную PopupList можно попробовать
у него есть пропертя Window, можно подменить у него WndProc и там ловить WM_MENUSELECT, не забывая вызывать исходную в конце

вот эти я не понял как делать. А через  procedure WMMenuSelect(var Message: TWMMenuSelect); message WM_MENUSELECT; не получается


clickmaker   (2008-11-27 16:11:00) [4]

а как пробуешь?


nachinayuschij   (2008-11-27 16:04:00) [5]

что то у меня никак не получается, помогите срочно надо! В примерах если можно???


clickmaker   (2008-11-26 18:31:00) [6]

через глобальную переменную PopupList можно попробовать
у него есть пропертя Window, можно подменить у него WndProc и там ловить WM_MENUSELECT, не забывая вызывать исходную в конце


nachinayuschij   (2008-11-26 18:24:00) [7]

А, по другому никак нельзя?????


clickmaker   (2008-11-26 18:19:00) [8]

лезем в исходники VCL
constructor TPopupMenu.Create(AOwner: TComponent);
...
FWindowHandle := Application.Handle;
...

думаем


nachinayuschij   (2008-11-26 18:13:00) [9]

У меня только одно окно, он и есть родитель. Почему то WM_MENUSELECT для него не срабатывает а для MainMenu которую поставил на ту же форму срабатывает


clickmaker   (2008-11-26 17:45:00) [10]

ловить сообщение у окна, которое родитель для попапменю


nachinayuschij   (2008-11-26 17:39:00) [11]

Разные и что теперь делать???


clickmaker   (2008-11-26 17:27:00) [12]

оно приходит окну, которое указано в качестве родителя для меню
посмотри, совпадает ли PM.WindowHandle с HAndle формы


nachinayuschij   (2008-11-26 17:18:00) [13]

WM_MENUSELECT почему то срабатывает только на MainMenu


nachinayuschij   (2008-11-26 16:42:00) [14]

Спасибо! Пойду проверять...


clickmaker   (2008-11-26 16:40:00) [15]

TForm1 = class
...
 procedure WMMenuSelect(var Message: TWMMenuSelect); message WM_MENUSELECT;

procedure TForm1.WMMenuSelect(var Message: TWMMenuSelect);
begin

end;

и читаем win32 help по WM_MENUSELECT


nachinayuschij   (2008-11-26 16:30:00) [16]

В примерах можно???


clickmaker   (2008-11-26 16:15:00) [17]

WM_MENUSELECT
GetMenuItemInfo()


DimaBr   (2008-11-26 16:11:00) [18]

Внимание!Здесьобсуждаются вопросы, связанные с разработкойкомпонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поискуи использованиюготовых компонентов, редакторов или экспертов являются нарушениемтематики и могут быть удалены.


Наверх

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