vitaly_l писал(а):Вопрос: как сделать menu[1].free; ??????????? <=== (в таком виде выдаёт ошибку)
end;
Какую ошибку выдаёт? Во время компиляции или во время исполнения?
Вообще то нельзя так делать.
Возможно ошибка номер раз:
- Код: Выделить всё
SetLength(menu,2);
menu[1] := TMenuItem.Create(MainMenu);
Если пользуетесь dynamic arrays (зачем, кстати? Их не зря нету в стандарте языка, это вброс со стороны C/C++), так строго помните, что в таких массивах отсчет элементов слава богу ведется от нуля.
Скорее всего ошибка номер два
Вы передаете вот тут:
- Код: Выделить всё
MainMenu.Items[0].Add(menu[1]);
А следовательно, дальнейшее поведение указателя menu[1] зависит от списка-хозяина. В большинстве списков, связанных с визуальщиной, хозяин самостоятельно освобождает элемент списка. Ну, соответственно, сразу после того, как вы передали указатель в MainMenu, правила хорошего тона требуют забыть о нем, как о страшном сне. Использование этого указателя как либо иначе, чем MainMenu.Items[] должно рано или поздно приводить к трудновыяснимым ошибкам.
p/s. Вы заметили, что никто уже старается не обращать внимания на ваши вопросы, поскольку обсуждение обычно превращается в поток сознания?