Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2010, 11:58   #1
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
Сообщение обращение к объектам по индексам

Есть необходимость обращения к существующим в делфи объектам по индексам.
Ну то есть чтобы так:
Код:
FormOpen[1].close
и т.д

Можно ли это сделать, без использования массива?
Zo0M вне форума Ответить с цитированием
Старый 24.02.2010, 12:43   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Один из способов примерно так :
Код:
var
  Comp: TComponent;
  Index:integer;
Begin
   Comp := FindComponent('CheckBox' + IntToStr(Index));
   TCheckBox(Comp).Checked := True;
end;
Суть я думаю ясна ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 24.02.2010, 13:10   #3
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Kotofff Посмотреть сообщение
Один из способов примерно так :
Суть я думаю ясна ...
Походу это не то.
Мне нужно создавать объекты в виде
Код:
MainForm[i]:=TForm.Create(self);
Либо, есть у кого-нибудь идея, как обращаться к одинаковым окнам (и не только окнам), которые создавались

Код:
MainForm:=TForm.Create(self);
Они создаются, но вот как их отличать?
Я пока использую MainForm.tag:=i а потом ищу по тагам, но похоже это неправильно...
Zo0M вне форума Ответить с цитированием
Старый 24.02.2010, 13:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
существующим в делфи объектам
Это невозможно. В Делфи нет объектов
Объекты есть в твоей программе, и обращение к ним по индексам зависит от той стратегии которую ты используешь.
Так что с либо ставь четко условие либо читай книги про TList и его потомков.
Цитата:
Они создаются, но вот как их отличать?
Код:
Screen.Forms
Даст тебе массив твоих форм-окон.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2010, 13:28   #5
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это невозможно. В Делфи нет объектов
Извиняюсь. Я имел ввиду компоненты. Для них есть решение?

Цитата:
Сообщение от Stilet Посмотреть сообщение
Так что с либо ставь четко условие либо читай книги про TList и его потомков.
Хорошо, спс прочту.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Даст тебе массив твоих форм-окон.
Лан, это потыкаю...
Zo0M вне форума Ответить с цитированием
Старый 24.02.2010, 13:46   #6
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Код:
var
  Form: TForm;
  I: integer;

procedure TForm1.NewFormCreate(Sender: TObject);
begin
  for I := 1 to 9 do
  begin
    Form := TForm.Create(Owner);
    with Form do
    begin
      Parent := self;
      Name := 'Form' + IntToStr(i + 1);
   end;
  end;
end;
Будет 10 форм, и к ним можно будет обращаться по имени Form2, Form3 и т.д.
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 24.02.2010, 13:54   #7
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Marsel737 Посмотреть сообщение
Код:
var
  Form: TForm;
  I: integer;

procedure TForm1.NewFormCreate(Sender: TObject);
begin
  for I := 1 to 9 do
  begin
    Form := TForm.Create(Owner);
    with Form do
    begin
      Parent := self;
      Name := 'Form' + IntToStr(i + 1);
   end;
  end;
end;
А обращаться к ним также в цикле ведь нормально нельзя?
Zo0M вне форума Ответить с цитированием
Старый 24.02.2010, 13:57   #8
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Код:
for i := 1 to 9 do
begin
  (FindComponent('Form' + IntToStr(i + 1) as TForm).Width := 100; // К примеру
end;
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 24.02.2010, 14:15   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

TForm как наследник TComponent имеет след св-ва
Omponents
Componentcount
как наследник TControl
Controls
Countcontrol

Код:
for j:=self.componentcouut-1  downto 0
  (self.components[j] as TMyComponent).Delete;

for j:=self.controlcount-1  downto 0
  (self.controls[j] as Tcontrol).visible:=false;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к объектам не зная объекта) Djem1991 Общие вопросы Delphi 5 02.01.2010 21:44
вопрос по объектам на паскале demonara Помощь студентам 7 09.09.2009 20:52
Построить массив q с индексам ij = i+j; если j – четное и i>3 НАСТЯ 18:) Помощь студентам 5 12.05.2009 22:56
С++ Интересный вопрос по объектам: Познающий Помощь студентам 12 11.05.2009 19:26
Обращение к объектам в процедуре. Maxs Помощь студентам 5 02.05.2009 12:54