![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание попап-меню [D7, WinXP]
Vitebsky © (2006-11-15 16:12:00)Есть компонент (строка ввода). Мне нужно добавить для него попап-меню. В смысле, в самом компоненте. Меню создать у меня получилось. Но первые два пункта мне нужно сделать с подменю, и тут возникают проблемы, т.е. программа выполнила невыполнимое и т.п.
Делаю я так:
// в описании переменных
FPopupMenu: TPopupNenu;
.....
// в конструкторе
TempItem: TMenuItem;
...
FPopupMenu:=TPopupMenu.Create(Self);
TempItem:=TMenuItem.Create(Self);
TempItem.Name:='значение';
TempItem.Caption:='значение';
FPopupMenu.Items.Add(TempItem);
// последние 4 строчки повторяются несколько раз
// для подменю
TempMenu: TPopupMenu;
TempMenu:=TPopupMenu.Create(Self);
TempItem:=TMenuItem.Create(Self);
TempItem.Name:='значение';
TempItem.Caption:='значение';
TempMenu.Items.Add(TempItem);
// последние 4 строчки повторяются несколько раз
// затем
FPopupMenu.Items.Add(TempMenu.Items);
// в деструкторе
FPopupMenu.Free;
вот... может, я что-то делаю не так?..
Vitebsky (2006-11-16 00:57:00) [1]А в чём разница? И такой метод плохо подходит, если мне нужно будет (а мне нужно будет) добавить пунктов во втором подменю. Хм...
Johnmen (2006-11-15 18:39:00) [2]Не надо использовать абсолютную индексацию пунктов меню.
Надо использовать относительную для каждого уровня меню. Индекс пункта в подменю определяется относительно родительского пункта меню. (Item.Items[x]))
FPopupMenu.Items.Add(TempItem1);
FPopupMenu.Items.Add(TempItem2);
TempItem1.Add(TempItem1_1);
TempItem1.Add(TempItem1_2);
TempItem1.Add(TempItem1_3);
TempItem2.Add(TempItem2_1);
TempItem2.Add(TempItem2_2);
Vitebsky (2006-11-15 17:52:00) [3]У меня подменю будет у двух первых пунктов. Если я правильно понял, нужно делать:
....
FPopupMenu.Items[0].Add(TempItem1);
FPopupMenu.Items[0].Add(TempItem2);
FPopupMenu.Items[0].Add(TempItem3);
...
FPopupMenu.Items[1].Add(TempItem1);
FPopupMenu.Items[1].Add(TempItem2);
так?
Johnmen (2006-11-15 17:40:00) [4]// для подменю
TempItem:=TMenuItem.Create(Self);
TempItem.Name:='значение';
TempItem.Caption:='значение';
TempMenu.Items.Add(TempItem);
...
TempItem2:=TMenuItem.Create(Self);
TempItem2.Name:='значение';
TempItem2.Caption:='значение';
TempItem.Add(TempItem2);
...
Т.е. добавлять подменю надо добавлением дочернего Item к существующему.