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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2012, 21:08   #1
tomax83
 
Регистрация: 09.08.2011
Сообщений: 5
По умолчанию Как сумировать Edit-ы

Как сумировать Edit-ы , не по названию а только те например фон у которых зеленного цвета,
tomax83 вне форума Ответить с цитированием
Старый 02.05.2012, 23:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
for i:=0 to ControlsCount-1 do
 if (Controls[i] is TEdit)and(TEdit(Controls[i]).color=clgreen) then
  sum:=sum+StrToIntDef(TEdit(Controls[i].text,0);
Где sum - переменка аккумулятор
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.05.2012, 17:24   #3
tomax83
 
Регистрация: 09.08.2011
Сообщений: 5
По умолчанию

Если делаю глобальные переменные var i,sum,ControlsCount:integer; то

for i:=0 to ControlsCount -1 do
if (Controls[i] is TEdit)and(TEdit(Controls[i]).color=clGreen) then
sum:=sum+StrToIntDef(TEdit(Controls[i]).text,0);

Выдает ошибку Project1.exe raised exception class ElistError with messege 'List index out of bounds (5)'. Process stopped. Use Step or run to continue.

если локальные переменные var i,sum,ControlsCount:integer;
то результат получается 0
Где собака зарыта. Заране благодарен.
tomax83 вне форума Ответить с цитированием
Старый 03.05.2012, 17:36   #4
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Цитата:
Где собака зарыта.
Собака порылась в ControlsCount, а потому, что надо думать когда копируешь.
А вот подумайте и скажите, почему все-таки такая разница результата между глобальными и локальными?
=master= вне форума Ответить с цитированием
Старый 03.05.2012, 18:18   #5
tomax83
 
Регистрация: 09.08.2011
Сообщений: 5
По умолчанию

я новичёк так можно сказать без опыта подскажите пожалуйста, непонятноооо
tomax83 вне форума Ответить с цитированием
Старый 03.05.2012, 21:25   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Собака порылась в ControlsCoun
Писал с потолка, так что действительно мог ошибиться в имени свойства.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.05.2012, 21:38   #7
tomax83
 
Регистрация: 09.08.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от tomax83 Посмотреть сообщение
я новичёк так можно сказать без опыта подскажите пожалуйста, непонятноооо
Большое спасибо, думать конечно надо что копируешь, ну если нет опыта куда деваться. Разобрался. Респект Stilet и =master=.

ну а этот код кто не хочет думать а ищет ответ sum:=0;
Код:
for i:=1 to 4 do
 if (Controls[i] is TEdit)and(TEdit(Controls[i]).color=clGreen) then
   sum:=sum + StrToInt(TEdit(Controls[i]).text);
   Label1.Caption:=intToStr(sum);
4ка это количество Edit которые надо просмотреть

Если edit расположены на форме то работает а вот если edit расположены на вкладке TabSheet то опять ошибка Выдает ошибку Project1.exe raised exception class ElistError with messege 'List index out of bounds (1)'. Process stopped. Use Step or run to continue.

Последний раз редактировалось Stilet; 04.05.2012 в 08:04.
tomax83 вне форума Ответить с цитированием
Старый 04.05.2012, 08:07   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а вот если edit расположены на вкладке TabSheet то опять ошибка
Да может. Controls выдает только те кто расположен в контейнере, относительно которого Controls вызываются, но не вложенные.
Тебе нужно вместо Controls использовать доступ к списку компонентов в приложении через Components и ComponentCount. Схема та же.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.05.2012, 10:20   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а вот если edit расположены на вкладке TabSheet то опять ошибка
ну так надо контролы перебирать не на форме, на самом TabSheet

если не ошибаюсь, то это можно записать так:
Код:
for i:=0 to TabSheet1.ControlsCount-1 do
 if (TabSheet1.Controls[i] is TEdit) 
      and 
    (TEdit(TabSheet1.Controls[i]).color=clgreen) then
       sum:=sum + StrToInt(TEdit(TabSheet1.Controls[i]).text);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.05.2012, 10:24   #10
tomax83
 
Регистрация: 09.08.2011
Сообщений: 5
По умолчанию

Огромное спасибо и уважуха. Работает. Вы просто боги программирования.
tomax83 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сумировать ячейки с такими числами? Sprut1 Microsoft Office Excel 6 15.06.2011 08:33
Копирование строки из Edit в другой Edit. Ibanez Wizard Win Api 3 29.03.2011 02:46
Сумировать ячейки в диапазоне игнорируя даты Severny Microsoft Office Excel 12 23.02.2011 01:32
Сумировать поле в зависимости от выбраных на форме элементов полей dplz Microsoft Office Access 1 16.02.2010 19:29
Сумировать данные из нескольких файлов excel в 1 общий Miishka Microsoft Office Excel 8 12.11.2009 07:49