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对弹出窗口进行语言设置。