Главная страница
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.47 MB
Время: 0.029 c
1-26526
Arch-vile
2003-05-24 11:22
2003.06.09
Сохранение шрифта в INI-файле


14-26738
Darthman
2003-05-21 12:06
2003.06.09
Rusty Lines


14-26656
vidiv
2003-04-10 10:07
2003.06.09
---|Ветка была без названия|---


1-26498
0utsider
2003-05-23 11:39
2003.06.09
ShellTreeView


1-26543
daos
2003-05-25 16:56
2003.06.09
Пмогите нарисовать двоичное дерево!!!!