全球<代码>Menus.PopupList变量对所有PopupMenus进行跟踪,处理发给他们的所有批量。 您可以自行推翻这名PopupList:
type
TMyPopupList = class(TPopupList)
private
FMenuItem: TMenuItem;
protected
procedure WndProc(var Message: TMessage); override;
end;
{ TMyPopupList }
procedure TMyPopupList.WndProc(var Message: TMessage);
var
FindKind: TFindItemKind;
I: Integer;
Item: Integer;
Action: TBasicAction;
Menu: TMenu;
begin
case Message.Msg of
WM_MENUSELECT:
with TWMMenuSelect(Message) do
begin
FindKind := fkCommand;
if MenuFlag and MF_POPUP <> 0 then
FindKind := fkHandle;
for I := 0 to Count - 1 do
begin
if FindKind = fkHandle then
begin
if Menu <> 0 then
Item := GetSubMenu(Menu, IDItem)
else
Item := -1;
end
else
Item := IDItem;
FMenuItem := TPopupMenu(Items[I]).FindItem(Item, FindKind);
if FMenuItem <> nil then
Break;
end;
end;
WM_MBUTTONUP:
if FMenuItem <> nil then
begin
GetMenuItemSecondAction(FMenuItem, Action);
Menu := FMenuItem.GetParentMenu;
if Action <> nil then
begin
Menu := FMenuItem.GetParentMenu;
SendMessage(Menu.WindowHandle, WM_IME_KEYDOWN, VK_ESCAPE, 0);
Action.Execute;
Exit;
end;
end;
end;
inherited WndProc(Message);
end;
initialization
PopupList.Free;
PopupList := TMyPopupList.Create;
www.un.org/Depts/DGACM/index_french.htm 例行公文必须写。 Maybe ,这一答案提供了一些帮助,帮助将自己的行动纳入一个组成部分。
注:<代码>下的代码 WM_MENUSlectT 只是从Menus.TPopupList.WndProc
复制。 您也可检索<代码>中的MendItem。 http://msdn.microsoft.com/en-us/library/ms647992(v=VS.85).aspx“rel=“nofollow noretinger”>MenuItemFromPoint
。
但是,正如许多评论已经说过的那样:在实施这一“倡议”功能之前,考虑过两次(或多次)。