![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определить номер пункта меню [D5, Win95/98]
T2 © (2001-12-16 07:29:00)Программно создаю меню. Впихиваю в popup меню названия имеющихся дисков (заранее неизвестно сколько их). Как узнать какой пункт меню был выбран, желательно в одной процедуре обработки?
GennadyS (2001-12-17 08:45:00) [1]Я всегда в подобных случаях применял свойство TAG. И в зависимости от кол-ва пунктов точно знал на каком кликаешся. (для всех пунктов единая процедура обработки) В этой процедуре:
case (sender as TComponent).tag of
1: // обработка диска Б
2: // --/-- С
...
Петрович (2001-12-17 04:47:00) [2]А можно попробовать использовать свойство Tag!
Dmitriy(new) (2001-12-16 12:09:00) [3]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;
Anatoly Podgoretsky (2001-12-16 10:11:00) [4]У тебя NewItem.Caption вторая буква имя диска, этого достаточно для идентификации
KilkennyCat (2001-12-16 09:07:00) [5]гм... по-моему, надо создать и NewItem.Name (например, а)
T2 (2001-12-16 08:59:00) [6]Да, но имена "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 08:02:00) [7]я делаю так:
создаю процедуру обработки, на которую переправляю клики со всех пунктов. типа:
procedure TForm1.popClick(Sender: TObject);
begin
if sender = b then showmessage("b"); //нажат пункт с именем b
if sender = a then showmessage("a"); //нажат пункт с именем а
end;
конечно, при большом количестве пунктов нужно индексироваться.