Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как обратиться к объекту по его имени?


Автор: ZLOvar 3.11.2010, 16:23
Здравствуйте, уважаемые форумчане. Не подскажите, как такое реализовать:
Код

var
 i : Ineteger;
 sObjName : String;
BEGIN
 For i := 1 to 10 do
  begin
   sObjName :='A' + IntToStr(i);
   // Теперь обращаемся к обьекту (при условии, что он существует) по имени sObjName
  end;
END.
 
Всем заранее спасибо.

Автор: casinosoftguru 3.11.2010, 16:38
например так
Код

var
i: integer;
btn: string;
begin
btn := 'Button1';
  for i  := 0 to Form1.ComponentCount - 1 do
     begin
      if Form1.Components[i].Name = btn then
       with Form1.Components[i] as TButton do Click;
      end;
  

Автор: ZLOvar 3.11.2010, 16:47
casinosoftguru, 
Спасибо, попробую, о результатах отпишусь.

Автор: ZLOvar 3.11.2010, 18:13
casinosoftguru, 
Да, это подходит, но можно ли это как-нибудь организовать без цикла?

Автор: Данкинг 3.11.2010, 20:36
Цитата(ZLOvar @  3.11.2010,  18:13 Найти цитируемый пост)
но можно ли это как-нибудь организовать без цикла? 

Нет, а как ты себе это представляешь? В цикле мы перебираем все компоненты формы и если находим нужный - с ним уже работаем.

Автор: Qu1nt 3.11.2010, 21:14
Код

TButton(FindComponent('Button1')).Click;

Автор: Данкинг 3.11.2010, 21:51
Qu1nt, о как. Запомним. smile 

Автор: ZLOvar 4.11.2010, 12:02
Qu1nt, 
То, что нужно! smile  Спасибо!  smile  +1

Автор: Matematik 4.11.2010, 12:45
Цитата(Qu1nt @  3.11.2010,  21:14 Найти цитируемый пост)
TButton(FindComponent('Button1')).Click;

Только надо не забывать, если такой кнопочки не будет или это будет некнопочка - мы получаем access violation at address
Код

bnt := FindComponent();
if Assigned(btn) and (btn is TButton) then
  (btn as TButton).Click();


---
Искренне ваш, К.О.

Автор: 1000000dollars 5.11.2010, 12:28
ну и ещё  одно дополнение: всё вышеперечисленное работает с объектами:
1) наследованными от TComponent;
2) размещёнными на форме.

В общем случае ответ на поставленный вопрос - никак.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)