2009-07-05 6 views
1

Ich möchte die "checked" -Eigenschaft aller TAction-Objekte eines Menübands auf false zurücksetzen, wenn Sie auf eine beliebige Menüband-Schaltfläche klicken und dann nur auf die gedrückte Schaltfläche setzen. Aber ich habe noch keine Möglichkeit gefunden, auf alle "checked" -Eigenschaften der ActionManager-Aktionen zuzugreifen. Ich denke, ich muss die Aktionsliste des Action Managers durchlaufen ... aber ich habe noch nicht den richtigen Weg gefunden. Ich wäre sehr froh, wenn mir jemand dazu einen Hinweis geben könnte.Wie kann man während der Laufzeit auf die Checked-Eigenschaft einer Delphi 2009-Menübandtaste zugreifen?

Danke!

+2

Wenn Sie die GroupIndex-Eigenschaft der Aktionen festlegen, sollten Sie keinen zusätzlichen Code schreiben. Diese Eigenschaft teilt Aktionen mit, dass sie Teil einer Gruppe sind. Daher werden alle anderen Elemente automatisch deaktiviert, wenn eine Option aktiviert wird, genau wie eine Optionsschaltfläche. –

+0

Ich bin mir auch nicht sicher, ob diese Frage etwas mit Ribbons oder Delphi 2009 zu tun hat. In Delphi 4 wurden Aktionen eingeführt. Entweder entfernen Sie diese Tags oder bearbeiten die Frage, um diese Details relevant zu machen. –

+0

@Rob: große Punkte auf den Tags, und zugeben, Komplizen bei der Fehlmarkierung. Habe nach deinem Vorschlag editiert. Große Antwort, BTW! – Argalatyr

Antwort

2

TActionManager stammt von TCustomActionList ab, also was auch immer Sie mit letzterem tun können, können Sie mit dem ehemaligen tun. Es gibt zwei Eigenschaften, die Sie verwenden müssen: Actions, die Array-Eigenschaft, die Ihnen Zugriff auf alle Aktionen der Liste gibt, und ActionCount, die Ihnen sagt, wie viele es sind. Verwenden sie eine gewöhnliche Schleife zu schreiben, wie folgt aus:

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; 

Aktionslisten können viele Arten von Aktionen halten, und sie haben nicht alle Checked Eigenschaften haben. Diese Eigenschaft wird in TCustomAction eingeführt, daher filtert der obige Code auch die Dinge heraus, die nicht von dieser Klasse abstammen.

+0

Obwohl Rob meine spezifische Frage anders gelöst hat, ist diese Antwort auch sehr hilfreich, um zu verstehen, wie all diese Action-Sachen funktionieren. Danke! – user133370

Verwandte Themen