Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

Добавление пунктов меню в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
4-1105977134
Cosinus
2005-01-17 18:52
2005.02.27
Не пойму... Что не так в этом коде?


8-1100157157
Shiza
2004-11-11 10:12
2005.02.27
Звук. Сколько килогерц в одной октаве?


14-1107366522
Narik
2005-02-02 20:48
2005.02.27
explorer.exe глючит!!!


14-1107432469
Ega23
2005-02-03 15:07
2005.02.27
Я плакал!


14-1107419422
Форумописатель
2005-02-03 11:30
2005.02.27
Код Форума





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский