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

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

Операции с данными в ячейках StringGrid'а [D7, XP]


adept ©   (2012-11-27 23:18:00) 

Всем доброго времени суток !
Столкнулся с проблемой и не могу понять почему не работает

procedure TForm1.Timer1Timer(Sender: TObject);
var
Nac,dh,dh1,dh2,dh3,dh4,dh5,dh6,dh7: string;
//strc прописана глобально как интегер, переменной присваивается значение 1 при создании формы
begin
   Nac:=StringGrid1.Cells[0,strc];  //присваеваем переменной начинку первой строки
   dh1:=StringGrid1.Cells[0,strc][1]; // присваивание переменной значения 1-го символа с проверяемой ячейки
   dh2:=StringGrid1.Cells[0,strc][2]; // присваивание переменной значения 2-го символа с проверяемой ячейки
   dh3:=StringGrid1.Cells[0,strc][3];  //и т.д.
   dh4:=StringGrid1.Cells[0,strc][4];
   dh5:=StringGrid1.Cells[0,strc][5];
   dh6:=StringGrid1.Cells[0,strc][6];
   dh7:=StringGrid1.Cells[0,strc][7];
   dh:=dh1 + dh2 + dh3 + dh4 + dh5 + dh6 + dh7;  //обьеденяем значения воедино
   showmessage(dh);                         //смотрим че вышло
       if Nac='' Then strc:=1 else              // если начинка пустая - просто переводим счётчик на начало
           begin                                //если начинка чем-то заполнена - то работаем дальше
               if dh='0д. 0ч.'  then            //проверятеся столбик СтрингГрида, в котором происходит обратный отсчёт
                   begin                        //если до выполнения задачи осталось 0 дней и 0 часов  - проверяем минуты и выдаём сообщение (последнее пока не надо, тут первое не пашет ))))
                       showmessage('0д. 0ч.');  //если нашло - показало что нашло (работает)
                       strc:=strc + 1;          //переход на след строку
                   end
               else
                   begin
                       strc:=strc + 1;
                   end;
           end;
end;


при первом "прохождении круга" всё прекрасно работает и всё показывает, однако при переходе "на второй круг" вылетает ошибка:
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 004756DF in module 'Project1.exe'. Read of address 00000000'. Process stopped. Use Step or Run to contineu.

И выделяется строка:
dh1:=StringGrid1.Cells[0,strc][1]

Уж не осудите если что не так, новичек я тут :)


O'ShinW   (2012-11-28 09:11:00) [1]

Время запуска задания надо хранить как время, а не как строки в стринггриде.

ветер - причина
Качания деревьев
не наоборот


Германн   (2012-11-28 01:38:00) [2]


> adept ©   (27.11.12 23:45) [3]
>
> гм... проблема была не в этом, а в том, что присваивание
> символов надо было начинать после проверки, что символы
> вообще есть, а не то неё.....

Проблема была скорее всего именно в "этом".


adept   (2012-11-27 23:45:00) [3]

гм... проблема была не в этом, а в том, что присваивание символов надо было начинать после проверки, что символы вообще есть, а не то неё.....


adept   (2012-11-27 23:42:00) [4]


> надо посмотреть, чему в момент ошибки равно strc и не превышает
> ли оно число строк - 1 в гриде

Спасибо!!!
вставил строку:
showmessage(IntToStr(strc));
перед проблемной строкой, оказывается оно дальше копает вместо того чтобы по кругу пойти!
Естественно находит пустую ячейку и в то время как пытается взять первый символ пустой ячейки - вылетает.

Все гениальное просто... )

еще раз спасибо !!


Игорь Шевченко   (2012-11-27 23:36:00) [5]

надо посмотреть, чему в момент ошибки равно strc и не превышает ли оно число строк - 1 в гриде


Наверх

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