Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从文件中读取和写入Delphi 2010 RibbonaApplicationMenubar最新项目第2部分_Delphi_Ribbon_Mru - Fatal编程技术网

如何从文件中读取和写入Delphi 2010 RibbonaApplicationMenubar最新项目第2部分

如何从文件中读取和写入Delphi 2010 RibbonaApplicationMenubar最新项目第2部分,delphi,ribbon,mru,Delphi,Ribbon,Mru,这个问题大约在3年前被问过,但只有一半得到了回答 原来的问题是: 接受的答案提供了足够的信息,这样您就可以知道如何保存mru列表,但没有关于如何成功重新加载的信息 这就是我现在拥有的 表单上的关闭事件调用saveDochHistory(),并执行它应该执行的操作 procedure TfrmMain.SaveDocHistory; var ini : TIniFile; i : Integer; begin Ini := TIniFile.Create(ChangeFileExt(A

这个问题大约在3年前被问过,但只有一半得到了回答

原来的问题是: 接受的答案提供了足够的信息,这样您就可以知道如何保存mru列表,但没有关于如何成功重新加载的信息

这就是我现在拥有的

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

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()函数方法要么不适用于RibbonaApplicationMenubar,要么我尝试使用它的方式不正确。我已经在网上搜索过了,但我找到的都是对前面提到的线程的多个引用。如果有人成功地解决了这个问题的下半部分,我将不胜感激

顺便说一句,喜欢的标题后,我用Delphi2010为这个项目


谢谢

当我检查我的帖子是否有打字错误时,我想到了一个解决办法。这是答案

我需要将数据加载到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;
程序TfrmMain.LoadDocHistory;
变量
ini:tini文件;
n计数,i:整数;
sTmp:字符串;
开始
Ini:=tinfile.Create(ChangeFileExt(Application.ExeName,'.Ini');
尝试
nCount:=ini.ReadInteger('DocHistory','FileCount',0);
对于i:=0到Pred(nCount)do
开始
sTmp:=ini.ReadString('DocHistory','File'+IntToStr(i),'');

Ribbon1.AddRecentItem(sTmp)// 当我检查我的帖子是否有打字错误时,我想到了一个解决办法。这是答案

我需要将数据加载到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;
程序TfrmMain.LoadDocHistory;
变量
ini:tini文件;
n计数,i:整数;
sTmp:字符串;
开始
Ini:=tinfile.Create(ChangeFileExt(Application.ExeName,'.Ini');
尝试
nCount:=ini.ReadInteger('DocHistory','FileCount',0);
对于i:=0到Pred(nCount)do
开始
sTmp:=ini.ReadString('DocHistory','File'+IntToStr(i),'');

Ribbon1.AddRecentItem(sTmp)//可能重复的请不要故意问一个完全重复的问题。而是在原始问题上编辑答案或提供自己的答案。我建议您添加有用的代码作为原始问题的新答案。然后删除这个。在我输入这个的时候-我没有故意问这个问题。原来的问题已经闲置了3年多,只有1/2的问题得到了回答,因此是时候重新提问了,希望得到完整的答案。我只是在发布这篇文章后不久碰巧找到了答案。根据游戏规则,这仍然是一个骗局。可能的重复请不要故意问一个完全重复的问题。而是在原始问题上编辑答案或提供自己的答案。我建议您添加有用的代码作为原始问题的新答案。然后删除这个。在我输入这个的时候-我没有故意问这个问题。原来的问题已经闲置了3年多,只有1/2的问题得到了回答,因此是时候重新提问了,希望得到完整的答案。我只是在发布这篇文章后不久碰巧找到了答案。根据游戏规则,这仍然是一个骗局。