помогите с перебором компонентов

БЕСёныш
Дата: 17.06.2009 16:53:51
на форме есть:
SpinEdit1
SpinEdit2
.......
SpinEdit14

Как перебрать в цикле значения всех компонентов

for i:=1 to 14 do
str:=str+frmKolvo.SpinEdit[i].Value;

так конечно не работает, как прально вот так i записать?
Non-Grata
Дата: 17.06.2009 17:06:36
for i:=0 to frmKolvo.ComponentCount-1 do 
  if Components[i].ClassNameIs('TSpinEdit') then
    str:=str+(Components[i] as TSpinEdit).Value;

или можно создавать SpinEdit-ы динамически с занесением их в массив
Gwa
Дата: 17.06.2009 17:08:14
  ...

   Mas: array [1..14] of TSpinEdit;


В OnCreate формы:
   Mas[1]:=SpinEdit1; ... Mas[14]:=SpinEdit14;

Где-то там:
  for i:=1 to 14 do str:=str+frmKolvo.SpinEdit[i].Value;

Gwa
Дата: 17.06.2009 17:09:40
Sorry!!

Gwa
  ...

   Mas: array [1..14] of TSpinEdit;


В OnCreate формы:
   Mas[1]:=SpinEdit1; ... Mas[14]:=SpinEdit14;

Где-то там:
  for i:=1 to 14 do str:=str+Mas[i].Value;

БЕСёныш
Дата: 17.06.2009 17:21:30
GWA

ну я таким образом могу написать
str:=Edit1+Edit2+Edit3 и т.д.

а мне надо автоматически


for i:=0 to frmKolvo.ComponentCount-1 do
if Components[i].ClassNameIs('TSpinEdit') then
str:=str+(Components[i] as TSpinEdit).Value;

Он берёт не по очерёдности имени, а по очерёдности занесения компонента на форму.
мне надо брать Edit1 потом Edit2 и т.д.

а тут если я поставил первым на форму Edit2, то он и возьмёт str:=Edit2+Edit1
Gwa
Дата: 17.06.2009 17:26:39
Никакого автоматически быть не может!

Либо
честно складывает указавая компоненты по именам,
либо
обезличиваем их через массив,
либо
ищем их в массиве компонентов формы и сами заботимся об их порядке.
OracleLover
Дата: 17.06.2009 17:27:41
БЕСёныш
GWA

ну я таким образом могу написать
str:=Edit1+Edit2+Edit3 и т.д.

а мне надо автоматически


for i:=0 to frmKolvo.ComponentCount-1 do
if Components[i].ClassNameIs('TSpinEdit') then
str:=str+(Components[i] as TSpinEdit).Value;

Он берёт не по очерёдности имени, а по очерёдности занесения компонента на форму.
мне надо брать Edit1 потом Edit2 и т.д.

а тут если я поставил первым на форму Edit2, то он и возьмёт str:=Edit2+Edit1


сумма от перемены мест слагаемых не меняется (с) 2-ой класс, Елена Ильинична
Gwa
Дата: 17.06.2009 17:30:06
сумма от перемены мест слагаемых не меняется (с) 2-ой класс, Елена Ильинична

Здесь речь скорее об конкатенации!
OracleLover
Дата: 17.06.2009 17:34:40
Gwa
сумма от перемены мест слагаемых не меняется (с) 2-ой класс, Елена Ильинична

Здесь речь скорее об конкатенации!


мну спинедиты все екстендовые, не знаю есть ли строковые и на кой...
Бесёныш
Дата: 17.06.2009 17:41:54
Я в спинедитах запоминаю значения в строку, потом использую её.
Мне важен именно порядок, без порядка я и так могу сделать, поетому вот задал вопрос.

Что значит автоматически невозможно? а если у меня 50 спинедитов, я чтобы считать значения должен считывать значения каждого а не циклом?

Можно пойти конечно таким образом:

while WorkDone<>True do begin
for i:=0 to frmKolvo.ComponentCount-1 do begin
if (frmKolvo.Components[i] is TSpinEdit) then
begin
if (frmKolvo.Components[i] as TSpinEdit).Tag=Count then
str:=str+inttostr((frmKolvo.Components[i] as TSpinEdit).Value);
inc(Count);
Break;
end;
if Count=14 then WorkDone := True;
end;
end;

Но тут есть недостаток в том что по внутреннему циклу мы будем бегать несколько раз.