помогите с перебором компонентов
БЕСёныш
Дата: 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;
Но тут есть недостаток в том что по внутреннему циклу мы будем бегать несколько раз.