Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.032 c
6-1186665472
r.o.o.t
2007-08-09 17:17
2008.05.18
Как правельно обрабоать обрыв свзяи в TServerSocket


15-1207111990
nnn
2008-04-02 08:53
2008.05.18
CMS


15-1207247542
kaif
2008-04-03 22:32
2008.05.18
Как в PHP4 сохранить текст HTTP-запроса в файл?


15-1207295964
Kolan
2008-04-04 11:59
2008.05.18
Посоветуйте IDE для руби.


8-1179987008
NewZ
2007-05-24 10:10
2008.05.18
Формат *.wav файла. Как разрезать *.wav файл?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский