Ну что, в первой части и во второй части статей, про сохранение данных TStringGrid в файлы и открытие из файла данных, с последующей загрузкой их в TStringGrid, мы поговорили о сохранение и считывание данных из типизированного файла, а также сохранение и считывание данных из текстового файла. Какой Вам метод понравился больше всего, а также какой файл Вам понравился больше всего выбирать Вам, но я Вам предложу еще один тип файлов — это ini-файл, который имеет свою структуру, и как мы уже говорили они чаще всего используются для сохранение настроек Вашей программы (приложения). Подробнее о данном типе файлов, Вы сможете прочитать тут, ну а мы продолжим дальше говорить о сохранение данных и их выгрузку. На форме у меня следующие компоненты

  • TButton - 3 шт
  • TStringGrid
  • TEdit - 2 шт (для изменения размера TStringGrid)

И не забываем подключить в Uses модуль IniFiles и объявить переменную типа TIniFile. У меня так Ini:TIniFile;

Итак как мы уже говорили в ini-файлах есть название раздела и имена переменных, так вот у нас будет один раздел, который я назвал TStringGrid и 2 основные переменные RowCount и ColCount, которые соответственно будут хранить количество строк и столбцов. Следующие переменные, которые будут хранить сами значения ячеек нашего TStringGrid. Они имеют вид Item+номер строки+номер столбца, эти все значения записываются в цикле, а считываются точно также, в цикле при этом в считываемой переменной мы указываем номер строки и номер столбца, в которую считать данные. Для записи я использую — WriteString, для чтения — ReadString.

На кнопку «сохранить» (событие OnClick) я написал следующий код

procedure TForm1.Button1Click(Sender: TObject);
var
 F:TextFile;
 i,j:integer;
begin
   try
    AssignFile(F,'test.ini');
    Rewrite(F);
    CloseFile(F);
    Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'test.ini');
    Ini.WriteInteger('TStringGrid','RowCount',StringGrid1.RowCount);
    Ini.WriteInteger('TStringGrid','ColCount',StringGrid1.ColCount);
    for i:=0 to StringGrid1.RowCount-1 do
     begin
      for j:=0 to StringGrid1.ColCount-1 do
       begin
        Ini.WriteString('TStringGrid','Item'+IntToStr(i)+IntToStr(j),StringGrid1.Cells[j,i]);
       end;
     end;
    Ini.Free;
   except
    on e:Exception do
   end;
end;

На кнопку «открыть» (событие OnClick) я написал следующий код

procedure TForm1.Button2Click(Sender: TObject);
var
 i,j,k,l,n,m:integer;
begin
   try
    k:=0;
    l:=0;
    Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'test.ini');
    n:=Ini.ReadInteger('TStringGrid','RowCount',0);
    m:=Ini.ReadInteger('TStringGrid','ColCount',0);
    StringGrid1.RowCount:=n;
    StringGrid1.ColCount:=m;
    for i:=0 to n-1 do
     begin
      for j:=0 to m-1 do
       begin
        StringGrid1.Cells[k,l]:=Ini.ReadString('TStringGrid','Item'+IntToStr(i)+IntToStr(j),'');
        inc(k);
       end;
       k:=0;
       inc(l);
     end;
   except
    on e:Exception do
   end;
end;

Этой статьей я хотел бы закончить цикл новостей для сохранение и считывания данных из TStringGrid, надеюсь найдете себе подходящий способ.

Да, кстати, у каждого человека в жизни есть яркие дни. У некоторых это день рождение, свадьба, какие-то другие праздники. Так вот на мой взгляд свадьба является не забываемым просто днем. А свадьба в одессе поможет сделать этот праздник еще более ярким, красочным и не забываемым.

Исходники статьи качаем тут

Автор статьи - Andrey53

Метки: , , ,




К записи “Сохранение информации из TStringGrid. Часть 3” оставлено комментариев: 2.

  1. chex01:

    А как сделать так, что бы можно было хранить в одном ini настройки не только СтрингГрида?

    Например:
    [TStringGrid]
    RowCount=3
    ColCount=6

    [INFO]
    id1=3757357357
    host=bla-bla-bla
    port=23

    • Andrey:

      В нем можно хранить любые настройки. Разделяйте на нужные секции и считывайте настройки из нужной секции

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*