Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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: // --/-- С
...




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.026 c
1-22208           Nikos77               2001-12-15 18:34  2002.01.08  
Подскажете как сделать форматирование


1-22081           Andrewv               2001-12-18 14:14  2002.01.08  
Как вызвать системную ошибку.


3-21984           Mr. Andrew            2001-12-05 20:39  2002.01.08  
Обновление данных


3-21953           VariK                 2001-12-05 15:14  2002.01.08  
Про Записи


3-21957           KMM                   2001-11-29 15:31  2002.01.08  
В процессе работы программы приходится многажды создавать и удалять таблицу ...