Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2012, 07:50   #1
pro5
 
Регистрация: 19.12.2012
Сообщений: 8
По умолчанию Delphi-7. Кого указывать владельцем MenuItem-а?

Вызывает вопрос 2 эти функции.
Код:
MI:=TMenuItem.Create(Self);
PopopMenu1.Items.Add(MI);
Зачем в конструкторе указывать владельца? В справке написано, для того, чтобы этот владелец следил за освобождением этого оьбекта. Вопрос, в каких случаях что передавать. В инете в примерах кто то передает Self (т.е. Form1), кто то PopupMenu, а кто вообще nil. Ничего не ясно. Так как же правильней. Еще запутывает то, что я потом через Add пункт меню добавляю в PopupMenu. В этом случае владелец меняется на PopupMenu? не зависимо, что было указано в create? Или одновременно и Form1 и PopupMenu может стать владельцем этого пункта меню?

Последний раз редактировалось pro5; 19.12.2012 в 08:16.
pro5 вне форума Ответить с цитированием
Старый 19.12.2012, 08:05   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Указывай владельцем форму, на которой непосредственно будет находиться TMainMenu
FaTaL вне форума Ответить с цитированием
Старый 19.12.2012, 08:37   #3
pro5
 
Регистрация: 19.12.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Указывай владельцем форму, на которой непосредственно будет находиться TMainMenu
А в этом случае форма когда удаляет эти пункты меню? Когда сама закрывается? Или когда я вызываю PopupMenu.Items.Clear ?
И тут опять вопрос, станет ли PopupMenu удалять из памяти эти подпункты(что мне и нужно), у которых владельцем при их создании была указана форма?
pro5 вне форума Ответить с цитированием
Старый 19.12.2012, 09:22   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
MI:=TMenuItem.Create(Self); 
PopopMenu1.Items.Add(MI);
MI:=TMenuItem.Create(Self); //создали объект сейчас про него знает только self (то бишь форма)
теперь при разрушении формы (Destroy) он будет уничтожен (разрушен).
Никакое меню про него знать не знает (и не будет показывать)

PopopMenu1.Items.Add(MI); // добавили к списку пунктов еще один
Теперь это меню его может показать при вызове

PopupMenu.Items.Clear // это очистка списка "показа" и только

Цитата:
станет ли PopupMenu удалять из памяти эти подпункты(что мне и нужно)
Только при своем разрушении (Free/Destroy/ но не clear) и в том случае если она является их собственником (задана как Owner при создании).

возможный вариант работы
1. один раз создаем все пункты

Код:
var itms: array[0..10] of TMenuItem;
//formCreate; 
for j:=0 to 10 do
  itms[j]:=TmenuItem.Create(self);
2. в разных случаях формируем свое меню
Код:
//show1 
popupX.Items.clear;
popupX.Items.add(itms[1]);
popupX.Items.add(itms[4]);

//show2
popupX.Items.clear;
popupX.Items.add(itms[7]);
popupX.Items.add(itms[1]);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.12.2012 в 09:36.
evg_m на форуме Ответить с цитированием
Старый 20.12.2012, 09:45   #5
pro5
 
Регистрация: 19.12.2012
Сообщений: 8
По умолчанию

evg_m, спасибо за ответ. Теперь все понятно.
Кстати, функция NewItem надо осторожно использовать, она создает пункт меню без Owner-а.
pro5 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi как указывать проценты Ekzamenator Помощь студентам 1 20.05.2011 19:31
Как правильно стать владельцем файла? Stilet Win Api 14 24.11.2009 21:21
Отключить событие OnClick у MenuItem с SubMenu Juni Компоненты Delphi 0 17.05.2009 12:17
Помогите найти компонент MenuItem muravey Помощь студентам 8 02.11.2007 17:06