功能区控件

时间:2010-08-26 13:41:31

标签: delphi ribbon-control

如何使用Delphi在快速访问栏中单击 more命令按钮后启用禁用的功能区按钮?

2 个答案:

答案 0 :(得分:8)

这是一个已知的错误

Quality Central报告70342:

  

使用功能区控件时,如果使用   添加一个快速访问工具栏,然后   在运行时选择“更多命令”   自定义快速访问工具栏,   许多(虽然并不总是全部)的   各种功能区中的动作组件   团体将成为永久的   禁用。

请参阅报告本身以获取更多信息: http://qc.embarcadero.com/wc/qcmain.aspx?d=70342

报告仍然开放,所以我在D2011中可能也没有解决,但质量中心可能会落后一点。

<强>更新

报告指出没有解决方法,但Jack Sudarev在评论中发表了一篇文章:

procedure TForm6.ActionManager1StateChange(Sender: TObject);
begin
UpdateActions(ActionManager1);
end;

procedure TForm6.UpdateActions(ActionManager: TActionManager);
var
  i: Integer;
begin
  if not Assigned(ActionManager) then
    Exit;

  for i := 0 to ActionManager.ActionCount - 1 do
  begin
    (ActionManager.Actions[i] as TAction).Enabled := False;
    (ActionManager.Actions[i] as TAction).Enabled := True;      
  end;
end;

答案 1 :(得分:1)

这就是我所做的:

procedure TmainTranslatform.MyUpdateActions(ActionManager: TActionManager);
var
  i: Integer;
begin
  if not Assigned(ActionManager) then
    Exit;

  for i := 0 to ActionManager.ActionCount - 1 do
  begin
  if (ActionManager.Actions[i] is TFileOpen)  then
  begin
    (ActionManager.Actions[i] as TFileOpen).Enabled := False;
    (ActionManager.Actions[i] as TFileOpen).Enabled := True;

  end;
  if (ActionManager.Actions[i] is TAction)  then
  begin
    (ActionManager.Actions[i] as TAction).Enabled := False;
    (ActionManager.Actions[i] as TAction).Enabled := True;
  end;
  end;
end;