如何保存Tlistview布局

时间:2008-11-07 09:18:09

标签: delphi tlistview

如何在Delphi 2007中保存Tlistviews布局?

我被要求编写一些代码以允许用户重新排序TListview中的列(以及我们应用程序中的所有TListviews),我有代码工作(通过操作列索引并将宽度设置为零来隐藏列不需要)但现在我需要一种方法来保存视图的状态何时形成退出。

最好的方法是什么?我考虑过序列化,但我不需要数据或排序顺序,所以对我来说有点矫枉过正。

要思考的一些事情      它需要基于每个用户      它需要灵活,以防我们在listview的中间添加一个新列      没有任何保证栏目标题将是独一无二的      列表视图名称在整个应用程序中可能不是唯一的

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

如果您只想保存并加载某些数据,可以将其存储在ini或xml文件中。 可以将常规数据写入文件。列是另一个问题。您需要为每列找到唯一标识。 ini可能是这样的:

[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在范围内,您可以访问额外的方法。

答案 1 :(得分:0)

我建议您从Tlistview继承(或者有一个TCustomListView)来创建自己的组件,类助手很好但非官方。

答案 2 :(得分:0)

存储列顺序的最简单方法可能是将每个列的ID定义为有意义的字符串,并以正确的顺序将列表存储在注册表中。 例如,假设您的列的排序如下:

Name | First name | Age | Job title

然后注册表中存储的字符串可以是:

"Name,FName,Age,JTitle"

要存储在相应的注册表项中,在相应的密钥下(通常为HCKU\SOFTWARE\MyApplication,例如在密钥ColumnOrder下)