19.3 Delphi部件编程实例
19.3.1 创建数据库相关的日历控制-TDBCalendar
当处理数据库联接时,将控制和数据直接相联是很重要的。就是说,应用程序可以建立控制与数据库之间的链。Delphi包括了数据相关的标签、编辑框、列表框和栅格。用户可以使自己的控制与数据相关。
数据相关有若干等级。最简单的是只读数据相关或数据浏览,以及反映数据库当前状态的能力。比较复杂的是数据相关的编辑,也即用户可以在控制上操作数据库中的数据。
在本部分中将示例最简单的情况,即创建联接数据库的单个字段的只读控制。本例中将使用Component Palette的Samples页中的TCalendar部件。
创建数据相关的日历控制包括下列几步:
● 创建和注册部件
● 使控制只读
● 增加数据联接(Data
Link)
● 响应数据改变
19.3.1. 1创建和注册部件
每个部件的创建都从相同的方式开始,在本例中将遵循下列过程:
● 将部件库单元命名为DBCal
● 从TCalendar继承一个新部件,名为TDBCalendar
● 在Component
Palette的Samples页中注册TDBCalendar
下面就是创建的代码:
unit DBCal;
interface
uses SysUtils, WinTypes, WinProc, Messages, Classes, Graphics, Controls,
Forms, Grids, Calendar;
type
TDBCalendar=class(TCalendar)
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(Samples,[TDBabendar]);
end;
end.
19.3.1.2 使控制只读
因为这个数据日历以只读方式响应数据,所以用户不能在控制中改变数据并指望它们反映到数据库中。
使日历只读包含下列两步:
● 增加只读属性
● 允许所需的更新
1. 增加只读属性
给日历控制增加只读选项是直接过程。通过增加属性,可以提供在设计时使控制只读的方法,当属性值被设为True,将使控制中所有元素不可被选。
⑴ 增加属性声明和保存值的private域:
type
TDBCalendar=class(TClendar)
private
FReadOnly: Boolean;
public
constructor Create (Aowner: TComponent); override;
published
property ReadOnly: Boolean read FReadOnly write FReadOnly default True;
end;
constructor TDBCalendar.Create(Aowner: TComponent);
begin
inherited Create(AOwner);
FReadOnly := True;
end;
⑵ 覆盖SelectCell方法,使得当控制是只读时,不允许选择:
function TDBCalendar.SelectCell(ACol, Arow: Longint): Boolean;
begin
if FReadOnly then
Result := False
else
Result := inherited SelectCell(Acol,ARow);
end;
还要在TDBcalendar的声明中声明SelectCell。
如果现在将Calendar加入窗体,会发现部件完全忽略鼠标和击键事件,而且当改变日期时,也不能改变选择的位置。下面将使控制响应更新。
2. 允许所需的更新
只读日历使用SelectCell方法实现各种改变,包括设置Row和Col的值。当日期改变时,UpdateCalendar方法设置Row和Col的值,但因为SelectCell不允许你改变,即使日期改变了,选择仍留在原处。
可以给日历增加一个Boolean标志,当标志为True时允许改变:
[1] [2] [3] 下一页 |