代码之家  ›  专栏  ›  技术社区  ›  Re0sless

如何保存tlistview布局

  •  2
  • Re0sless  · 技术社区  · 16 年前

    如何在Delphi2007中保存TlistViews布局?

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

    最好的方法是什么?我考虑过序列化,但我不需要数据或排序顺序,这样对我来说就有点过分了。

    一些值得思考的事情 它需要基于每个用户 它需要灵活,以防我们在listview的中间添加一个新列 没有保证柱子的顶部是独一无二的。 ListView名称在整个应用程序中可能不唯一

    有什么想法吗?

    3 回复  |  直到 7 年前
        1
  •  3
  •   Toon Krijthe    16 年前

    如果只想保存和加载数据的某一部分,则可以将其存储在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在作用域内,则可以访问其他方法。

        2
  •  0
  •   Osama Al-Maadeed    16 年前

    我建议您从tlistview(或者是否有tcustomlistview)继承来创建自己的组件,类帮助程序很好,但不是官方的。

        3
  •  0
  •   Malik    7 年前

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

    Name | First name | Age | Job title
    

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

    "Name,FName,Age,JTitle"
    

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