Casa
Top.Mail.Ru Yandeks.Metrika
Fórum: "Principal";
Arquivo atual: 2002.01.08;
Download: [xml.tar.bz2];

Para baixo

Determinar o número do item de menu Encontre agências semelhantes


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

Programaticamente crie um menu. Eu empurro os nomes dos discos disponíveis para o menu popup (não se sabe com antecedência quantos são). Como descobrir qual item de menu foi selecionado, preferencialmente em um procedimento de processamento?



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

Eu faço isso:

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

procedure TForm1.popClick(Sender: TObject);
começar
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];
começar
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);
começar
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];
começar
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 filial inteira

Fórum: "Principal";
Arquivo atual: 2002.01.08;
Download: [xml.tar.bz2];

em cima









Memória: 0.83 MB
Hora: 0.036 c
1-22030
Andrey Senchenko
2001-12-18 12:49
2002.01.08
Form.OnCloseQuery - Como lidar?


7-22423
Alex_K_xelA
2001-09-21 18:55
2002.01.08
Lendo setores de um CD-ROM


14-22356
Denso
2001-11-06 20:00
2002.01.08
Interferência na programação .... DENTE DENTAL!


14-22379
Felix
2001-11-05 19:54
2002.01.08
Mostre-me - Ou talvez não? -Mostre que você diz!


14-22320
Alexandr
2001-11-14 14:13
2002.01.08
Wow





afrikaans albanês Arabic armênio azerbaijano basco belarusian Bulgarian catalão Chinês simplificado) Chinês tradicional) croata checo dinamarquês Dutch Inglês estoniano filipino Finnish French
Galego georgiano German grego crioulo haitiano hebraico hindi húngaro islandês Indonesian irlandês Italian Japanese Korean letão lituano macedónio Malay maltês Norwegian
persa polonês Portuguese romeno Russa sérvio Slovak esloveno espanhol swahili sueco tailandês turco ucraniano urdu vietnamita galês ídiche bengali bósnio
cebuano esperanto gujarati hausa hmong igbo javanês kannada khmer lao latino maori marata mongol Nepali punjabi somali tâmil telugu yoruba
zulu
Английский francês Alemão Italiano Португальский russo Espanhol