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