Главная страница
    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.46 MB
Время: 0.008 c
1-22162
BFG
2001-12-19 20:41
2002.01.08
AVI


3-21933
pov
2001-11-26 12:19
2002.01.08
Подскажите самый простой способ регистрации BDE


6-22284
Delirium
2001-10-08 16:29
2002.01.08
Как послать сообщение сразу на все IP-адреса


1-22062
Alexander
2001-12-19 00:17
2002.01.08
Как мне к определённой (TDateTime) дате прибавить N дней?


3-21957
KMM
2001-11-29 15:31
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский