この質問は約 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 に適用できないか、使用しようとした方法が間違っていました。Web を検索しましたが、前述のスレッドへの複数の参照しか見つかりませんでした。誰かがこの問題の後半を解決することに成功した場合は、情報をいただければ幸いです。
ところで、投稿のタイトルのように、私はこのプロジェクトに Delphi2010 を使用しています。
ありがとう..