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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2008, 10:54   #1
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию StringGrid (StrToInt)

Ну, хоть убей докопаться до истины не могу.

Код:
for l:=1 to ch+1 do
    for k:=1 to 12 do
      mas_graf[l,k]:=StrToInt(Stringgrid1.Cells[l,k]);
mas_graf[l,k] - двухмерный массив чисел типа integer;

При вводе числе в таблицы, внимательно следил, чтобы не ввести лишнего символа, ни пробела, только числа. Но, при переводе строки в число, выдает ошибку.
Подобная операция внесения даных в массив, но уже типа String - ошибок никаких не происходит.

Кто может подсказать, в чем дело?
Небесный вне форума Ответить с цитированием
Старый 13.02.2008, 11:02   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

А ошибка какая ? не выход за границы диапазона в Cells - нумерация то с нуля
alexBlack вне форума Ответить с цитированием
Старый 13.02.2008, 11:02   #3
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

mas_graf[l,k]:=StrToInt(Stringgrid1.Cells[k,l]);
или приводите код полностью: размерность массива и таблицы.
_Dmitry вне форума Ответить с цитированием
Старый 13.02.2008, 11:42   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Подобная операция внесения даных в массив, но уже типа String
Cell[] имеет тип String, скорее всего в ячейке записаны не только числа
Перед преобразованием примени функцию Trim И вместо StrToInt используй TryStrToInt или StrToIntDef

