如何在运行时访问Delphi 2009功能区按钮的checked属性?

时间:2009-07-05 19:17:50

标签: delphi taction

我想在单击任何功能区按钮时将功能区的所有TAction对象的“checked”属性重置为false,然后仅在按下的按钮上将其设置为true。 但我还没有找到一种方法来访问ActionManager的Actions的所有“已检查”属性。 我想我需要遍历actionmanager的动作列表......但是,我还没有找到正确的方法。 如果有人能给我一些暗示,我会很高兴。

谢谢!

1 个答案:

答案 0 :(得分:2)

TActionManager来自TCustomActionList,所以无论你如何处理后者,都可以使用前者。它有两个你需要使用的属性,Actions,它是可以访问所有列表操作的数组属性,ActionCount,它告诉你有多少属性。使用它们来编写一个普通的循环,如下所示:

var
  i: Integer;
  Contained: TContainedAction;
  Action: TCustomAction;
begin
  for i := 0 to Pred(ActionList.ActionCount) do begin
    Contained := ActionList[i]; // shorthand for ActionList.Actions[i]
    if not (Contained is TCustomAction) then
      continue; // Doesn't have Checked property

    Action := TCustomAction(Contained);
    Action.Checked := False;
  end;
end;

动作列表可以包含多种动作,但它们并不都具有Checked属性。该属性是在TCustomAction中引入的,因此上面的代码也会过滤掉那些不属于该类的内容。