Форум: "KOL";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
ВнизДинамическое создание PopupMenu Найти похожие ветки
← →
Demt (2007-08-28 19:10) [0]Есть popup menu с submenu. Во время исполнения динамически в submenu добавляются элементы (количество не фиксированное). Как к этим элементам добавить своё submenu? (То есть получится три вложения).
Строка вида:PopupMenu1.Items[PopupMenu1.Items[SubItms].ItemSubmenu[0]].InsertSubMenu(P opupMenu2,0);
не работает. До этого создается гарантированно 2 элемента во вложении.
Что не понятно - спросите, писал второпях, без телепатора всё объясню :)
← →
Demt (2007-08-29 13:22) [1]Разобрался сам как, но после завершения программы - Runtime-error, если создавать в цикле c загрузкой заголовка из списка.
for i:= 0 to List.Count-1 do
begin
PMenuAccess(SubMenu).FCaption := List.Items[i];
PopupMenu1.Items[Sub1].InsertSubMenu(SubMenu,-1);
end;
"Одиночное" создание (без присваивания) работает без ошибок:
PMenuAccess(SubMenu).FCaption :="Заголовок";
PopupMenu1.Items[Sub1].InsertSubMenu(SubMenu,-1);
Почему так?
← →
Demt (2007-08-29 14:49) [2]Да, тип PMenuAccess:
type
PMenuAccess = ^TMenuAccess;
TMenuAccess = object(TMenu)
← →
Vladimir Kladov (2007-08-29 15:32) [3]Скорее всего, перед завершением надо так же и отсоединить, как присоединили. Иначе поп-меню пытается удалиться дважды - как дочернее по отношению к форме и как дочернее к тому меню, к которому оно присоединено. Потому и AV выскаивает на выходе.
← →
Demt (2007-08-29 16:06) [4]Так же, выпадает ошибка. Runtime Error 216.
for i:=0 to List.Count-1 do
begin
PopupMenu.Items[Sub1].RemoveSubMenu(i);
end;
Прописывал и в KOLFormDestroy и в KOLFormClose - безрезультатно.
← →
Demt (2007-08-29 16:11) [5]Тот же код добавлял в события на родительское меню, и субменю. Те же ошибки после завершения.
← →
Vladimir Kladov (2007-08-30 17:04) [6]Вы же можете назначить OnDestroy проблемному субменю, и посмотреть, где деструктор вызывается первый и где - второй раз? Можно еще USE_NAMES, присвоить имя ему, поставить брейк на деструктор TMenu, и ждать прихода сначала имени, а потом еще раз - такого же адреса. Просто посмотреть, откуда ноги растут.
← →
Demt (2007-09-01 19:01) [7]Ужас. Не думал, что всё так банально.
SubMenu.Free
в событииOnClose
формы.
И откуда только ноги не растут...
Проблема решена.
Владимир, большое спасибо за подсказки.
← →
Demt (2007-09-04 18:52) [8]Дополнительный вопрос.
Как узнать, какое cубменю выделено при нажатии пункта в SubMenu?
Приблизительная схема:
MainMenu ----> Sub1 ---> Sub1Menu
|
Sub2 ---> Sub2Menu
...
SubN ---> SubNMenu
При нажатии пункта в SubNMenu нужно, чтобы он возвращал номер SubN (номер пункта).
Что-то никак не пойму как это сделать, и какие обработчики обрабатывать.
← →
Vladimir Kladov (2007-09-04 19:02) [9]Что-то не дойду: ParentMenu ведь есть, до какого угодно родителя можно добраться, и получить все, что у него есть (Tag хотя бы).
← →
Demt (2007-09-04 20:19) [10]Так,а это возможно для динамического создаваемого меню и как реализовать доступ к меню из его суб-меню?
← →
Vladimir Kladov (2007-09-05 11:44) [11]fParentMenu == property Parent, я же сказал.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c