TMS TPlanner and TDBPlanner日程与日历组件主要用来设计各种不同类型的计划日程应用程序。该组件已连续3年获得“Delphi Informant杂志读者选择奖”的最佳日程与日历组冠军。但是该组件唯一的缺点就是缺少帮助文件,只有一个英文的TMS Planner developers guide 使用文档。演示程序也不是很详细。近来因需要研究了一下TDBPlanner,感觉确实是很棒的组件,无须写太多代码就可以很轻松的将数据库与TDBPlanner绑定,直接在TDBPlanner上对数据库进行操作。下面就将一些使用心得介绍给大家。
一、 相应的组件介绍
(一) TDBPlanner组件
TDBPlanner主要由12个显示区域和方式构成(如下图):
1. TPlanner caption:表格标题。可通过Planner 的caption属性进行设置,可以选择是否显示。
2. TPlanner navigator buttons:列导航按钮。可通过Planner 的NavigatorButtons属性进行设置,可以选择是否显示。
3. TPlanner sidebar:工具条,可通过Planner的Sidebar属性进行设置,可以选择是否显示。它可以设置在表格的左边、右边、顶部及左右两边同时显示。
4. TPlanner header:表格头。可通过Planner的Header属性进行设置,可以选择是否显示。
5. TPlanner grid:表格主体。可通过Planner的Display属性进行设置。
6. TPlannerItem:日程条目。条目通用显示方式,标题包括时间和文本。可在DefaultItem中进行设置。
7. TPlannerItem:日程条目。超文本显示方式,标题为固定文本。
8. TPlannerItem:日程条目。HTML显示方,该方式可以插入超文本链接。
9. TPlanner footer:表格尾。通过进度条显示该列资源情况。
10. TPlannerItem:可以在表格头显示的日程条目。
11. TPlannerItem:背景日程条目。
12. 通过定制画出的表格头。
可通过Sidebar的Position属性设置Planner是横向显示还是竖向显示。
(二) TDBDaySource组件
TDBDaySource组件是数据控件和TDbPlanner控件之间的桥梁,通过它可以将数据库字段与TDbPlanner的一些显示属性关联起来。
主要属性如下:
属性 |
说明 |
AutoHeaderUpdate |
自动将日期数据填充到TDbPlanner的表格头。 |
AutoIncKey |
当数据库主键使用自动增量时,应设置该值为true,这样TDBDaySourcedoes将不会自动产生一个GUID的主键值。 如果数据库主键不使用自动增量,则应当将该值设置为false,这样当增加一个Item的时候,TDBDaySourcedoes将自动产生一个GUID作为数据库的主键值。 |
DataSource |
设置数据源 |
Day |
设置TDbPlanner第一列的日期值 |
EndTimeField |
设置保存结束时间的字段 |
KeyField |
设置主键字段 |
NotesField |
设置TPlannerItem的文字内容字段 |
StartTimeField |
设置保存开始时间的字段 |
SubjectField |
设置TPlannerItem的的标题字段 |
二、 演示程序
1、 数据库设置
在数据库中必需存在一下三个字段:
字段 |
类型 |
说明 |
开始时间 (StartTime) |
全日期/时间 |
如果数据库不支持全日期/时间类型可以用长度位20的字符类型代替 |
结束时间 (EndTime) |
全日期/时间 |
如果数据库不支持全日期/时间类型可以用长度位20的字符类型代替 |
主键(Key) |
字符或者自动增量 |
如果是字符类型则长度需要为40,可参考TDBDaySource组件的AutoIncKey属性 |
当然了,为了记录日程信息,还需要以下两个字段:
字段 |
类型 |
说明 |
日程内容 (Notes) |
字符或备注 |
|
日程标题 (Sbuject) |
字符 |
该字段可要可不要,因为在默认编辑状态下(不使用编辑控件),日程标题是不可修改的。 |
以上字段你可以通过TDBDaySource组件的属性关联起来,这样当TDbPlanner的属性内容发生改变的时候可以自动更新这些字段。
如果你还需要记录其它额外信息,可通过DBItemSource.OnFieldsToItem 和DBItemSource.OnItemToFields事件设置字段值。
例如:
下面的代码将映射数据库的COLOR字段到TPlannerItem的Color属性,IMAGE字段映射到TPlannerItem的ImageID字段,CAPTION字段设置TPlannerItem的标题显示。
procedure TForm1.DBDaySource1FieldsToItem(Sender: TObject; Fields:TFields;Item: TPlannerItem);
begin
Item.Color := TColor(Fields.FieldByName('COLOR').AsInteger);
Item.CaptionBkg := Item.Color;
Item.ImageID := Fields.FieldByName('IMAGE').AsInteger;
if Fields.FieldByName('CAPTION').AsBoolean then
Item.CaptionType := ctTime
else
Item.CaptionType := ctNone;
end;
procedure TForm1.DBDaySource1ItemToFields(Sender: TObject; Fields:TFields;
Item: TPlannerItem);
begin
Fields.FieldByName('COLOR').AsInteger := Integer(Item.Color);
Fields.FieldByName('CAPTION').AsBoolean := Item.CaptionType =ctTime;
Fields.FieldByName('IMAGE').AsInteger := Item.ImageID;
end;
2、 程序设计
数据库建立后就可以开始建立演示程序了。
在Form1上各放置一个TAdoConnection控件、TADOTable控件、TDataSource控件、TDBDaySource控件和TDBPlanner控件。
各控件属性设置如下:
a) TADOConnection
属性 |
值 |
说明 |
ConnectionString |
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=False |
|
LoginPrompt |
False |
|
Connected |
True |
|
b) TADOTable
属性 |
值 |
说明 |
Connection |
ADOConnection1 |
|
TableName |
Test |
|
Active |
True |
|
c) TDataSource
属性 |
值 |
说明 |
DataSet |
ADOTable1 |
|
d) TDBDaySource
属性 |
值 |
说明 |
AutoIncKey |
True |
因为使用了自动增量作为主键,所以这里要设置为True |
DataSource |
DataSource1 |
|
StartTimeField |
StartTime |
|
EndTimeField |
EndTime |
|
KeyField |
ID |
|
SubjectField |
Sunject |
|
NotesField |
Notes |
|
AutoHeaderUpdate |
True |
|
DateFormat |
yyyy-mm-dd |
|
Day |
|
|
e) TDBPlanner
属性 |
值 |
说明 |
Align |
alClient |
|
AutoInsDel |
True |
允许自动增加和删除Item |
DefaultItem.CaptionType |
ctTime |
|
DefaultItem.ShowDeleteButton |
True |
显示TPlannerItem的删除按钮,这样可以直接删除TPlannerItem,同时也在数据库中删除了该记录。 |
EditDirect |
True |
允许在TDBPlanner上直接编辑Item |
Sidebar.Position |
spLeftRight |
|
ItemSource |
DBDaySource1 |
与数据库关联 |
要在TDBPlanner直接添加一个日程条目,只需在TDBPlanner的RightClick中添加以下代码就行了:
with DBPlanner1.CreateItemAtSelection do
begin
update;
end;
如果不想右击鼠标添加条目,你也可以采用其它办法。
注意的地方就是添加的办法有两种:TDBPlanner.CreateItem and DBPlanner.CreateItemAtSelection。CreateItem需要你指定开始时间、结束时间。而CreateItemAtSelection则是在选择区域内建立。
删除日程条目可通过TDBPlanner.FreeItem(APlannerItem: TPlannerItem)操作删除。
修改日程的内容可直接单击条目修改。
是不是很方便,很简单就能实现一般的应用?在组件包中还提供了TSimpleItemEditor、TDefaultItemEditor和TPeriodItemEditor三个编辑控件对日程条目进行编辑,而且可以通过TPlannerRecurrencyEditor对弹出窗口进行语言设置。