2008-11-07 58 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下)