下面是DataSource和DataField的声明和它们的实现方法
type
TDBCalendar = class(TSampleCalendar)
private { 属性的实现方法是 }
function GetDataField: string; { 返回数据库字段的名字 }
function GetDataSource: TDataSource; { 返回数据源(Data source)的引用 }
procedure SetDataField(const Value: string) { 给数据库字段名赋值 }
procedure SetDataSource(Value: TDataSource) { 给数据源赋值 }
published { 使属性在设计时可用 }
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
end;
……
function TDBCalendarGetDataField: string;
begin
Result := FDataLinkFieldName;
end;
function TDBCalendarGetDataSource: TDataSource;
begin
Result := FDataLinkDataSource;
end;
procedure TDBCalendarSetDataField(const Value: string)
begin
FDataLinkFieldName := Value;
end;
procedure TDBCalendarSetDataSource(Value: TDataSource)
begin
FDataLinkDataSource := Value;
end;
现在就建立了日历和DataLink的链此外还有一个更重要的步骤你必须在日历构建时创建DataLink对象在日历析构时撤消DataLink对象
⑶ 初始化DataLink
在数据相关控制在其存在的期间要不停地访问DataLink对象因此必须在其构建函数中创建DataLink创建并且在析构时撤消DataLink对象因此要覆盖日历的Create和Destroy方法
type
TDBCalendar=class(TCalendar)
public
constructor Create(Aowna: TComponent) override;
destructor Destroy; override;
end;
constructor TDBCalendar Create (Aowner: TComponent)
begin
inherited Create(AOwner)
FReadOnly := True;
FDataLink := TFieldDataLinkCreate;
end;
destructor TDBCalendar Destroy;
begin
FDataLinkFree;
inherited Destroy;
end;
现在部件已拥有完整的DataLink但部件还不知从相联的域中读取什么数据
响应数据变化
一旦控制拥有了数据联接(DataLink)和描述数据源和数据域的属性就需在数据记录改变时响应域中数据的变化
DataLink对象都有个名为OnDataChange的事件当数据源指示数据发生变化时DataLink对象调用任何OnDataChange所联接的事件处理过程
要在数据改变时更新数据就需要给DataLink对象的OnDataChange事件增加事件处理过程
下面声明了DataChange方法并将其赋给DataLink对象的OnDataChange事件
type
TDBCalendar=class(TCalendar)
private
procedure Datachange(Sender: TObject)
end;
constructor TDBCalendar Create(AOwner:TComponent)
begin
inherited Create(AOwner)
FReadOnly := True;
FDataLink := TFieldDataLinkCreate;
FDataLinkOnDataChange := DataChange;
end;
destructor TDBcalendarDestroy;
begin
FDataLinkOnDataChange := nil;
FDataLinkFree;
inherited Destroy
end;
procedure TDBCalendarDataChange(Sender: TObject)
begin
if FDataLinkFiled=nil then
CalendarDate := ;
else
CalendarDate := FDataLinkFieldAsDate;
end;
返回目录DELPHI基础教程
编辑推荐
Java程序设计培训视频教程
JEE高级框架实战培训视频教程
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLEG数据库开发优化指南
Java程序性能优化让你的Java程序更快更稳定
C嵌入式编程设计模式
Android游戏开发实践指南
[] [] [] []