И на будущее: Надо ошибку приводить ато телепаты у нас в отпуске.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.02.2008, 19:56   #5
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Первая ошибка странная, ничего не запускаю, просто редактирую код (повторяю без помпиляции, просто в редакторе кода пишу что-нить) - выдает ошибку:
Цитата:
Access violation at address 00AB574F in modul ' dcc70.dll '. Write of address A3E749B0.
И теперь конкретно ошибка при компиляции:
Цитата:
Project Project1.exe raised exeption class EConvertError with message ''' is not a valid integer value'. Process stopped. Use Step or Run to continue.
Ниже, в другом ответе приведу код.
Небесный вне форума Ответить с цитированием
Старый 13.02.2008, 20:00   #6
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Первый модуль:
Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, TeEngine, Series, ExtCtrls, TeeProcs, Chart;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TLineSeries;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    Label1: TLabel;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    Series2: TPointSeries;
    Series3: TLineSeries;
    Series4: TPointSeries;
    Series5: TLineSeries;
    Series6: TPointSeries;
    Series7: TLineSeries;
    Series8: TPointSeries;
    Series9: TLineSeries;
    Series10: TPointSeries;
    BitBtn5: TBitBtn;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Label2: TLabel;
    BitBtn6: TBitBtn;
    procedure FormActivate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
  private
    { Private declarations }
  public
      ch_grafikov: integer;
      mas_god:array[1..5] of string;
  end;

var
  Form1: TForm1;
implementation
uses Unit2;
Type
  MYmas = array[1..12] of String;
Const
  mas_month: MYmas = ('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь','ноябрь', 'декабрь');
var
  x : integer;
  mas_y: array[0..12] of real;
  ch_grafikov: integer;
  mas_god:array[1..5] of integer;
{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
  ch_grafikov:=0;
  Edit1.SetFocus;
  BitBtn5.Hide;
  Edit2.Hide;
  Edit3.Hide;
  Edit4.Hide;
  Edit5.Hide;
  Edit6.Hide;
  label2.Hide;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 ch_grafikov:=StrToInt(Edit1.Text);
  if ch_grafikov > 5 then
    begin
      Edit1.Text:='';
      MessageBeep(MB_OK);
      ShowMessage(Существует всего  "5" графиков. Выберите число не больше "5".');
      Edit1.SetFocus;
    end
  else
    begin
      Edit1.Hide;
      label1.Hide;
      BitBtn1.Hide;
      BitBtn2.Hide;
      BitBtn3.Hide;
      BitBtn4.Hide;
      BitBtn5.Show;
      label2.Show;
    end;
  if ch_grafikov = 1 then
    Edit2.Show;
  if ch_grafikov = 2 then
    begin
      Edit2.Show;
      Edit3.Show;
    end;
  if ch_grafikov = 3 then
    begin
      Edit2.Show;
      Edit3.Show;
      Edit4.Show;
    end;
    if ch_grafikov = 4 then
    begin
      Edit2.Show;
      Edit3.Show;
      Edit4.Show;
      Edit5.Show;
    end;
    if ch_grafikov = 5 then
    begin
      Edit2.Show;
      Edit3.Show;
      Edit4.Show;
      Edit5.Show;
      Edit6.Show;
    end;
end;


{procedure TForm1.BitBtn12Click(Sender: TObject);
var
 i:integer;
begin
  mas_y[12]:=StrToFloat(Edit1.Text);
  Label1.Caption:='Сейчас можно произвести печать';
  x:=0;
  mas_y[0]:=0;
  for i:=0 to 12 do
    begin
      Chart1.Series[0].AddXY(x,mas_y[i]);
      Chart1.Series[1].AddXY(x,mas_y[i]);
      inc(x);
    end;
  Edit1.Text:='';
end;}

                           
procedure TForm1.BitBtn4Click(Sender: TObject);
var
  i:integer;
begin
  ch_grafikov:=0;
  Edit1.Text:='';
  BitBtn1.Show;
  BitBtn2.Show;
  BitBtn3.Show;
  BitBtn4.Show;
  BitBtn5.Hide;
  x:=0;
  for i:=0 to 12 do
    mas_y[i]:=0;
  Edit1.SetFocus;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
  i:integer;
begin
  //Chart1.PrintProportional:=false;
  Chart1.Print;
  //Chart1.BackImage
end;

procedure TForm1.BitBtn5Click(Sender: TObject);
begin
  if ch_grafikov = 1 then
    begin
      mas_god[1]:=Edit2.Text;
      Edit2.Hide;
    end;
  if ch_grafikov = 2 then
    begin
      mas_god[1]:=Edit2.Text;
      mas_god[2]:=Edit3.Text;
      Edit2.Hide;
      Edit3.Hide;
    end;
  if ch_grafikov = 3 then
    begin
      mas_god[1]:=Edit2.Text;
      mas_god[2]:=Edit3.Text;
      mas_god[3]:=Edit4.Text;
      Edit2.Hide;
      Edit3.Hide;
      Edit4.Hide;
    end;
  if ch_grafikov = 4 then
    begin
      mas_god[1]:=Edit2.Text;
      mas_god[2]:=Edit3.Text;
      mas_god[3]:=Edit4.Text;
      mas_god[4]:=Edit5.Text;
      Edit2.Hide;
      Edit3.Hide;
      Edit4.Hide;
      Edit5.Hide;
    end;
  if ch_grafikov = 5 then
    begin
      mas_god[1]:=Edit2.Text;
      mas_god[2]:=Edit3.Text;
      mas_god[3]:=Edit4.Text;
      mas_god[4]:=Edit5.Text;
      mas_god[5]:=Edit6.Text;
      Edit2.Hide;
      Edit3.Hide;
      Edit4.Hide;
      Edit5.Hide;
      Edit6.Hide;
    end;
  Form2.ShowModal;
end;
end.

Последний раз редактировалось Небесный; 13.02.2008 в 20:04.
Небесный вне форума Ответить с цитированием
Старый 13.02.2008, 20:01   #7
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Второй модуль:

Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, Buttons, Unit1;

type
  TForm2 = class(TForm)
    StringGrid1: TStringGrid;
    BitBtn1: TBitBtn;
    Label1: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    mas_pechat:array[0..5,0..12] of string;
    mas_graf:array[1..5,1..12] of integer;
  end;

var
  Form2: TForm2;

implementation
Type
  MYmas = array[1..12] of String;

Const
 mas_month: MYmas = ('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь','ноябрь', 'декабрь');

var
  ch: integer;

{$R *.dfm}

procedure TForm2.FormActivate(Sender: TObject);
var
  i,j:integer;
begin
  ch:=Form1.ch_grafikov;
  StringGrid1.RowCount:=Form1.ch_grafikov+1;
  for i:=1 to 12 do
    Stringgrid1.Cells[i,0]:=mas_month[i];
  for j:=1 to Form1.ch_grafikov+1 do
    Stringgrid1.Cells[0,j]:=Form1.mas_god[j];
end;

procedure TForm2.BitBtn1Click(Sender: TObject);
var
  i,j,l,k: integer;
begin
  for i:=0 to ch+1 do
    for j:=0 to 12 do
      mas_pechat[i,j]:=Stringgrid1.Cells[i,j];
  for l:=1 to ch+1 do
    for k:=1 to 12 do
      mas_graf[l,k]:=StrToInt(Stringgrid1.Cells[l,k]);
end;

end.
Небесный вне форума Ответить с цитированием
Старый 13.02.2008, 20:50   #8
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
mas_graf[l,k]:=StrToInt(Stringgrid1.Cells[k,l]);
или приводите код полностью: размерность массива и таблицы.
Нет-нет-нет и еще раз нет. Повторюсь, если создать массив строк и него заносить, но уже естественно без функиции StrToInt все в порядке и массив заполняеться правильно.
Небесный вне форума Ответить с цитированием
Старый 13.02.2008, 21:13   #9
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

''' is not a valid integer value'
Это значит, что при определенных l и k Stringgrid1.Cells[k,l] = '' (пустая строка). Чтобы узнать что это за столбец и что что за строка делаем так:
Код:
  for l:=1 to ch+1 do
    for k:=1 to 12 do
      try
        mas_graf [l,k] := StrToInt (Stringgrid1.Cells [l,k]);
      except
        ShowMessage ('Stringgrid1.Cells [' + IntToStr(l) + ',' + IntToStr(k) + '] = ' + Stringgrid1.Cells [l,k]);
      end;
2 Proffi: Знаю, знаю. Есть на это специальные ключи для компиляции на этапе тестирования и окончательной компиляции. Но мне не нравится ими пользоваться.
Sibedir вне форума Ответить с цитированием
Старый 13.02.2008, 21:24   #10
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Ребята, все нашел ошибку.
Эх, двоешник я, и потерял целую неделю на поиск ошибки, Кнопки то у меня
BitBtn. И свойство Kind Я сменил на "ОК", а потом назад на "Кастом". Убрал все BitBtn, заменил на обычный Батон.

Другой вопрос, как правильно спрятать вторую форму, но при нажатии, кнопки, что б она высвечивалась, а потом на этой же второй форме, по нажатию на кнопку, чтобы вторая форма скрывалась.

Последний раз редактировалось Небесный; 13.02.2008 в 21:29.
Небесный вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StrToInt и IntToStr AVer Общие вопросы Delphi 9 04.07.2010 13:57
StrToInt() Zeraim Общие вопросы Delphi 4 04.06.2008 18:31
StringGrid Devikss Общие вопросы Delphi 8 25.05.2008 16:14
Не работает StrToInt Dronik Помощь студентам 12 21.01.2008 16:58
Код 13 и stringGrid Alar Общие вопросы Delphi 1 08.02.2007 22:44