Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
1-22189
bestix
2001-12-14 19:54
2002.01.08
Метафайлы


7-22453
Juri
2001-09-21 18:26
2002.01.08
RS485


1-22217
greenrul
2001-12-16 02:13
2002.01.08
TreeView - парочка вопросов


1-22045
Socol
2001-12-15 17:14
2002.01.08
Запись в файл.


14-22408
fliz
2001-11-08 15:24
2002.01.08
это что, баг в Дельфи ?! :((





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский