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

ところで、投稿のタイトルのように、私はこのプロジェクトに 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 に答える