Вниз
Скачать: CL | DM;

Глюк в Делфе или у меня?   Найти похожие ветки 

 
***mikle***   (2006-10-22 19:21) [0]

Я накатал небольшую прогу (Состав: 3 баттона, 3 эдита, 2 таблицы): значения таблицы (Tstringgrid) записывает в файл, потом считывает их оттуда и заносит в другую такую же таблицу. Записывать-записывает, а вот с чтением - проблема! Первый раз он считывает нормально, а потом в таблице появляется левое значение и вылезает ошибка. Просмотрел по шагам - ошибка появляется уже когда заканчивается процедура чтения и компилятор возвращается к самой программе. Пытался объявить STR как глобальную переменную - тогда он не хочет даже считывать значение N(опять же не пойму почему!). А вот если убрать строки 2 и 3 ,то, как и должно быть, в строке 1 все значения заменяются словом Example и всё работает путём!

procedure TForm1.Button3Click(Sender: TObject);
begin
stringgrid1.Cells[0,stringgrid1.RowCount-1]:=edit1.Text;        {------------------}
stringgrid1.Cells[1,stringgrid1.RowCount-1]:=edit2.Text;        {    Записываем    }
stringgrid1.Cells[2,stringgrid1.RowCount-1]:=edit3.Text;        { данные в таблицу }
stringgrid1.RowCount:=stringgrid1.RowCount+1;                   {------------------}
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);    {Запись}
 var
   f:file;
   i,j,n:integer;
   str:string;
 begin
   assignfile(f,"buf.fl");
   rewrite(f);
   n:=stringgrid1.rowcount-1;                {записываем N - число строк в таблице}
   blockwrite(f,n,1);
   for i:=0 to stringgrid1.rowcount-2 do
   for j:=0 to 2 do
   begin
     str:=stringgrid1.cells[j,i];
     blockwrite(f,str,1);                         {запись элементов таблицы}
   end;
   closefile(f);
 end;

procedure TForm1.Button2Click(Sender: TObject);    {Чтение}
 var
   g:file;
   i,j:integer;
   n:integer;
   str:string;
 begin
   assignfile(g,"buf.fl");
   reset(g);
   blockread(g,n,1);               {считываем N - количество строк таблицы}
   if n<>0 then
   begin
   stringgrid2.RowCount:=n;
   for i:=0 to stringgrid2.rowcount-1 do
   for j:=0 to 2 do
   begin
     stringgrid2.cells[j,i]:="Example";         {Строка 1:заносим любое слово (для примера)  }
     blockread(g,str,1);                          {Строка 2:считываем значение из файла}
     stringgrid2.Cells[j,i]:=str;                 {Строка 3:присваивам значение ячейки}
   end;
   end;
   closefile(g);
 end;


 
Johnmen ©   (2006-10-22 20:08) [1]

Дело в том, что надо НАИВНИМАТЕЛЬНЕЙШИМ образом почитать blockwrite+F1, обратить внимание на параметры.


 
Rial ©   (2006-10-22 20:12) [2]

procedure WriteGrid;
Var
F : Integer;
I,J,N : Integer;
S : String;
begin
F:=FileCreate(FileName);
FileOpen(FileName, fmOpenWrite or fmShareDenyRead);
Try
 N:=StringGrid1.RowCount;
 FileWrite(F, N, SizeOf(N));
 For I:=0 to N - 1
 For J:=0 to 2 do begin
  S:=StringGrid1.Cells[I,J];
  N:=Length(S);
  FileWrite(F, N, SizeOf(N));  
  FileWrite(F, S[1], N);
 end;
Finally
 FileClose(F);
end;
end;

Процедура для чтения - домашнее задание. :)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.029 c
15-1161169778
Михайлов Юрий Александрович
2006-10-18 15:09
2006.11.05
Требуются программисты на Delphi


2-1161086311
regdown
2006-10-17 15:58
2006.11.05
Помгите с записью ресурсов


1-1159387946
Servelat
2006-09-28 00:12
2006.11.05
поймать SIGINT


2-1161538165
abba
2006-10-22 21:29
2006.11.05
Как из A(x1,y1) в B(x2,y2) в StringGrid?


6-1150525928
grisme
2006-06-17 10:32
2006.11.05
Вопрос по WinSock




   Наверх