Вниз
Скачать: CL | DM;

Определить номер пункта меню   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
1-22218
MARcoDEN
2001-12-15 17:13
2002.01.08
Вопрос о функции DeleteFile


1-22106
Andrey196
2001-12-19 18:24
2002.01.08
Извените за ламерский вопрос как распечатать image


1-22194
Art
2001-12-15 09:28
2002.01.08
Просотой вопрос!


4-22463
Dmitry Alferev
2001-11-01 23:38
2002.01.08
FindResource не находит ресурс


7-22443
masik
2001-09-27 13:02
2002.01.08
PopUp menu Y2k




   Наверх