Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.21;
Скачать: CL | DM;

Вниз

Обход в цикле элементов (Edit1, Edit2, Edit3 и т.д.)одного класса   Найти похожие ветки 

 
Евгений11111   (2009-12-22 13:12) [0]

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


 
Медвежонок Пятачок ©   (2009-12-22 13:13) [1]

ты же уже знаешь, что например так как написал пробежать нельзя.


 
Евгений11111   (2009-12-22 13:16) [2]

Поэтому и спрашиваю как можно (а наверняка можно).


 
Медвежонок Пятачок ©   (2009-12-22 13:17) [3]

Поэтому и спрашиваю как можно

нет, ты спросил другое


 
Германн ©   (2009-12-22 13:19) [4]

http://delphimaster.net/view/2-1261220565/


 
Медвежонок Пятачок ©   (2009-12-22 13:19) [5]

у эдитов есть какой-то оунер. у оунера есть массив Components и Controls.
вот по нему и бегай


 
Германн ©   (2009-12-22 13:20) [6]


> Медвежонок Пятачок ©   (22.12.09 13:19) [5]


> у оунера есть массив Controls

Не обманывай :)


 
Медвежонок Пятачок ©   (2009-12-22 13:23) [7]

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


 
Anatoly Podgoretsky ©   (2009-12-22 13:23) [8]

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


 
Kyn66 ©   (2009-12-22 13:51) [9]

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

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


 
Kyn66 ©   (2009-12-22 13:54) [10]

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

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


 
Ega23 ©   (2009-12-22 15:19) [11]


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


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


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


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


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


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


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


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;


 
Anatoly Podgoretsky ©   (2009-12-22 17:56) [14]

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


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

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


 
Ega23 ©   (2009-12-22 18:45) [16]


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


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


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

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

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


 
Ega23 ©   (2009-12-22 19:55) [18]


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


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


 
Anatoly Podgoretsky ©   (2009-12-22 20:04) [19]

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

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


 
Ega23 ©   (2009-12-22 20:22) [20]


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


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


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

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:41) [22]


> Aleks   (22.12.09 20:31) [21]


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


 
Anatoly Podgoretsky ©   (2009-12-22 20:57) [23]

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

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


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


> Aleks   (22.12.09 20:31) [21]

О, что это?


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


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

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


 
Джо ©   (2009-12-23 04:10) [26]


> 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;



 
Ega23 ©   (2009-12-23 08:09) [27]


> 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;


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


 
Anatoly Podgoretsky ©   (2009-12-23 12:12) [28]

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

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



Страницы: 1 вся ветка

Текущий архив: 2010.02.21;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.02 c
2-1261117696
maximkok
2009-12-18 09:28
2010.02.21
Как применить тему xp(.theme) без предупреждения?


9-1183470560
THandle
2007-07-03 17:49
2010.02.21
DirectX


15-1257309727
xayam
2009-11-04 07:42
2010.02.21
Старые архивы для DMSearch на www.delphimaster.net


15-1260546289
test
2009-12-11 18:44
2010.02.21
Форум и вопросы


2-1260189361
Б
2009-12-07 15:36
2010.02.21
Окно по центру экрана.