zoukankan      html  css  js  c++  java
  • DBDateTimePicker;

    unit DBDateTimePicker;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls,DB,DBCTRLS;
    
    type
      TDBDateTime = class(TDateTimePicker)
      private
        FDataLink:TFieldDataLink;
        //TFieldDataLink是TDataLink的派生类,     处理单个字段与DataSource的交互
        procedure DataChange(sender:Tobject);
    //当DataSet的记录改变(如浏览记录)  时触发OnDataChange   事件,DataChange将作为该事件的事件处理句柄
        procedure UpdateData(sender:Tobject);
        //更新DataSet前触发OnUpdateData事件,      UpdateData将作为该事件的事件处理句柄
        function GetDataSource:TDataSource;
        procedure SetdataSource(value:TDataSource);
        Function GetDataField:String;
        procedure SetdataField(Value:String);
        procedure CMexit(var Message:TCMExit);
        message CM_EXIT;//当控件失去焦点时触发CM_EXIT消息
      protected
        procedure Change;override;//控件中日期、    时间改变时触发OnChange事件
        procedure Notification(AComponent:TComponent;
        Operation:Toperation);override;
        //当某一控件从FORM上移走时DELPHI的IDE调用该方法通知其它控件
      public
        constructor Create(AOwner:Tcomponent);override;
        destructor Destroy;override;
      published
        property DataSource:TDataSource read GetDataSource
        write SetDataSource;//为控件增加DataSource属性,使它能与DataSource构件连接
        property DataField:String read GetDataField
        write SetDataField;
      end;//为控件增加DataField属性,        使它指向代表某一字段的TField对象
    
    procedure Register;//注册构件
    
    implementation
    
    procedure TDBDateTime.CMExit;
    begin
     try
      FDataLink.UpdateRecord;
     //控件失去焦点时更新DataSet,  这将触发OnUpdateData事件
     except
      Setfocus;
      raise;
     end;
     DoExit;
    end;
    
    constructor TDBDateTime.Create(Aowner:Tcomponent);
    begin
      inherited Create(Aowner);
    //创建DataLink对象,挂接OnDataChange、  OnUpdateData事件处理句柄
      FDataLink:=TFieldDataLInk.Create;
      FDataLink.OnDataChange:=DataChange;
      FDataLink.OnUpdateData:=Updatedata;
    end;
    
    Destructor TDBDateTime.Destroy;
    begin
      FDataLink.OnDataChange:=nil;
      FDataLink.OnUpdateData:=nil;
      FDataLink.Free;
      inherited Destroy;
    end;
    
    function TDBDateTime.GetdataSource:TdataSource;
    begin
      result:=FDataLink.DataSource;
    end;
    
    Procedure TDBDateTime.SetDataSource
     (Value:TDataSource);
    begin
      FDataLink.DataSource:=Value;
    end;
    
    function TDBDateTime.GetDatafield:String;
    begin
      result:=FDataLink.FieldName;
    end;
    
    procedure TDBDateTime.SetDataField(value:String);
    begin
      FdataLink.FieldName:=value;
    end;
    
    procedure TDBDateTime.DataChange(Sender:Tobject);
    begin
    DateTime:=now;
    //若控件连了活动的DataSet则数据集变动时控件显示当前记录的相应字段值
    if FDataLink.Field<>nil then
      if FDataLink.Field.Text<>'' then
          DateTime:=FDatalink.Field.AsDateTime;
    end;
    
    Procedure TDBDateTime.UpdateData(sender:Tobject);
    begin
      FDatalink.Field.AsDateTime:=DateTime;
      //用控件中的日期、时间更新相应字段
    end;
    
    procedure TDBDateTime.Change;
    begin
    //当用户改变了控件中的内容时将DataSet置为编辑状态
      FDataLink.Modified;
      if not FDataLink.Editing then
      FdataLink.Edit;
      inherited Change;
    end;
    procedure TDBDateTime.Notification
     (AComponent:TComponent;Operation:TOperation);
    begin
     inherited Notification(Acomponent,Operation);
    //当与控件相连的TdataSource 被删除时将控件的DataSource属性置为空
     if (Operation=opRemove) and (FDataLink<>nil)
       and (AComponent=Datasource) then
        DataSource:=nil;
     end;
    
    procedure Register;
    begin
      RegisterComponents('Data Controls', 
      [TDBDateTime]);//控件注册后安装于DataControls页
    end;
    
    end.
    //保存为pas文件并添加到你的控件中
    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    2020-07-21日报博客
    java第十九天
    Java第十八章
    Java第十七天
    Java第十六天
    Java第十五天
    Java第十四天
    Java第十三天
    Pytorch-数据增强
    Pytorch-实现ResNet-18并在Cifar-10数据集上进行验证
  • 原文地址:https://www.cnblogs.com/jijm123/p/13659708.html
Copyright © 2011-2022 走看看