Как сохранить макет Tlistview - PullRequest
2 голосов
/ 07 ноября 2008

Как сохранить макет Tlistviews в Delphi 2007?

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

Каков наилучший способ сделать это? Я думал о сериализации, но мне не нужны данные или порядок сортировки, так что мне это кажется немного излишним.

Некоторые вещи, чтобы задуматься Это должно быть для каждого пользователя Он должен быть гибким, в случае, если мы добавим новый столбец в середине списка Нет гарантии, что заголовок колонки будет уникальным Имя списка не может быть уникальным в приложении

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 07 ноября 2008

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

[Settings]

[Col_1]
position=1
width=500
title=hello world
align=left
sort=ascending

.. etc for more fields and more columns.

Если вы используете вспомогательный класс listview, вам нужно написать код только один раз:

TListviewHelper = class helper for TListView;
public
  procedure SaveToFile(const AFilename: string);
  procedure LoadFromFile(const AFileName: string);
end;

procedure TListviewHelper.SaveToFile(const AFilename: string);
var
  ini : TIniFile;
begin
  ini := TIniFile.Create(AFileName);
  try
    // Save to ini file
  finally
    ini.Free;
  end;
end;

procedure TListviewHelper.LoadFromFile(const AFileName: string);
var
  ini : TIniFile;
begin
  ini := TIniFile.Create(AFileName);
  try
    // Load from ini file
  finally
    ini.Free;
  end;
end;

Если TListviewHelper находится в области видимости, у вас есть доступ к дополнительным методам.

0 голосов
/ 04 июля 2017

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

Name | First name | Age | Job title

Тогда сохраненная строка в реестре может быть:

"Name,FName,Age,JTitle"

Для хранения в соответствующей записи реестра, под соответствующим ключом (обычно HCKU\SOFTWARE\MyApplication, например, под ключом ColumnOrder)

0 голосов
/ 10 ноября 2008

Я предлагаю вам наследовать от Tlistview (или есть TCustomListView) для создания собственного компонента, классные помощники хороши, но неофициальны.

...