Форум: "Основная";
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];
ВнизОпределить номер пункта меню Найти похожие ветки
← →
T2 (2001-12-16 07:29) [0]Программно создаю меню. Впихиваю в popup меню названия имеющихся дисков (заранее неизвестно сколько их). Как узнать какой пункт меню был выбран, желательно в одной процедуре обработки?
← →
KilkennyCat (2001-12-16 08:02) [1]я делаю так:
создаю процедуру обработки, на которую переправляю клики со всех пунктов. типа:
procedure TForm1.popClick(Sender: TObject);
begin
if sender = b then showmessage("b"); //нажат пункт с именем b
if sender = a then showmessage("a"); //нажат пункт с именем а
end;
конечно, при большом количестве пунктов нужно индексироваться.
← →
T2 (2001-12-16 08:59) [2]Да, но имена "a" и "b" неизвестны до создания. Этих пунктов меню нет при
компиляции и при попытки сравнить sender=a выдается ошибка "Undeclared identifier: "a". Мож на коде будет нагляднее?
procedure TMain.pu2Popup(Sender: TObject);
var s:tstringlist;i:byte;NewItem: TMenuItem;f:int64;d:string[1];
begin
pu2.Items.Clear;s:=tstringlist.create;
si.GetDriveList(s);for i:=0 to s.Count-1 do begin
NewItem := TMenuItem.Create(Self);
d:=copy(uppercase(s.strings[i]),1,1);
f:=diskfree(ord(d[1])-64);If f=-1 then f:=0;
NewItem.Caption := "&"+d+": ("+Inttostr(f)+" байт)";
newitem.OnClick:=ddd;
imagelist1.getbitmap(0,newitem.Bitmap);
pu2.items.Add(NewItem);
end;s.free;
end;
procedure tmain.ddd(sender:tobject);
begin
if sender=c1 then showmessage("Disk < C > select"); // Так ?
end;
Все верно?
← →
KilkennyCat (2001-12-16 09:07) [3]гм... по-моему, надо создать и NewItem.Name (например, а)
← →
Anatoly Podgoretsky (2001-12-16 10:11) [4]У тебя NewItem.Caption вторая буква имя диска, этого достаточно для идентификации
← →
Dmitriy(new) (2001-12-16 12:09) [5]procedure tmain.ddd(sender:tobject); var d:string[1];
begin
d:=copy(TMenuItem(sender).Caption,2,1);
showmessage("Disk <"+D+"> select");
// if sender=c1 then showmessage("Disk < C > select"); // Так ?
end;
← →
Петрович (2001-12-17 04:47) [6]А можно попробовать использовать свойство Tag!
← →
GennadyS (2001-12-17 08:45) [7]Я всегда в подобных случаях применял свойство TAG. И в зависимости от кол-ва пунктов точно знал на каком кликаешся. (для всех пунктов единая процедура обработки) В этой процедуре:
case (sender as TComponent).tag of
1: // обработка диска Б
2: // --/-- С
...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c