如何在运行时访问Delphi 2009功能区按钮的checked属性?
我想在单击任何功能区按钮时将功能区的所有TAction对象的“checked”属性重置为false,然后仅在按下的按钮上将其设置为true。 但我还没有找到访问ActionManager操作的所有“选中”属性的方法。 我想我需要循环查看actionmanager的actionlist。。。但是,我还没有找到正确的方法去做。 如果有人能给我一些提示,我将非常高兴如何在运行时访问Delphi 2009功能区按钮的checked属性?,delphi,taction,Delphi,Taction,我想在单击任何功能区按钮时将功能区的所有TAction对象的“checked”属性重置为false,然后仅在按下的按钮上将其设置为true。 但我还没有找到访问ActionManager操作的所有“选中”属性的方法。 我想我需要循环查看actionmanager的actionlist。。。但是,我还没有找到正确的方法去做。 如果有人能给我一些提示,我将非常高兴 谢谢 TActionManager是从TCustomActionList派生而来的,因此无论您如何使用后者,都可以使用前者。它有两个您需
谢谢
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;
操作列表可以包含许多类型的操作,并且它们并不都具有选中的属性。该属性是在
TCustomAction
中引入的,因此上面的代码也会过滤掉不属于该类的内容。如果设置操作的GroupIndex属性,则根本不需要编写任何其他代码。该属性告诉操作它们是一个组的一部分,因此当任何一个被选中时,它们会自动取消选中其他所有项,就像单选按钮一样。此外,我不确定这个问题是否与Ribbon或Delphi 2009有关。在Delphi4中引入了操作。考虑删除这些标签或编辑问题,使这些细节相关。@罗布:标签上的大点,并承认是在MIS标签的串通。根据你的建议进行编辑。很好的回答,顺便说一句@罗布:你完全正确,不知道我为什么错过了。这解决了我的问题;)虽然下面的答案也很有帮助,因为我以后可能需要访问一些属性。@Argalatyr:谢谢您编辑标记!虽然rob用另一种方式解决了我的具体问题,但这个答案对于理解所有这些动作是如何工作的也很有帮助。谢谢