Ну что, в первой части и во второй части статей, про сохранение данных 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
Метки: ini, TStringGrid, сохранение TStringGrid, считывание из файла в TStringGrid
А как сделать так, что бы можно было хранить в одном ini настройки не только СтрингГрида?
Например:
[TStringGrid]
RowCount=3
ColCount=6
…
[INFO]
id1=3757357357
host=bla-bla-bla
port=23
В нем можно хранить любые настройки. Разделяйте на нужные секции и считывайте настройки из нужной секции