Home
Top.Mail.Ru Yandeks.Metrika
Forum: "Main";
Current archive: 2002.01.08;
Download: [xml.tar.bz2];

Down

Determine the menu item number Find similar branches


T2   (2001-12-16 07:29) [0]

Программно создаю меню. Впихиваю в popup меню названия имеющихся дисков (заранее неизвестно сколько их). Как узнать какой пункт меню был выбран, желательно в одной процедуре обработки?



KilkennyCat   (2001-12-16 08:02) [1]

I do this:

создаю процедуру обработки, на которую переправляю клики со всех пунктов. типа:

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]

um ... in my opinion, it is necessary to create NewItem.Name (for example, a)



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: // --/-- С
.



Pages: 1 whole branch

Forum: "Main";
Current archive: 2002.01.08;
Download: [xml.tar.bz2];

Top









Memory: 0.83 MB
Time: 0.039 c
1-22182
Wave
2001-12-20 18:11
2002.01.08
Chart -> JPEG


1-22067
DNT
2001-12-15 16:20
2002.01.08
Dialog & dll


7-22437
paradox
2001-09-25 18:48
2002.01.08
wav


1-22176
Serg5
2001-12-20 14:57
2002.01.08
Again, the problem with the text: I display Image1.Canvas.TextOut, but under the text itself is a white runner. Is it possible if you do not remove (just put the letters), then at least make the runner black.


1-22226
Diet
2001-12-15 13:06
2002.01.08
Why doesn't this simple code work ...





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 Español 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
English French German Italian Portuguese Russian Spanish