Сохранение и восстановление конфигурации DBGRID
Данный совет рассказывает о возможности сохранения и восстановления порядка колонок после изменения его пользователем (воспользовавшись, например, функцией drag and grop - перетащи и брось).
Я решил эту задачку некоторое время назад для одного моего приложения. Приведенный код переработан для решения вопроса, вынесенного в заголовок, но протестирован не был, я не думаю, что возникнут какие-либо проблемы. Он позволяет создать, сохранить и загрузить файл конфигурации с данными о порядке полей и размерами колонок. Освоив идею, можно легко добавить другие параметры, подлежащие сохранению.
Код содержит интуитивно понятные комментарии и строки на шведском языке, нецелесообразные для перевода.
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; begin NewIni(FN); Ini := TIniFile.Create(FN); with Ini do begin for i:=1 to Table1.FieldCount do begin 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 then raise Exception.Create('Errore nel file di configurazione.'); end; function MyReadString(const Section, Ident: string): String; begin result := Ini.ReadString(Section, Ident, ''); if result='' then raise Exception.Create('Errore nel file di configurazione.'); end; begin Ini := TIniFile.Create(FN); try with Ini do begin for i:=1 to Table1.FieldCount do begin 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; |