Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Сохранение и Восстановление Ширины Столбцов DBGrid с Использованием INI-файла

Delphi , Компоненты и Классы , TDBGrid

Вопрос, заданный пользователем, связан с необходимостью сохранения и восстановления ширины столбцов компонента DBGrid в приложении на Delphi. Пользователь уже использует INI-файл для хранения различных настроек и хочет добавить в него раздел для ширины столбцов DBGrid. Ширина столбцов должна сохраняться и восстанавливаться для различных запросов, используемых в приложении.

Проблема

Пользователь работает с унаследованной формой, содержащей компонент DBGrid для отображения и выбора записей. В приложении используется большое количество полей и запросов, которые часто изменяются. Основная проблема заключается в необходимости сохранения и восстановления ширины столбцов DBGrid, так как менеджер хочет, чтобы пользователи могли устанавливать и запоминать предпочтительные размеры столбцов. Компонент DBGrid поддерживает функцию сохранения и восстановления свойств столбцов, но пользователь не использует статические столбцы и не хочет задавать ширину столбцов в процентах.

Решение

Пользователь уже реализовал процедуру записи текущих значений ширины столбцов в строку, которую планируется сохранить в INI-файл. Однако он ищет подтверждение, что его подход является хорошим решением, и интересуется, есть ли более эффективные способы реализации.

Подтвержденный ответ

Предоставленный код для сохранения и восстановления ширины столбцов DBGrid является рабочим решением. Оно использует компонент TMemIniFile из модуля IniFiles для работы с INI-файлом. Ширина столбцов сохраняется и восстанавливается по имени столбца, что позволяет избежать необходимости парсинга одной строки со значениями ширины.

uses
  IniFiles;

const
  SETTINGS_FILE = 'Edijus\Settings.ini';

procedure TForm1.LoadDBGridColumnsWidth(const ADBGrid: TDBGrid);
var
  _MemIniU: TMemIniFile;
  _SettingsPath: string;
  i, j: integer;
  _ParentClass: TWinControl;
begin
  _SettingsPath := GetHomePath + PathDelim + SETTINGS_FILE;
  if (not Assigned(ADBGrid)) or (not Assigned(ADBGrid.DataSource)) or
    (not Assigned(ADBGrid.DataSource.DataSet)) then
    Exit;

  _MemIniU := TMemIniFile.Create(_SettingsPath, TEncoding.UTF8);
  try
    _ParentClass := ADBGrid.Parent;
    while not(_ParentClass is TForm) do
      _ParentClass := _ParentClass.Parent;
    for i := 0 to Pred(ADBGrid.DataSource.DataSet.Fields.Count) do
      for j := 0 to Pred(ADBGrid.Columns.Count) do
      begin
        if (ADBGrid.DataSource.DataSet.Fields[i].FieldName = ADBGrid.Columns[j]
          .FieldName) then
          ADBGrid.Columns[j].Width :=
            _MemIniU.ReadInteger(_ParentClass.Name + '_' + ADBGrid.Name,
            ADBGrid.Columns[j].FieldName, 64);
      end;
  finally
    FreeAndNil(_MemIniU);
  end;
end;

procedure TForm1.SaveDBGridColumnsWidth(const ADBGrid: TDBGrid);
var
  _MemIniU: TMemIniFile;
  _SettingsPath: string;
  i: integer;
  _ParentClass: TWinControl;
begin
  _SettingsPath := GetHomePath + PathDelim + SETTINGS_FILE;
  if (not Assigned(ADBGrid)) or
    (not ForceDirectories(ExtractFilePath(_SettingsPath))) then
    Exit;

  _MemIniU := TMemIniFile.Create(_SettingsPath, TEncoding.UTF8);
  try
    _ParentClass := ADBGrid.Parent;
    while not(_ParentClass is TForm) do
      _ParentClass := _ParentClass.Parent;
    for i := 0 to Pred(ADBGrid.Columns.Count) do
      if (ADBGrid.Columns[i].FieldName <> '') then
        _MemIniU.WriteInteger(_ParentClass.Name + '_' + ADBGrid.Name,
          ADBGrid.Columns[i].FieldName, ADBGrid.Columns[i].Width);

    _MemIniU.UpdateFile;
  finally
    FreeAndNil(_MemIniU);
  end;
end;

Альтернативный ответ

Пользователь также рассматривает возможность сохранения ширины каждого столбца как отдельного значения в INI-файле, что может упростить процесс восстановления ширины столбцов.

Комментарии

Комментарии других пользователей подтверждают, что предложенное решение является разумным. Рекомендуется при восстановлении ширины столбцов временно отключить обновление интерфейса для предотвращения мигания.

Заключение

Пользователь может использовать предложенный код для сохранения и восстановления ширины столбцов DBGrid в INI-файле. Это позволит пользователям приложения запоминать и восстанавливать предпочтительные размеры столбцов для различных запросов, используемых в приложении.

Создано по материалам из источника по ссылке.

Пользователь задал вопрос о сохранении и восстановлении ширины столбцов компонента DBGrid в приложении на Delphi с использованием INI-файла, чтобы пользователи могли устанавливать и запоминать предпочтительные размеры столбцов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TDBGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:45:04/0.0053341388702393/1