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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
14-26789
KA-87
2003-05-23 22:30
2003.06.09
Работа с майлером...


1-26511
Rulya
2003-05-25 08:14
2003.06.09
Округление чисел


14-26712
chuvak
2003-05-21 14:52
2003.06.09
Подскажите где найти полный список хуков и их описаний


1-26492
Buka
2003-05-26 22:11
2003.06.09
ComboBox и FontDialog? Как заставить делать выбор из 2-го в 1-й?


7-26795
Sliski Slimak
2003-03-21 16:53
2003.06.09
Как же всё-таки получить звук с микрофона и вывести его ?