• nachinayuschij (26.11.08 16:03) [0]
    Имеется PopupMenu как можно определить какой пункт меню выделен в данный момент или как определить при перемещений выделения???
  • DimaBr © (26.11.08 16:11) [1]
    Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
    Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.
  • clickmaker © (26.11.08 16:15) [2]
    WM_MENUSELECT
    GetMenuItemInfo()
  • nachinayuschij (26.11.08 16:30) [3]
    В примерах можно???
  • clickmaker © (26.11.08 16:40) [4]
    TForm1 = class
    ...
     procedure WMMenuSelect(var Message: TWMMenuSelect); message WM_MENUSELECT;

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

    end;

    и читаем win32 help по WM_MENUSELECT
  • nachinayuschij (26.11.08 16:42) [5]
    Спасибо! Пойду проверять...
  • nachinayuschij (26.11.08 17:18) [6]
    WM_MENUSELECT почему то срабатывает только на MainMenu
  • clickmaker © (26.11.08 17:27) [7]
    оно приходит окну, которое указано в качестве родителя для меню
    посмотри, совпадает ли PM.WindowHandle с HAndle формы
  • nachinayuschij (26.11.08 17:39) [8]
    Разные и что теперь делать???
  • clickmaker © (26.11.08 17:45) [9]
    ловить сообщение у окна, которое родитель для попапменю
  • nachinayuschij (26.11.08 18:13) [10]
    У меня только одно окно, он и есть родитель. Почему то WM_MENUSELECT для него не срабатывает а для MainMenu которую поставил на ту же форму срабатывает
  • clickmaker © (26.11.08 18:19) [11]
    лезем в исходники VCL
    constructor TPopupMenu.Create(AOwner: TComponent);
    ...
    FWindowHandle := Application.Handle;
    ...

    думаем
  • nachinayuschij (26.11.08 18:24) [12]
    А, по другому никак нельзя?????
  • clickmaker © (26.11.08 18:31) [13]
    через глобальную переменную PopupList можно попробовать
    у него есть пропертя Window, можно подменить у него WndProc и там ловить WM_MENUSELECT, не забывая вызывать исходную в конце
  • nachinayuschij (27.11.08 16:04) [14]
    что то у меня никак не получается, помогите срочно надо! В примерах если можно???
  • clickmaker © (27.11.08 16:11) [15]
    а как пробуешь?
  • nachinayuschij (27.11.08 16:25) [16]
    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 © (27.11.08 16:41) [17]
    да там все тупо

    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 (27.11.08 16:46) [18]
    Большое Спасибо! Завтра попробую сделать
Есть новые Нет новых   [134465   +63][b:0][p:0.001]