Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: 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 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
2-1163700111
Ingwar
2006-11-16 21:01
2006.12.03
Как прервать цикл ожидания посылки (ComPort 3.1 от WinSoft a)


6-1152965383
ntsec
2006-07-15 16:09
2006.12.03
DCC


15-1163707107
oxffff
2006-11-16 22:58
2006.12.03
Какое будущее у языка Object Pascal?


4-1153208832
anton1209
2006-07-18 11:47
2006.12.03
Flow control в BCD


2-1163580077
DelphiLexx
2006-11-15 11:41
2006.12.03
Обмирает OddRowColor в DBGridEh e