如何将MRF列表添加到TRibbons下拉按钮集合中?

时间:2009-09-13 17:13:56

标签: delphi

我可以轻松地将一个MRF列表添加到A TRibbon最近的项目列表中,但是如何添加 设置为下拉按钮的功能区项目的相同列表?下拉列表 item是ActionBars [2] .Items [1]。

var
ARecentFilesList: TStringList;
ACI: TActionClientItem;
if FileExists( ARecentFilesFilename ) then
begin
  ARecentFilesList.LoadFromFile( ARecentFilesFilename );
  for i := 0 to ARecentFilesList.Count - 1 do
  begin
    // add filename to Ribbon Recent Items
    Ribbon1.AddRecentItem( ARecentFilesList.Strings[ i ] );
    //add the file name to dropdown button collection
    //add MostRecentFiles to ActionBars[2].Items[1]
    //ACI := TActionClientItem.Create( );
    //ACI.Caption := ARecentFilesList.Strings[ i ];
  end;
end;

谢谢,

比尔

1 个答案:

答案 0 :(得分:1)

与大多数操作栏控件一样,它并不像您所希望的那样直观。功能区上的基本结构如下:

  • 每个功能区都有标签。
  • 每个标签都有组。
  • 每个小组都有一系列控件。
  • 每个控件都有一个与之关联的TActionClient。
  • 每个TActionClient都可以有其他与之关联的TActionClient对象,可以是ContextItems,也可以是Items。重复此级别越多,嵌套菜单就越深。

因此,您的策略是获取代表您要添加项目的按钮的TActionClient。在我的简单测试应用程序中,我抓住了第一组的第一个控件 - 您的逻辑可能需要更高级。

var
  ActionClient: TActionClient;
  ChildItem: TActionClientItem;
begin
// Does the same as Ribbon1.AddRecentItem('C:\MyFile.txt');

  ActionClient := RibbonGroup1.ActionControls[0].ActionClient;

  ChildItem := ActionClient.Items.Add;
  ChildItem.Action := ActionThanOpensAFile;
  ChildItem.Caption := 'C:\MyFile.txt';
end;

请注意,我在指定了操作后分配了菜单项的标题 - 这是因为该操作会替换与其关联的客户端的标题(以及其他属性)。