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

Вниз

Добавление пунктов меню в MainMenu и PopupMenu   Найти похожие ветки 

 
Dmitry_04   (2005-02-10 18:42) [0]

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

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

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

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


 
Fay ©   (2005-02-10 19:25) [1]

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


 
Fay ©   (2005-02-10 19:25) [2]

В смысле

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


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

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

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

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


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

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


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

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 15:40) [6]

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


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

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


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

Работает :) А как мне добавить в помимо 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

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


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

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 20:31) [10]

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


 
begin...end ©   (2005-02-12 21:28) [11]

> Dmitry_04   (12.02.05 20:31) [10]

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


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

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


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

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


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

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


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

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


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

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


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

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


 
Stilgar ©   (2005-02-14 20:09) [18]

Имени нету. Его можно присвоить при создании, и потом через него работать, но это будет во всех отношениях хуже.
Надо сохранять адрес.
При создании:
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;

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



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

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

Наверх




Память: 0.5 MB
Время: 0.058 c
1-1108299320
Кирилл
2005-02-13 15:55
2005.02.27
файл


1-1108224281
TeNY
2005-02-12 19:04
2005.02.27
как правильно использовать функцию EnumResourceNames


1-1108379633
Kullibin
2005-02-14 14:13
2005.02.27
Работа с ресурсом


1-1108379294
Kat
2005-02-14 14:08
2005.02.27
Два пользователя работают одновременно.


14-1107530105
Pat
2005-02-04 18:15
2005.02.27
Колонтитулы в Excel е