2

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

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

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

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

有任何想法吗?

4

3 回答 3

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

于 2008-11-07T09:30:39.337 回答
0

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

于 2008-11-10T15:10:34.253 回答
0

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

Name | First name | Age | Job title

那么注册表中存储的字符串可能是:

"Name,FName,Age,JTitle"

存储在适当的注册表项中,在适当的键下(通常HCKU\SOFTWARE\MyApplication,例如在键ColumnOrder下)

于 2017-07-04T08:23:31.323 回答