Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.01;
Скачать: CL | DM;

Вниз

Проблема работы с TMainMenu   Найти похожие ветки 

 
Volf_555   (2005-12-12 18:56) [0]

Есть MainMenu1. В нём есть несколько пунктов. Один из них называется "Тип".
Как мне работать с подпунктами "Тип" - то есть как удалять и добавлять новые значения?


 
umbra ©   (2005-12-12 19:05) [1]

динамически (во время работы программы) или во время написания программы?


 
Volf_555   (2005-12-12 19:07) [2]

динамически


 
umbra ©   (2005-12-12 19:17) [3]

см. справку по функциям NewItem и NewSubMenu


 
Volf_555   (2005-12-13 18:13) [4]

Пишу следующий код, который должен добавить пункты в главное меню:

procedure TForm1.Button1Click(Sender: TObject);
var
a:TMenuItem;
begin
a:=TMenuItem.Create(MainMenu1);
a.Caption:="Проверка";
MainMenu1.Items.Add(a);
a.Free;
end;


Но код не работает... Что я не так написал?!


 
umbra ©   (2005-12-13 18:26) [5]


> Что я не так написал?!
>

Вот это
a.Free;
Поскольку любой объект - это ссылка, то когда происходит  MainMenu1.Items.Add(a);, то содержимое объекта а не копируется. И в главное меню добавляется результат TMenuItem.Create(MainMenu1), а затем сразу же уничтожается. Уничтожать динамически созданные пункты меню надо только когда этот пункт уже не нужен


 
Volf_555   (2005-12-13 18:28) [6]

ЗЫ: Если запустить программу и несколько раз понажимать на кнопку, то можно заметить что новый пункт добавляется и сразу удаляется!

Как такое может быть?

Никакого дополнительного обработчика события я не писал!


 
Volf_555   (2005-12-13 18:29) [7]

Thank! Тогда всё ясно!


 
Volf_555   (2005-12-13 18:44) [8]

Пишу следующее (где w - это список строк TStringList):

a:=TMenuItem.Create(MainMenu1);

for e:=0 to w.Count-1 do
begin
 a.Clear;
 a.Caption:=w.Strings[e];
 MainMenu1.Items.Items[2].Items[e].Add(a);
end;


Выскакивает ошибка "Menu inserted twice" - Меню вставлено дважды.

Как мне в цикле изменить обработчик события, чтобы каждая строка последовательно добавилась в меню?

ЗЫ: добавляется только первая строка и потом выскакивает ошибка


 
Плохиш ©   (2005-12-13 18:59) [9]


> Volf_555   (13.12.05 18:44) [8]

Вот это

> a:=TMenuItem.Create(MainMenu1);

Надо перенести в тело цикла вместо a.Clear



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

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

Наверх




Память: 0.48 MB
Время: 0.181 c
14-1134040207
SergProger
2005-12-08 14:10
2006.01.01
Как в Pascal


14-1134316888
The Only
2005-12-11 19:01
2006.01.01
архив компонент


2-1134587924
SergP
2005-12-14 22:18
2006.01.01
Не работает sendmessage. подскажите в чем дело...


14-1133945351
Stilgar
2005-12-07 11:49
2006.01.01
Что вы думаете о конце света?


3-1131511953
IGray
2005-11-09 07:52
2006.01.01
Пересоздать повреждённые индексы (Paradox+TTable)