2008-11-07 54 views
2

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

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

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

有些事情要思考 它需要对每个用户的基础 它必须是灵活的,在情况下,我们在ListView 的中间增加一个新的列没有garantee该列headding会独特 列表查看名称在整个应用程序中可能不唯一

任何想法?

回答

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是范围之内,您有机会获得额外的方法。

0

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

+0

这是如何回答有关如何存储布局的问题? – 2012-11-29 15:40:43

0

也许最简单的方法来存储列的顺序将是为每个定义一个ID作为一个有意义的字符串,并将该列表以正确的顺序存储在注册表中。 例如,假设您的列被勒令像:

Name | First name | Age | Job title 

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

"Name,FName,Age,JTitle" 

要被存储在相应的注册表项,在适当的键(通常为HCKU\SOFTWARE\MyApplication,例如在关键字ColumnOrder下)