Вниз
Скачать: CL | DM;

Динамическое создание попап-меню   Найти похожие ветки 

← →
Vitebsky   (2006-11-15 16:12) [0]

Есть компонент (строка ввода). Мне нужно добавить для него попап-меню. В смысле, в самом компоненте. Меню создать у меня получилось. Но первые два пункта мне нужно сделать с подменю, и тут возникают проблемы, т.е. программа выполнила невыполнимое и т.п.

Делаю я так:
// в описании переменных
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;

вот... может, я что-то делаю не так?..


← →
Johnmen ©   (2006-11-15 17:40) [1]

// для подменю
TempItem:=TMenuItem.Create(Self);
TempItem.Name:="значение";
TempItem.Caption:="значение";
TempMenu.Items.Add(TempItem);
...
TempItem2:=TMenuItem.Create(Self);
TempItem2.Name:="значение";
TempItem2.Caption:="значение";
TempItem.Add(TempItem2);
...

Т.е. добавлять подменю надо добавлением дочернего Item к существующему.


← →
Vitebsky   (2006-11-15 17:52) [2]

У меня подменю будет у двух первых пунктов. Если я правильно понял, нужно делать:

....
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 18:39) [3]

Не надо использовать абсолютную индексацию пунктов меню.
Надо использовать относительную для каждого уровня меню. Индекс пункта в подменю определяется относительно родительского пункта меню. (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-16 00:57) [4]

А в чём разница? И такой метод плохо подходит, если мне нужно будет (а мне нужно будет) добавить пунктов во втором подменю. Хм...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.029 c
11-1140002148
KingMidas
2006-02-15 14:15
2006.12.03
SQLLite


6-1153152312
cando
2006-07-17 20:05
2006.12.03
слежка за портом


15-1163590192
Click
2006-11-15 14:29
2006.12.03
Снова вопрос "организации алгоритма"


15-1163657049
race1
2006-11-16 09:04
2006.12.03
Много программ


2-1163862232
Vasiliy
2006-11-18 18:03
2006.12.03
Вывод на канву многострочного текста




   Наверх