Главная страница
    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
1-26502
bloodman
2003-05-29 19:10
2003.06.09
регистрация горячих сочетаний клавиш.


1-26533
testthewest
2003-05-27 13:01
2003.06.09
RichEdit


14-26667
Шейкер
2003-05-23 13:52
2003.06.09
Шейкер-соритровка


1-26444
Frist_May
2003-05-29 09:34
2003.06.09
Десктоп...


1-26563
supersan
2003-05-28 12:21
2003.06.09
Excel+рулон+матричный принтер





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