NewAction := TAction.Create(nil);
NewAction.ActionList := Services.ActionList;
NewAction.Caption := GetMenuText();
NewAction.Hint := 'Display a silly dialog box';
NewAction.ImageIndex := ImageIndex;
NewAction.OnUpdate := action_update;
NewAction.OnExecute := action_execute;
菜单项设置属性Action为新创建的动作。创建菜单项的关连部分就知道在哪里插入它。下面的例子是View菜单,将在View项单下面插入新创建的菜单项。(一般地,指定一个绝对的位置不是一个好方法:你永远不可能知道当其他向导在菜单中插入他们自己的菜单项后它的位置。对于将来版本的Delphi可能会对菜单重新排序。比较好的方法是通过指定的名称来查询指定的菜单。为了更简明,一个简单的例子如下。)
for I := 0 to Services.MainMenu.Items.Count - 1 do
begin
with Services.MainMenu.Items[I] do
begin
if CompareText(Name, 'ViewsMenu') = 0 then
begin
NewItem := TMenuItem.Create(nil);
NewItem.Action := NewAction;
Insert(0, NewItem);
end;
end;
end;
通过在IDE的action list中插入动作,用户可以在自定义工具条时看到这个动作。用户可以选择这个动作并将它作为按钮加入到任何一个工具条上。这可能会在你卸载向导时引发问题:所有的工具条按钮可能会以指向了不存在的对象和OnClick事件处理句柄而告终。为了防止出现访问错误,你的向导应该查询所有指向它的动作的工具条按钮,然后删除这些按钮。