Я решил эту задачку некоторое время назад для одного моего приложения. Приведенный код переработан для решения вопроса, вынесенного в заголовок, но протестирован не был, я не думаю, что возникнут какие-либо проблемы. Он позволяет создать, сохранить и загрузить файл конфигурации с данными о порядке полей и размерами колонок. Освоив идею, можно легко добавить другие параметры, подлежащие сохранению.
Код содержит интуитивно понятные комментарии и строки на шведском языке, нецелесообразные для перевода.
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 doSystem.WriteLn(F, 'Campo',i,'=',Table1.Fields[i-1].FieldName);System.WriteLn(F, '');System.WriteLn(F, '[Campi_Size]');for i:=1 to Table1.FieldCount doSystem.WriteLn(F, 'Campo',i,'=',Table1.Fields[i-1].DisplayWidth);System.Close(F);end; procedure TMainForm.SaveIni(const FN: String); var Ini: TIniFile; i: Integer;begin NewIni(FN);Ini := TIniFile.Create(FN);with Ini dobeginfor i:=1 to Table1.FieldCount dobeginS:= 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;beginresult := Ini.ReadInteger(Section, Ident, -1);if result=-1 thenraise Exception.Create('Errore nel file di configurazione.');end; function MyReadString(const Section, Ident: string): String;beginresult := 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 dobeginS:= 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;finallyIni.Free;end;end; |