Как читать и записывать Delphi 2010 RibbonApplicationMenuBar Недавние элементы из / в файл Part2

Этот вопрос ранее задавался около 3 лет назад, но ответили только наполовину.

Оригинальный вопрос здесь: как читать и записывать Delphi 2010 RibbonApplicationMenuBar Недавние элементы в файл и принятый ответ дает достаточно информации, чтобы вы могли понять, как сохранить список 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

Проблема заключается в перезагрузке списка RecentItems RibbonApplicationMenuBar. Мой код "работает" в том, что элементы перечислены в недавно использованном разделе приложения, но в отличие от "настоящих" элементов mru они не реагируют на событие click. Любые новые элементы, добавленные в список mru, работают, но не мои "имплантаты". Похоже, я перезагружаю подписи, но не информацию о файле. Вот мой код, функция, которая вызывается событием FormCreate формы, содержащей RibbonApplicationMenuBar.

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 для этого проекта.

Спасибо..

1 ответ

Решение

Пока я проверял свой пост на наличие опечаток, я думал о чем-то, что оказалось решением. Вот ответ...

Мне нужно было загрузить данные вместо этого в подкомпонент ленты1. Похоже, что сейчас работает нормально.

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() и другая обработка ошибок, но сейчас мне нужно было, чтобы это работало.

Другие вопросы по тегам