在Delphi XE2 TActionMainMenubar中显示提示

时间:2012-10-25 14:30:32

标签: delphi menu action delphi-xe2

我正在努力尝试在TActionMainMenuBar中显示提示。 Delphi XE2。

我在运行时创建菜单。我添加类别,子项目,清除菜单,一切都很好。单击菜单项可以正常工作(现在它只是一个带有操作项标签的ShowMessage,但没关系)。

这是添加新菜单项的代码:

function TActionF.NewAction(AParent: TActionClientItem; Caption: String; aTag : integer; ExecuteAction: TNotifyEvent):TActionClientItem;
var
  newActionClient : TActionClientItem;
  AnewAction : TAction;
begin
  newActionClient := TActionClientItem(AParent.Items.insert(AParent.Items.Count));
  newActionClient.Caption := Caption; //??
  newActionClient.UsageCount := -1; // turn of menu priority stuff for now
  AnewAction := TAction.Create(Self);
  AnewAction.Tag := aTag;
  AnewAction.ImageIndex := -1;
  AnewAction.Caption := Caption;
  AnewAction.Hint := Caption + 'Action Tag = ' + IntToStr(aTag);
  AnewAction.OnHint := acnDoHint;  // fixed, could be parameter, but onHint is never called    !!??
  AnewAction.OnExecute := ExecuteAction; // passed as parameter
  newActionClient.Action := AnewAction;
  Result := newActionClient;
end;

我正在设置动作的提示。我也尝试过分配OnHint,但OnHint永远不会被调用。我在浏览菜单时根本无法获得该提示。

我将ShowHint设置为True,无处不在,我可以看到一个地方。

问题在于,无论我尝试什么,我都无法显示任何菜单提示。如果我能够得到它我可以自己显示它(如果程序不会)。永远不会打电话给OnHint。

我已经发布了我的菜单程序(Delphi XE2)的完整源代码,这是我在公共DropBox中尽可能缩小的一个小例子,如果有人想看这个程序的话。

https://dl.dropbox.com/u/58421925/Actions.zip

1 个答案:

答案 0 :(得分:0)

这完全符合您的要求:www.delphi.about.com/od/vclusing/a/menuitemhints.htm

它处理WM_MENUSELECT消息并在其自己的窗口中显示提示(TMenuItemHint = class(THintWindow))。