Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Access violation при использовании TStringGrid (Delphi 7)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

fokses

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сейчас пишу небольшую программулину на сабже и столкнулся со следующей проблемой
 

Код:
 
with StringGrid1 do
begin
   Cells[0,line]:=FormatFloat('0.00', delta); #Здесь ловлю EAccessViolation
   Cells[1,line]:=FormatFloat('00.00', S_pr);
   Cells[2,line]:=FormatFloat('0.0000', z_max-z_min);
   Cells[3,line]:=FormatFloat('0000.0000', Z_summa);
   RowCount := line+1;
end;
 

 
В отмеченной строке получаю следующую ошибку:
 

Цитата:
 
Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 00460645 in module 'Project2.exe'. Read of address 56EE8BD3' Process stoped.
 

 
Искал в поиске - ничего не нашел.  
Этот код вызывается в обработчике нажатия кнопки начала вычислений.  
В TStringGrid выводится результат вычислений.
Переменные delta, S_pr, z_max, z_min, Z_summa есть переменные типа Float.
Переменная line имеет тип Integer и в момент AccessViolation имеет значение 1.
TStringGrid расположен на форме, так что его конструктор в момент выполнения кода уже вызван.
В принципе, код приложения довольно мал, так что желающим могу выслать сорцы, если приведенной информации окажется мало.  
Заранее благодарен за помощь

Всего записей: 124 | Зарегистр. 05-05-2005 | Отправлено: 15:53 05-10-2006
Ang



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
fokses
А перед этим кодом какие у тебя значения ColCount и RowCount для грида? А ещё нумерация и строк и колонок начинается с нуля. Если, конечно, тебе не нужна верхняя пустая строка.

Всего записей: 251 | Зарегистр. 25-07-2001 | Отправлено: 16:13 05-10-2006
fokses

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ang
Перед этим:
 

Код:
 
procedure TForm1.FormActivate(Sender: TObject);
begin
  with StringGrid1 do
  begin
    FixedRows := 1;
    FixedCols := 0;
    ColCount := 4;
    RowCount :=2;
    Cells[0,0]:= 'Дельта';
    Cells[1,0]:= 'Продольная подача';
    Cells[2,0]:= 'Дельта Z';
    Cells[3,0]:= 'Сумма всех съемов';
  end;
end;
 

Всего записей: 124 | Зарегистр. 05-05-2005 | Отправлено: 17:06 05-10-2006
RedPromo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fokses
Вобще еще бы стоило посмотреть какие у тебя значение в переменной  

Цитата:
line
при возникновении ексепшина.

Всего записей: 560 | Зарегистр. 05-04-2006 | Отправлено: 17:16 05-10-2006
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
RedPromo
Человек же написал, что line = 1. Читаем внимательно.
Проблема скорее в том, что не работает функция

Код:
 
FormatFloat('0.00', delta);
 

Интересно было бы посмотреть, что здесь. Попробуй заменить на FloatToFormat(delte)

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 17:30 05-10-2006
fokses

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
 

Код:
 
FloatToFormat(delta)
 

не находит такой функции.
Попробовал. Даже если вместо помеченной строки написать

Код:
 
Cells[0,1]:='1';
 

то все равно вылетает с тем же Access Violation, так что проблема явно не в FormatFloat, не в delta и не в line. Но тогда в чем?

Всего записей: 124 | Зарегистр. 05-05-2005 | Отправлено: 18:27 05-10-2006
RedPromo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fokses
А почему ты инициализируеш Grid в процедуре
Цитата:
FormActivate

вобще было правильней перенести инициализацию в
Цитата:
FormCreate

Всего записей: 560 | Зарегистр. 05-04-2006 | Отправлено: 18:39 05-10-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот точно рабочий код.

Цитата:
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 with StringGrid1 do
  begin
    FixedRows := 1;
    FixedCols := 0;
    ColCount := 4;
    RowCount :=2;
    Cells[0,0]:= 'Дельта';
    Cells[1,0]:= 'Продольная подача';
    Cells[2,0]:= 'Дельта Z';
    Cells[3,0]:= 'Сумма всех съемов';
   end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
with StringGrid1 do
begin
   Cells[0,1]:='1';
{   Cells[1,1]:=FormatFloat('00.00', S_pr);
   Cells[2,1]:=FormatFloat('0.0000', z_max-z_min);
   Cells[3,1]:=FormatFloat('0000.0000', Z_summa);}
   RowCount := 2;
end;
end;
 



----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:58 06-10-2006
fokses

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
All
Проблема решена. Всем big thanks за помощь и советы.
ShIvADeSt
Вы были правы. Этот код прекрасно работает. В общем, будете у нас на колыме  заходите. С меня пиво.

Всего записей: 124 | Зарегистр. 05-05-2005 | Отправлено: 03:55 06-10-2006
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Access violation при использовании TStringGrid (Delphi 7)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru