大约 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 的帖子标题。
谢谢..