PDA

Просмотр полной версии : Узнать index динамического компонента.


NebesaBag
06.07.2013, 23:44
Здравствуйте, не знаю как можно получить индекс у динамически созданного подпункта в MainMenu.
begin
for i := 0 to ComboBox1.Items.Count - 1 do
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := ComboBox1.Items[i];
MainMenu1.Items[0].Items[0].Add(NewItem);
NewItem.onClick:=NclickM;
end;
end;
Создавал так подпункты.
Возникла необходимость брать капчи у этих подпунктов но не знаю как определить индекс компонента на котором клик был.

procedure TForm1.NClickM(Sender: TObject);
begin
showmessage(MainMenu1.Items[0].Items[0].Items[i].Caption);
end;
Вот какие действия необходимо проделать, чтобы получить индекс я не знаю.

VeTaL_UA
07.07.2013, 01:12
ибо надо было не так создавать ;)
begin
for i := 0 to ComboBox1.Items.Count - 1 do
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := ComboBox1.Items[i];
MainMenu1.Items[0].Items[0].Add(NewItem);
NewItem.Tag := i;
NewItem.onClick:=NclickM;
end;
end;
и так выводить:
procedure TForm1.NClickM(Sender: TObject);
begin
ShowMessage(IntToStr((Sender as TMenuItem).Tag));
end;
:)

NebesaBag
07.07.2013, 04:18
Благодарю.
Сделал так
showmessage
(MainMenu1.Items[0].Items[0].Items[(Sender as TMenuItem).Tag].Caption);
Подскажите почему при выводе текста нужного подменю подчеркивается снизу буква которая по счету равна индексу этого подменю?
Вот примерно если так идёт:
Текст
Текст
Текст
...

Добавлено через 1 час 49 минут
Что-то сразу не додумался, проблема была не велика и вполне решаема стринг реплэйсом)
procedure TForm1.NClickM(Sender: TObject);
var before,after:string;
begin
before:=MainMenu1.Items[0].Items[0].Items[(Sender as TMenuItem).Tag].Caption;
after:=StringReplace(before, '&', '',[rfReplaceAll, rfIgnoreCase]);
end;