![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как назначить PopupMenu на один из пунктов MainMenu (Срочно!!!)
lipskiy © (2004-09-23 21:22:00)Есть PopupMenu, которое назначено на один из контролов формы. Необходимо, чтобы это же меню выпадало при выборе определенного пункта MainMenu. Создавать копию PopupMenu в MainMenu не хочется, хочется чтобы один и тот же объект был назначен как на контрол, так и на пункт MainMenu. Как это можно сделать?
Пытался при выборе пункта MainMenu сделать Insert всех строк PopupMenu, но вылетает эксепшен типа "меню вставлено дважды".
Помогите, плиз!
lipskiy (2004-09-24 00:18:00) [1]jack128 © (23.09.04 23:16) [7]
Спасибо!!! Все рулит теперь!
Гаврила (2004-09-24 00:08:00) [2]Если уж создавать пункты меню в ран тайм, не имеет смысл их прекидывать, лучше создать две копии, используя одну процедуру. Тогла менять придется всего в одном мемте
jack128 (2004-09-23 23:16:00) [3]lipskiy © (23.09.04 22:35) [6]
Хорошо, ясно, нужно создать пункты меню в рантайме и перекидывать их то туда то сюда...
Не обязательно в ран тайме.
Я имел в виду что то типа этого.
На форму кидаешь попап и майн меню. В попапе рисуешь свои итемы, а mainmenu создаешь только один пункт miFile/
И пишешь вот такой код.
procedure MoveItems(Source, Dest: TMenuItem);
var
i: Integer;
mi: TMenuItem;
begin
while Source.Count > 0 do
begin
mi := Source.Items[Source.Count - 1];
Source.Delete(Source.Count - 1);
Dest.Add(mi);
end;
end;
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
if PopupMenu1.Items.Count = 0 then
MoveItems(miFile, PopupMenu1.Items);
end;
procedure TForm1.miFileClick(Sender: TObject);
begin
if miFile.Count = 0 then
MoveItems(PopupMenu1.Items, miFile);
end;
lipskiy (2004-09-23 22:35:00) [4]Ну ясно же и так, что при выборе пункта MainMenu выпадать вложенные меню могут только из него. А так, чтобы выпадало просто где-то - так же никто не делает, это же не принято.
Хорошо, ясно, нужно создать пункты меню в рантайме и перекидывать их то туда то сюда...
panov (2004-09-23 21:57:00) [5]>lipskiy © (23.09.04 21:50) [4]
Полная ерунда. Меню не выпадает само, только после клика,
1. Цитирую вопрос:
Необходимо, чтобы это же менювыпадало при выборе определенного пункта MainMenu.
в [1] приведено необходимое решение.
2. У объекта не может быть 2 владельца одновременно.
Следовательно, без переноса TMenuItem из TPopupMenu в TMainMenu задача не решается.
lipskiy (2004-09-23 21:50:00) [6]
> PopupMenu.popup
Полная ерунда. Меню не выпадает само, только после клика, и стрелки на вызывающем меню нет, говорящей о том, что у этого меню есть подменю. Да еще и координаты всплытия самому вычислять надо.
> сначала нужно удалить элементы меню из Popup с помощью
> метода Remove, а потом уже вставлять в MainMenu
Но ведь меню создано статически. Если я его удалю в рантайме, то как мне снова его создать? Придется делать и динамическое создание?
> Назначьте разные. Должно помочь.
Разные - это две копии одного меню. Это я знаю. Но это решение мне не нравится. Я должен буду всегда помнить, что при модификации этого меню в будущем мне обязательно нужно будет делать это в двух местах. Это крайне неудобно и неправильно.
Fay (2004-09-23 21:37:00) [7]
> не хочется, хочется чтобы один и тот же объект был
> назначен как на контрол, так и на пункт MainMenu. Как
> это можно сделать?
Назначьте разные. Должно помочь.
jack128 (2004-09-23 21:33:00) [8]lipskiy © (23.09.04 21:22)
сначала нужно удалить элементы меню из Popup с помощью метода Remove, а потом уже вставлять в MainMenu
panov (2004-09-23 21:26:00) [9]>lipskiy © (23.09.04 21:22)
PopupMenu.popup