@White_Bambie

Каким образом сохранить пункты PopupMenu в INI?

Доброго времени суток!
Имеется форма, на форме MainMenu с items("сохранить форму" и "загрузить форму"), Edit и Button. К Edit привязан PopupMenu.
При нажатии на Button добавляется пункт в PopupMenu.
procedure TfMain.ButtonClick(Sender: TObject);
var
newitem: TMenuItem;
begin
newitem:= TMenuItem.Create(TfMain.PopupMenu);
newitem.Caption:= '1';
newitem.OnClick:= ClickItem; //ClickItem - какая-то процедура
TfMain.PopupMenu.Items.Add(newitem);
end;

При нажатии на "сохранить форму" происходит следующее:
Ini:= TIniFile.Create(ExtractFilePath(ParamStr(0))+'Set.ini');
//и вот тут начинается проблема...
//Ini.Write(???)('Настройки','Список пунктов',TfMain.PopupMenu.Items);
Ini.Free;

-
Что нужно прописать в процедуре сохранения формы, чтобы пункты PopupMenu сохранялись в INI?
По сути PopupMenu.Items - МЕНЮ, то есть содержит в себе несколько объектов, которые включают в себя Caption и еще ряд параметров, в том числе и событие OnClick.
-
С надеждой жду вашей помощи!
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 1
@zedxxx
Вам надо руками, для каждого пункта меню, записать его свойства в ini:

for i := 0 to TfMain.PopupMenu.Items.Count - 1 do begin
  ini.WriteString('Настройки', 'Пункт_' + IntToStr(i) + '_Caption', TfMain.PopupMenu.Items[i].Caption);
  ... // и так далее, для всех остальных параметров, которые надо сохранить
end;

Что касается события OnClick, то тут есть 2 варианта:

1. (плохой) каждому событию присвоить/сопоставить какой-то ID (число) и записать его как Integer, таким образом при считывании параметров из ini вы будете знать, какую функцию использовать

2. (хороший) для всех пунктов меню использовать одно событие OnClick, а каждому пункту меню в свойство Tag записать своё уникальное значение, по которому вы будете различать, по какому конкретно пункту кликнул пользователь и выполнять то или иное действие. Соответственно, и в ini надо будет записывать значение Tag.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы