Welcome

首页 / 软件开发 / Delphi / 第十九章-Delphi自定义部件开发(三)(6)

第十九章-Delphi自定义部件开发(三)(6)2007-05-07⑶ 初始化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 := TFieldDataLink.Create;

end;

destructor TDBCalendar Destroy;

begin

FDataLink.Free;

inherited Destroy;

end;

现在,部件已拥有完整的DataLink,但部件还不知从相联的域中读取什么数据。

19.3.1.4 响应数据变化

一旦控制拥有了数据联接(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 := TFieldDataLink.Create;

FDataLink.OnDataChange := DataChange;

end;

destructor TDBcalendar.Destroy;

begin

FDataLink.OnDataChange := nil;

FDataLink.Free;

inherited Destroy

end;

procedure TDBCalendar.DataChange(Sender: TObject);

begin

if FDataLink.Filed=nil then

CalendarDate := 0;

else

CalendarDate := FDataLink.Field.AsDate;

end;

;