Форум: "Основная";
Текущий архив: 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