Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавление пунктов меню в MainMenu и PopupMenu [D7, WinXP]


Dmitry_04 ©   (2005-02-10 18:42:00) 

Мне нужно добавить пункты меню в MainMenu и PopupMenu... Я делаю вот как:

N1.Add(NewItem('...', 0, false, true, N1Click, 0, 'N2'));

N1 - пункт меню, в который надо добавить новые...(там уже есть несколько) :) А событие у всех одно и тоже...

А вот как бы мне сделать так, чтобы определить новым пунктам еще GroupIndex, AutoCheck и RadioItem?


Stilgar   (2005-02-14 20:09:00) [1]

Имени нету. Его можно присвоить при создании, и потом через него работать, но это будет во всех отношениях хуже.
Надо сохранять адрес.
При создании:
Item:=TMenuItem.Create(Self);
with Item do
begin
Caption:='qwe';
GroupIndex:=2;
end;
N3331.Tag := Integer(Item); //присваиваем адрес нового пункта меню
N1.Add(Item);

Тут уже упоминавшийся N3331 - это пункт главного меню, который соответствует создаваемому пункту всплывающего меню.

Потом можно присваивать состояние (checked/unchecked) так:
procedure TForm1.N3331Click(Sender: TObject);// MainMenu
begin
TMenuItem(N3331.Tag).Checked{PopupMenu }:= N3331.Checked// MainMenu
end;

Может тут не все идеально, но главное понимание идеи.


Dmitry_04   (2005-02-13 20:46:00) [2]

Как мне хотябы имя MenuItem-а определить?


Dmitry_04   (2005-02-13 16:23:00) [3]

Этого никак нельзя сделать???


Dmitry_04   (2005-02-13 15:51:00) [4]

а ведь при создании MenuItem-а мы не знаем его названия... т.е. мы не знаем N881 там или еще что...


grom   (2005-02-13 15:19:00) [5]

procedure TForm1.N3331Click(Sender: TObject);// MainMenu
begin
N881.Checked{PopupMenu }:= N3331.Checked// MainMenu
end;


Dmitry_04   (2005-02-13 15:09:00) [6]

Что делать то?


Dmitry_04   (2005-02-13 12:24:00) [7]

Получилось... Но теперь еще одна проблема... Как мне сделать, чтобы при нажатии в MainMenu на один из этих пунктов в PopupMenu он тоже становился Checked ?


begin...end   (2005-02-12 21:28:00) [8]

> Dmitry_04   (12.02.05 20:31) [10]

Если нужно добавить в PopupMenu пункт первого уровня, т.е. такой, который будет виден сразу после вызова PopupMenu - используйте пример [9] (вторая часть). А если нужно добавить подпункт для какого-нибудь пункта PopupMenu - используйте пример [9] (первая часть), где N1 - пункт, для которого нужно добавить подпункт. Ошибка, о которой Вы говорили в [8], может возникать потому, что пункта с именем N1 просто нет.


Dmitry_04   (2005-02-12 20:31:00) [9]

Я тоже так думал сделать... Но это правильно?


grom   (2005-02-12 19:51:00) [10]

Item:=TMenuItem.Create(Self);
with Item do
 begin
 Caption:='qwe';
 GroupIndex:=2;
 end;
N1.Add(Item);

Item:=TMenuItem.Create(Self);
with Item do
 begin
 Caption:='qwe';
 GroupIndex:=2;
 end;
PopupMenu1.Items.Add(Item);


Dmitry_04   (2005-02-12 19:22:00) [11]

Работает :) А как мне добавить в помимо MainMenu в PopupMenu пункт? Делаю я так:

var Item:TMenuItem;
...
repeat
Item:=TMenuItem.Create(Self);
with Item do
 begin
 Caption:='qwe';
 GroupIndex:=2;
 end;
N1.Add(Item);
PopupMenu1.Items.Add(Item);
until

Возникает ошибка...


Александр Иванов   (2005-02-11 15:44:00) [12]

Dmitry_04   (11.02.05 15:40) [6]
Твоя программа, тебе лучше знать :).


Dmitry_04   (2005-02-11 15:40:00) [13]

а ошибки не будет возникать? Я просто сейчас на работе и проверить не могу...


Александр Иванов   (2005-02-11 14:36:00) [14]

var Item:TMenuItem;
...
repeat
Item:=TMenuItem.Create(Self);
with Item do
  begin
  Caption:='qwe';
  GroupIndex:=2;
  end;
N1.Add(Item);
until


Dmitry_04   (2005-02-11 14:29:00) [15]

Неужели нет такого способа? :(


Dmitry_04   (2005-02-10 23:53:00) [16]

а мне надо неопределенное колличество пунктов меню добавить... сделал этот пример в цикле выдает ошибку... попробовал сделать чуть похитрее:

repeat
 begin
 with TMenuItem.Create(Self) do
   begin
   Caption:='qwe';
   GroupIndex:=2;
   end;
 N1.Add(???);
 end;
until
...

Но теперь возник вопрос, как это добавлять теперь?
N1.Add(???); что здесь писать непонятно...


Fay   (2005-02-10 19:25:00) [17]

var
 MenuItem : TMenuItem;
begin
 MenuItem := TMenuItem.Create(Self);
 MenuItem.Caption := 'qwe';
 MenuItem.GroupIndex := 2;
 Next1.Add(MenuItem);


Fay   (2005-02-10 19:25:00) [18]

В смысле

var
 MenuItem : TMenuItem;
begin
 MenuItem := TMenuItem.Create(Self);
 MenuItem.Caption := 'qwe';
 MenuItem.GroupIndex := 2;
  N1.Add(MenuItem);


Наверх

Титульная страница Поиск, карта сайта Написать письмо