Не уверен, что это будет работать с D2007;это в D7.Можете ли вы попробовать следующее?
type
THackPopupList = class(TPopupList)
private
FActuallyClicked: Boolean;
protected
procedure WndProc(var Message: TMessage); override;
public
property ActuallyClicked: Boolean read FActuallyClicked;
end;
{ THackPopupList }
procedure THackPopupList.WndProc(var Message: TMessage);
begin
FActuallyClicked := Message.Msg = WM_COMMAND;
inherited WndProc(Message);
end;
{ TForm1 }
procedure TForm1.MenuFileOpenClick(Sender: TObject);
var
ActuallyClicked: Boolean;
begin
ActuallyClicked := THackPopupList(PopupList).ActuallyClicked;
...
end;
initialization
PopupList.Free;
PopupList := THackPopupList.Create;
end.
Объяснение: OnClick, который запускается при наведении, инициируется WM_INITMENUPOPUP, но OnClick, который вызывается щелчком мыши, инициируется этим WM_COMMAND.
Это зависит от того, как Menus.pas уже был инициализирован.Но, как я понимаю из порядка инициализации модуля Delphi , это гарантировано, даже если вы поместите этот код во вспомогательный модуль.