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

Delphi 如何将MRF列表添加到TRibbons下拉按钮集合中?,delphi,Delphi,我可以轻松地将MRF列表添加到TRibbon最近的项目列表中,但如何添加 是否将同一列表添加到设置为下拉按钮的功能区项?下拉列表 项为ActionBars[2]。项为[1] var ARecentFilesList: TStringList; ACI: TActionClientItem; if FileExists( ARecentFilesFilename ) then begin ARecentFilesList.LoadFromFile( ARecentFilesFilename )

我可以轻松地将MRF列表添加到TRibbon最近的项目列表中,但如何添加 是否将同一列表添加到设置为下拉按钮的功能区项?下拉列表 项为ActionBars[2]。项为[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;
谢谢


比尔

与许多actionbar控件一样,它不像您希望的那样直观。功能区上的基本结构如下所示:

  • 每个功能区都有选项卡
  • 每个选项卡都有组
  • 每组都有一系列的控制
  • 每个控件都有一个与之关联的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;

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

与许多actionbar控件一样,它不像您希望的那样直观。功能区上的基本结构如下所示:

  • 每个功能区都有选项卡
  • 每个选项卡都有组
  • 每组都有一系列的控制
  • 每个控件都有一个与之关联的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;

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

非常感谢。。。我设法从打开的文件中将一个文件名添加到控件(在我的例子中是第一个组的第二个控件)。现在,要了解如何从字符串列表(已经可用)中添加项,以及选择哪个项来获取文件名以重新打开文件。我设法在运行时从字符串列表中添加ActionClientItems。。。有关如何获取所选ActionClientItem的问题,请参阅我的最新帖子?我喜欢Nat在那里的答案-可能可以用另一种方式找到它,但为每个文件创建一个操作可能是最好的。我在那里也添加了一些评论。非常感谢。。。我设法从打开的文件中将一个文件名添加到控件(在我的例子中是第一个组的第二个控件)。现在,要了解如何从字符串列表(已经可用)中添加项,以及选择哪个项来获取文件名以重新打开文件。我设法在运行时从字符串列表中添加ActionClientItems。。。有关如何获取所选ActionClientItem的问题,请参阅我的最新帖子?我喜欢Nat在那里的答案-可能可以用另一种方式找到它,但为每个文件创建一个操作可能是最好的。我在那里也添加了一些评论。