Заходит програмер в свой темный подъезд и слышит, что в темноте кто-то шебуршится.
- Бї@дь надо-было сохраниться! - запоздало подумал он.
Нижеописанный код создает, сохраняет и загружает конфигурационный файл и изменяет размеры столбцов таблицы DBGRID
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, Db, DBTables, StdCtrls, IniFiles;
...
procedure TMainForm.NewIni(const NomeIni: string);
var
F: System.Text;
i: Byte;
begin
System.Assign(F, NomeIni);
System.ReWrite(F);
System.WriteLn(F, '[Campi_Ordine]');
for i:=1 to Table1.FieldCount do
System.WriteLn(F, 'Campo',i,'=',Table1.Fields[i-1].FieldName);
System.WriteLn(F, '');
System.WriteLn(F, '[Campi_Size]');
for i:=1 to Table1.FieldCount do
System.WriteLn(F, 'Campo',i,'=',Table1.Fields[i-1].DisplayWidth);
System.Close(F);
end;
procedure TMainForm.SaveIni(const FN: string);
var
Ini: TIniFile;
i: Integer;
S : string;
begin
NewIni(FN);
Ini := TIniFile.Create(FN);
with Ini dobeginfor i:=1 to Table1.FieldCount dobegin
S:= Table1.Fields[i-1].FieldName;
WriteString('Campi_Ordine', 'Campo'+IntToStr(i),
Table1.Fields[i-1].FieldName);
WriteInteger('Campi_Size', 'Campo'+IntToStr(i),
Table1.Fields[i-1].DisplayWidth);
end;
end;
Ini.Free;
end;
procedure TMainForm.LoadIni(const FN: string);
var
Ini: TIniFile;
i: Integer;
j: Longint;
S: string;
function MyReadInteger(const Section, Ident: string): Longint;
begin
result := Ini.ReadInteger(Section, Ident, -1);
if result=-1 thenraise Exception.Create('Errore nel file di configurazione.');
end;
function MyReadString(const Section, Ident: string): string;
begin
result := Ini.ReadString(Section, Ident, '');
if result='' thenraise Exception.Create('Errore nel file di configurazione.');
end;
begin
Ini := TIniFile.Create(FN);
trywith Ini dobeginfor i:=1 to Table1.FieldCount dobegin
S:= MyReadString('Campi_Ordine', 'Campo'+IntToStr(i));
j:= MyReadInteger('Campi_Size', 'Campo'+IntToStr(i));
Table1.FieldByName(S).index := i-1;
Table1.FieldByName(S).DisplayWidth := j;
end;
end;
finally
Ini.Free;
end;
end;
Программисты, которые работают с Delphi, знают, что создание и чтение конфигурационных файлов INI может быть сложной задачей. В этом тексте описаны три процедуры: NewIni, SaveIni и LoadIni. Они предназначены для создания, сохранения и загрузки конфигурации из файла INI.
NewIni процедура: Создает новый файл INI с двумя секциями: Campi_Ordine и Campi_Size. В первой секции записываются поля таблицы Table1, а во второй - их соответствующие ширины отображения.
SaveIni процедура: Сохраняет конфигурацию в существующий файл INI. Создает объект TIniFile, читает содержимое файла с помощью NewIni, и затем записывает поля таблицы Table1 обратно в файл с помощью WriteString и WriteInteger.
LoadIni процедура: Загружает конфигурацию из файла INI. Создает объект TIniFile, читает содержимое файла, и затем обновляет поля таблицы Table1 загруженными значениями. Если при чтении файла возникнет ошибка (например, отсутствие секций или ключей), то будет выброшено исключение.
В тексте также приведены несколько предложений по улучшению кода:
Вместо использования префикса System. для встроенных функций Delphi можно использовать функции без префикса.
В процедуре NewIni можно использовать цикл для записи полей и ширины отображения, а не повторять код для каждого поля.
В процедуре SaveIni создается новый объект TIniFile, а затем сразу же освобождается. Возможно, лучше использовать этот объект снова или найти более эффективный способ сохранения конфигурации.
В процедуре LoadIni выбрасывается исключение при ошибке чтения файла. Возможно, полезно будет предоставить дополнительную информацию о ошибке (например, имя отсутствующей секции или ключа).
В тексте также приведен обновленный код с учетом этих предложений.
procedureTMainForm.NewIni(constNomeIni:string);vari:Byte;beginAssignFile(F,NomeIni);Rewrite(F);WriteLn(F,'[Campi_Ordine]');fori:=1toTable1.FieldCountdoWriteLn(F,'Campo'+IntToStr(i)+'='+Table1.Fields[i-1].FieldName);WriteLn(F,'');WriteLn(F,'[Campi_Size]');fori:=1toTable1.FieldCountdoWriteLn(F,'Campo'+IntToStr(i)+'='+IntToStr(Table1.Fields[i-1].DisplayWidth));CloseFile(F);end;procedureTMainForm.SaveIni(constFN:string);varIni:TIniFile;i:Integer;beginNewIni(FN);Ini:=TIniFile.Create(FN);fori:=1toTable1.FieldCountdobeginWriteString('Campi_Ordine','Campo'+IntToStr(i),Table1.Fields[i-1].FieldName);WriteInteger('Campi_Size','Campo'+IntToStr(i),Table1.Fields[i-1].DisplayWidth);end;Ini.Free;end;procedureTMainForm.LoadIni(constFN:string);varIni:TIniFile;i:Integer;j:Longint;S:string;procedureLoadField(constSection,Ident:string;varFieldName,DisplayWidth:string);beginFieldName:=ReadString(Section,Ident,'');ifFieldName=''thenraiseException.Create('Error in configuration file.');DisplayWidth:=ReadInteger(Section,Ident,-1).ToString;ifDisplayWidth='-'+IntToStr(-1)thenraiseException.Create('Error in configuration file.');end;beginIni:=TIniFile.Create(FN);tryfori:=1toTable1.FieldCountdobeginLoadField('Campi_Ordine','Campo'+IntToStr(i),S,j);Table1.FieldByName(S).Index:=i-1;Table1.FieldByName(S).DisplayWidth:=StrToInt(j);end;finallyIni.Free;end;end;
Надеюсь, это поможет! Если у вас есть вопросы или вам нужна дополнительная помощь, пожалуйста, не стесняйтесь обращаться. 😊
В статье описывается создание, сохранение и загрузка конфигурационного файла для изменения размеров столбцов таблицы DBGrid.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.