Главная страница
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.02 c
14-26710
Лис
2003-05-21 18:40
2003.06.09
Парни, объясните чайнику как в Дельфи добраться до прерываний!


1-26548
Пубертанец
2003-05-28 09:24
2003.06.09
Word и Delphi


14-26700
corte ™
2003-05-21 10:13
2003.06.09
Как отобразить в мемо поле обект БД процедуру


1-26432
fav
2003-05-29 00:24
2003.06.09
Из HTML в Базу


1-26485
sam-Lite
2003-05-29 09:04
2003.06.09
Как добраться до адреса с переменными какой-то пргоги.