DELPHI基础教程:Delphi自定义部件开发(三)[4]

如题所述

第1个回答  2022-11-02

  下面是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 TDBCalendar GetDataField: string;

  begin

  Result := FDataLink FieldName;

  end;

  function TDBCalendar GetDataSource: TDataSource;

  begin

  Result := FDataLink DataSource;

  end;

  procedure TDBCalendar SetDataField(const Value: string)

  begin

  FDataLink FieldName := Value;

  end;

  procedure TDBCalendar SetDataSource(Value: TDataSource)

  begin

  FDataLink DataSource := 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 := TFieldDataLink Create;

  end;

  destructor TDBCalendar Destroy;

  begin

  FDataLink Free;

  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 := 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 := ;

  else

  CalendarDate := FDataLink Field AsDate;

  end;

   返回目录 DELPHI基础教程

       编辑推荐

       Java程序设计培训视频教程

       J EE高级框架实战培训视频教程

  Visual C++音频/视频技术开发与实战

  Oracle索引技术

  ORACLE G数据库开发优化指南

  Java程序性能优化 让你的Java程序更快 更稳定

  C嵌入式编程设计模式

  Android游戏开发实践指南

lishixinzhi/Article/program/Delphi/201311/25116

相似回答