Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обход в цикле элементов (Edit1, Edit2, Edit3 и т.д.)одного класса [D6, WinXP]


Страницы:   1 2

Евгений11111 ©   (2009-12-22 13:12:00) 

Добрый день.
Подскажите, пожалуйста, можно ли пробежать в цикле по элементам одного класса (Edit1, ..., Edit10)?
Например так
for i:=1 to 10 do
Edit(i).Text:=IntToStr(i);


Anatoly Podgoretsky   (2009-12-23 12:12:00) [1]

> Ega23  (23.12.2009 08:09:27)  [27]

А тебя бы не удивила гигантская утечка, если бы это не было сделано. Чем тебя не устраивает удаление по Controls, а не Components, в котором может не быть всех контролов на форме?


Ega23   (2009-12-23 08:09:00) [2]


> Anatoly Podgoretsky ©   (22.12.09 20:57) [23]
> Германн ©   (23.12.09 01:29) [25]
> Джо ©   (23.12.09 04:10) [26]


Гхм... Хотел сказать одно, а ляпнул другое. Сорри.

destructor TWinControl.Destroy;
var
 I: Integer;
 Instance: TControl;
begin
 Destroying;

 ........

 I := ControlCount;
 while I <> 0 do
 begin
   Instance := Controls[I - 1];
   Remove(Instance);
   Instance.Destroy;
   I := ControlCount;
 end;


Просто вот это в своё время крайне неприятно удивило.


Джо   (2009-12-23 04:10:00) [3]


> Ega23 ©   (22.12.09 20:22) [20]
> Просто мне крайне не нравится то, что если я создам
> контрол без Owner и назначу ему Parent - ему и Owner тоже
> назначится.


procedure TForm1.Button1Click(Sender: TObject);
var
 Ctrl: TControl;
begin
 Ctrl := TControl.Create(nil);
 Ctrl.Parent := Self;
 if Ctrl.Owner <> nil then
   ShowMessage ('Хм')
end;


Германн   (2009-12-23 01:29:00) [4]


> Anatoly Podgoretsky ©   (22.12.09 20:57) [23]
>
> > Ega23  (22.12.2009 20:22:20)  [20]
>
> Owner ему не назначается.
>

Я тоже удивился ответу Ёжки. Наверно он что-то не договаривает.


Плохиш   (2009-12-22 21:21:00) [5]


> Aleks   (22.12.09 20:31) [21]

О, что это?


Anatoly Podgoretsky   (2009-12-22 20:57:00) [6]

> Ega23  (22.12.2009 20:22:20)  [20]

Owner ему не назначается.


Ega23   (2009-12-22 20:41:00) [7]


> Aleks   (22.12.09 20:31) [21]


Какой ужас....


Aleks   (2009-12-22 20:31:00) [8]

var
A: array [1..MaxEditCount] of TEdit;
Begin
if(Form1.ActiveControl is TEdit) then
Edit21.Text:=(Form1.ActiveControl as TEdit).Text;
End;


Ega23   (2009-12-22 20:22:00) [9]


> Это я оперировал Parent-ом, а ты оперировал Owner-ом.


Я в курсе. Просто мне крайне не нравится то, что если я создам контрол без Owner и назначу ему Parent - ему и Owner тоже назначится.


Anatoly Podgoretsky   (2009-12-22 20:04:00) [10]

> Ega23  (22.12.2009 19:55:18)  [18]

Это я оперировал Parent-ом, а ты оперировал Owner-ом.


Ega23   (2009-12-22 19:55:00) [11]


> Почему неправильно?


Ну потому, что я Owner-а "не заказывал", оперировал только Parent-ом.


Anatoly Podgoretsky   (2009-12-22 19:06:00) [12]

> Ega23  (22.12.2009 18:45:16)  [16]

Почему неправильно?
Вот наоборот точно будет неправильно.


Ega23   (2009-12-22 18:45:00) [13]


> Anatoly Podgoretsky ©   (22.12.09 17:56) [14]


И это (на мой взгляд) неправильно.


Григорьев Антон   (2009-12-22 18:04:00) [14]

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=71458


Anatoly Podgoretsky   (2009-12-22 17:56:00) [15]

begin
 for i := 1 to 10 do
   TEdit.Create(nil).Parent := Self;
 ShowMessage("Прощай, Мемлик!");
end;


Ega23   (2009-12-22 16:38:00) [16]


> да есть, я точно видел.


procedure TForm1.CreateNewTimer(aOwner : TComponent; Iteration : Integer);
var
 tmr : TTimer;
begin
 if (Iteration >= 10) then Exit;
 if not Assigned(aOwner) then
   tmr := TTimer.Create(Self)
 else
   tmr := TTimer.Create(aOwner);
 CreateNewTimer(tmr, Iteration + 1);
end;

procedure TForm1.FormCreate(Sender : TObject);
begin
 CreateNewTimer(nil, 0);  
end;


AntonioBanderas   (2009-12-22 16:26:00) [17]


> Евгений11111   (22.12.09 13:12) 


if (controls[i] is TEdit) then TEdit(controls[i]).любое_поле&метод


Ega23   (2009-12-22 15:19:00) [18]


> Они находятся в одном из контейнеров Controls, вот по нему
> и делать иттерацию


begin
 for i := 1 to 10 do
   TEdit.Create(nil);
 ShowMessage("Превед, Мемлик!");
end;


Kyn66   (2009-12-22 13:54:00) [19]

Пардонс, скобка лишняя

for i := 1 to 10 do
 TEdit(FindComponent('Edit' + IntToStr(i)).Text) := IntToStr(i);


Kyn66   (2009-12-22 13:51:00) [20]

Если количество явно указано, то можно через FindComponent

 for i := 1 to 10 do
  TEdit(FindComponent('Edit' + IntToStr(i)).Text]) := IntToStr(i);


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо