2008-11-07 6 views
2

Comment enregistrer une mise en page Tlistviews dans Delphi 2007?Comment enregistrer une mise en page Tlistview

On m'a demandé d'écrire du code pour permettre aux utilisateurs de réorganiser les colonnes dans une TListview (bien toutes TListviews dans notre application), j'ai le code qui fonctionne (en manipulant l'index des colonnes et en plaçant la largeur à zéro colonnes non nécessaires) mais maintenant j'ai besoin d'un moyen de sauvegarder l'état de la vue quand former des sorties.

Quelle est la meilleure façon de faire cela? J'ai pensé à la sérialisation, mais je n'ai pas besoin des données ou de l'ordre de tri de sorte que cousu un peu trop pour moi.

Certaines choses à méditer Il doit être sur une base par utilisateur Il doit être flexible, en cas nous ajoutons une nouvelle colonne au milieu de la listview Il n'y a pas garantie que la colonne headding sera unique Le nom de la liste peut ne pas être unique dans l'application

Des idées?

Répondre

3

Si vous souhaitez uniquement enregistrer et charger une partie des données, vous pouvez les stocker dans un fichier ini ou xml. Des données générales peuvent être écrites dans le fichier. Les colonnes sont un autre problème. Vous devez trouver une identification unique pour chaque colonne. Le ini pourrait être quelque chose comme:

[Settings] 

[Col_1] 
position=1 
width=500 
title=hello world 
align=left 
sort=ascending 

.. etc for more fields and more columns. 

Si vous utilise une classe d'aide listview, il vous suffit d'écrire le code une fois:

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; 

Si TListviewHelper est dans la portée, vous avez accès à l'extra méthodes

0

Je vous suggère d'hériter de Tlistview (ou y a-t-il un TCustomListView) pour créer votre propre composant, les helpers de classe sont agréables mais non officiels.

+0

Comment cela répond-il à la question concernant la façon de stocker la mise en page? –

0

La manière la plus simple de stocker l'ordre des colonnes serait de définir un ID pour chacune d'entre elles comme une chaîne significative et de stocker la liste dans le bon ordre dans le registre. dans le registre pourrait être

Name | First name | Age | Job title 

Puis la chaîne stockée:: Par exemple, supposons que vos colonnes ont été commandés comme

"Name,FName,Age,JTitle" 

être stockés dans l'entrée de Registre appropriée, sous la clé appropriée (typiquement HCKU\SOFTWARE\MyApplication, sous la clé ColumnOrder par exemple)