0

大约 3 年前曾有人问过这个问题,但只回答了一半。

原始问题在这里: How To Read and Write Delphi 2010 RibbonApplicationMenuBar Recent Items To A File 并且接受的答案提供了足够的信息,以便您可以弄清楚如何保存 mru 列表,但没有关于如何成功重新加载它的信息。

这就是我目前所拥有的。

SaveDocHistory() 由表单上的关闭事件调用并执行它应该执行的操作。

procedure TfrmMain.SaveDocHistory;
var
  ini : TIniFile;
  i : Integer;
begin
  Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  try
    ini.EraseSection('DocHistory');
    ini.WriteString('DocHistory', 'FileCount', IntToStr(RibbonApplicationMenuBar1.RecentItems.Count));

    for i := 0 to Pred(RibbonApplicationMenuBar1.RecentItems.Count) do
      ini.WriteString('DocHistory', 'File' + IntToStr(i),
                      RibbonApplicationMenuBar1.RecentItems.Items[i].Caption );
  finally
    ini.Free;
  end;
end;

生成的 ini 文件条目如下所示:

[DocHistory]
FileCount=3
File0=F:\Projects\StevenTest\Test02.rtf
File1=F:\Projects\StevenTest\Test1.rtf
File2=F:\Projects\StevenTest\Test01.rtf

问题是重新加载 RibbonApplicationMenuBar 的 RecentItems 列表。我的代码“似乎”在应用程序的最近使用部分中列出的项目中起作用 - 但与“真正的”mru 项目不同,它们不响应点击事件。添加到 mru 列表中的任何新项目都有效,但我的“植入物”无效。所以看来我正在重新加载字幕而不是文件信息。这是我的代码,一个由保存 RibbonApplicationMenuBar 的表单的 FormCreate 事件调用的函数。

procedure TfrmMain.LoadDocHistory;
var
  ini : TIniFile;
  nCount, i : Integer;
  sTmp : string;
begin
  Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  try
    nCount := ini.ReadInteger('DocHistory', 'FileCount', 0 );

    for i := 0 to Pred(nCount) do
    begin
      sTmp := ini.ReadString('DocHistory', 'File' + IntToStr(i), '');
      RibbonApplicationMenuBar1.RecentItems.Add.Caption := sTmp;
    end;

  finally
    ini.Free;
  end;
end;

我尝试破译 Delphi 的帮助,但他们提到的 AddRecentItem() 函数方法要么不适用于 RibbonApplicationMenuBar,要么我尝试使用它的方式不正确。我在网上搜索过,但我发现的只是对前面提到的线程的多次引用。如果有人成功解决了这个问题的后半部分,我将不胜感激。

顺便说一句,我正在为这个项目使用 Delphi2010 的帖子标题。

谢谢..

4

1 回答 1

4

当我检查我的帖子是否有错别字时,我想到了一些原来是解决方案的东西。这是答案...

我需要将数据加载到ribbon1 子组件。看起来它现在工作正常。

procedure TfrmMain.LoadDocHistory;
var
  ini : TIniFile;
  nCount, i : Integer;
  sTmp : string;
begin
  Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  try
    nCount := ini.ReadInteger('DocHistory', 'FileCount', 0 );

    for i := 0 to Pred(nCount) do
    begin
      sTmp := ini.ReadString('DocHistory', 'File' + IntToStr(i), '');
      Ribbon1.AddRecentItem(sTmp);  //<<<<<<<<<<
    end;
  finally
    ini.Free;
  end;
end;

现在允许有一个 FileExists() 检查和其他错误处理,但我现在需要的是让它工作。

于 2012-10-28T06:21:37.737 回答