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

Вниз

OnClick в MenuItem   Найти похожие ветки 

 
maxfiles   (2003-05-29 04:07) [0]

Есть такая штука "TMenuItem", так вот, я по мере выполнения программы вношу туда новые подпункты, однако я незнаю, как каждому новому добавленному подпункту присвоить OnClick (которые конечно должны несколько отличаться друг от друга :) ).

Вот пример создания:


for i:=0 to memo1.lines.count-1 do
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := memo1.lines[i];
popupMenu1.items.Add(NewItem);
end;



Очень был бы презнателен за помощь, особенно если примерчик подкините. Спасибо.


 
Babay   (2003-05-29 04:38) [1]

Обработчик OnClick у тебя должен быть один. его и назначаешь каждому новому пункту (ну можно несколько тогда по какомуто условию их назаначать пунктам). Назначение делаем так:

NewItem.OnClick:=MyOnClick;

В обработчике обрабатывай входящий параметр Sender.

Например

if TMenuItem(Sender).name= "чегото там" then

или

if TMenuItem(Sender).Tag = <какое то число> then

ну и т.д. вариантов множество. Просто нужно предусмотреть все варианты работы твоих пунктов. Ну а значение name или tag назначай во время создания пунктов что бы как то их различать.


 
maxfiles   (2003-05-29 06:30) [2]

Получается, но не до конца:

Срабатывает OnClick, однако не получается отловить от кого этот клик.

Вот новый код:


for i:=0 to memo1.lines.count-1 do
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := memo1.lines[i];
TMenuItem(Sender).name:=memo1.lines[i];
NewItem.OnClick:=MyOnClick;
popupMenu1.items.Add(NewItem);
end;

procedure TSDSBOX.MyOnClick(Sender: TObject);
begin
showmessage(inttostr(TMenuItem(Sender).tag)+" "+ TMenuItem(Sender).name);
end;


Выводит сообщение, "0" и все! Там нет имени, а tag постоянно имеет значение нуля. Может я что-то не допонял ?


 
Palladin   (2003-05-29 06:43) [3]

мда, а tag в самих пунктах у тебя разные?


 
maxfiles   (2003-05-29 06:54) [4]

Все! Я понял ошибку. Вот правильный код:




for i:=0 to memo1.lines.count-1 do
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := memo1.lines[i];
TMenuItem(Sender).name:=memo1.lines[i];
TMenuItem(NewItem).tag:=i;
TMenuItem(NewItem).name:=memo1.lines[i];
NewItem.OnClick:=MyOnClick;
popupMenu1.items.Add(NewItem);
end;

procedure TSDSBOX.MyOnClick(Sender: TObject);
begin
showmessage(inttostr(TMenuItem(Sender).tag)+" "+ TMenuItem(Sender).name);
end;




Спасибо за помощь :)



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

Форум: "Основная";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
3-26338
qwerty2
2003-05-20 11:50
2003.06.09
Странное поведение BDE


14-26665
Soft
2003-05-23 12:45
2003.06.09
Проблема узнавания


1-26505
pirat
2003-05-30 00:29
2003.06.09
Как из подручных элементов собрать текстовое меню


9-26327
Gayrus
2002-12-26 03:33
2003.06.09
OpenGL кажется глючит


14-26694
blackweber
2003-05-26 00:36
2003.06.09
как в Паскале 7.0 сложить PChar И Array of Char





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский