实现选项配置管理对话框的一小型框架PreferneceManager
作者:许子健
2008-02-02
一、概述
本组件包用于实现对软件中类似“选项”或“配置”功能,分为配置管理器和配置项目两个部分,它们不依赖具体所用界面控件的载体,可以按需定制,因此具有扩展性。已经实现了基于TFrame的配置项目类。
二、快速指南
01.从IDE新建一个Frame;
02.引用BasePreferenceMgr.pas和PreferenceMgr.pas;
03.绘制你的Frame界面;
04.为你的Frame类加上下列Public声明;
Procedure Apply;
Procedure Revert;
Function IsModified: Boolean;
05.在Implementation上方加入下列代码,并替换TYourFrame为在01中新建Frame的类名;
{$DEFINE TPL_FRAME_PREFERENCE_ITEM}
T_FRAME_UI = TYourFrame;
{$INCLUDE 'tplTFramePreferenceItem.pas'}
06.在{$R *.dfm}下方加上下列代码,并替换TYourFrame为在01中新建Frame的类名,然后
根据实际需求定义各项行为(Apply,Revert,IsModified);
{$INCLUDE 'tplTFramePreferenceItem.pas'}
Procedure TFramePreferenceItem.Apply;
Begin
TYourFrame(FFrameUI).Apply;
End;
Function TFramePreferenceItem.IsModified: Boolean;
Begin
Result := TYourFrame(FFrameUI).IsModified;
End;
Procedure TFramePreferenceItem.Revert;
Begin
TYourFrame(FFrameUI).Revert;
End;
Procedure TFrameItemA.Revert;
Begin
//加上自己的代码,比如恢复界面为默认设置的样子
End;
Procedure TFrameItemA.Apply;
Begin
//加上自己的代码,比如将设置写进ini或注册表
End;
Function TFrameItemA.IsModified: Boolean;
Begin
//加上自己的代码,比如判断是否界面与默认值一样
End;
07.保存文件;
08.重复01至07,以设计其他的配置项目;
09.设计配置中心的界面;
10.在09的界面单元引用untTPreferenceMgr和01至07产生的所有单元;
11.定义01个TPreferenceMgr类型全局变量;
11.配置管理器的初始化,例如;
Procedure TPreferenceForm.FormCreate(Sender: TObject);
Begin
// var M: TPreferenceMgr;
M := TPreferenceMgr.Create;
M.Parent := Self.RightPanel; //控制配置项目显示的位置
M.Add(untFrame1.TFramePreferenceItem); //添加配置项目的类
End;
12.配置管理器的销毁,例如;
Procedure TPreferenceForm.FormDestroy(Sender: TObject);
Begin
M.Free;
M := Nil;
End;
13.调用TPreferenceMgr类型对象的各个方法实现所需功能,例如下面使用一个TreeView
来控制;
Procedure TPreferenceForm.StdBtnApplyAllClick(Sender: TObject);
Begin
M.ApplyAll;
End;
Procedure TPreferenceForm.StdBtnApplyCurrClick(Sender: TObject);
Begin
M.ApplyActivated;
End;
Procedure TPreferenceForm.StdBtnCancelClick(Sender: TObject);
Begin
Self.Close; //关闭配置中心窗体
End;
Procedure TPreferenceForm.StdBtnDoneClick(Sender: TObject);
Begin
M.ApplyAll;
Self.Close;
End;
Procedure TPreferenceForm.StdBtnRevertAllClick(Sender: TObject);
Begin
M.RevertAll;
End;
Procedure TPreferenceForm.StdBtnRevertCurrClick(Sender: TObject);
Begin
M.RevertActivated;
End;
Procedure TPreferenceForm.WinTrvLeftMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Begin
M.Open(WinTrvLeft.Selected.AbsoluteIndex); //根据序号打开对应配置项目
M.SetActivated(WinTrvLeft.Selected.AbsoluteIndex); //激活显示在界面上
End;
三、使用DLL封装配置项目类的提示
01.确保主程序项目和DLL项目都使用Build with runtime packages,使用项目为rtl和vcl,
这两个文件一般在%system32%/rtlVER.bpl和%system32%/vclVER.bpl,VER表示版本,
可能是60、70、90、100之一,请将它们复制到客户机的%system32%/的文件夹下,或者
主程序的文件夹下。
02.DLL项目源文件加入如下的过程,并导出这个过程:
Procedure GetItemClass(ItemClassName: ShortString; Var ItemClass: Pointer);
Stdcall;
03.如果有疑问,请参见演示程序。
PreferenceManager版本历史
版本 描述
0.1.0 + 初始版本
0.1.1 * 字符串常量集中处理
* 修正DoOpen的产生的FItemCache错误
0.1.2 * 使用接口优化设计
* 增强了动作调用的安全性
* 修正重复发送ncOpen信息
0.1.3 * 优化了类设计
+ 添加了配置项目类构造类
# 新增使用DLL方式打开配置项目
+ TListPreferenceMgr新增一些方法
0.1.4 * 修正修改TListPreferenceMgr.Parent属性后不改变实际Parent
* 修正了一些小错误。 |