⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 humanresourcecontrols.pas

📁 人力资源管理源代码
💻 PAS
字号:
unit HumanResourceControls;

interface

uses
  SysUtils, Classes, Controls, ComCtrls,DB,DBCTRLS;

type
 {定义从TDateTimePicker派生的TDBDateTimePicker类}
  TDBDateTimePicker = class(TDateTimePicker)
  private
    { Private declarations }
    FDataLink:TFieldDataLink;
    //TFieldDataLink是TDataLink的派生类,处理单个字段与DataSource的交互
    FOnlyDate : Boolean ;
    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
    { Protected declarations }
    procedure Change;override;//控件中日期、时间改变时触发OnChange事件
    procedure Notification(AComponent:TComponent;Operation:Toperation);override;
      //当某一控件从FORM上移走时DELPHI的IDE调用该方法通知其它控件
  public
    { Public declarations }
    constructor Create(AOwner:Tcomponent);override;
    destructor Destroy;override;
  published
    { Published declarations }
    property DataSource:TDataSource read GetDataSource write SetDataSource;//与数据库连接的数据源属性
    property DataField:String read GetDataField write SetDataField;  //与数据库连接的字段属性
    property OnlyDate:boolean read FOnlyDate write FOnlyDate default False ;//决定是否只提供给数据库日期的属性
  end;

procedure Register;

implementation

uses DateUtils, Variants;

{procedure Register;
begin
  RegisterComponents('Standard', [TDBDateTimePicker]);
end;}

procedure TDBDateTimePicker.CMExit;
begin
  try
    FDataLink.UpdateRecord;
    //控件失去焦点时更新DataSet,这将触发OnUpdateData事件
  except
    Setfocus;
    raise;
  end;
  DoExit;
end;

constructor TDBDateTimePicker.Create(Aowner:Tcomponent);
begin
  inherited Create(Aowner);
  //创建DataLink对象,挂接OnDataChange、OnUpdateData事件处理句柄
  FDataLink:=TFieldDataLink.Create;
  FDataLink.OnDataChange:=DataChange;
  FDataLink.OnUpdateData:=Updatedata;
end;

Destructor TDBDateTimePicker.Destroy;
begin
  FDataLink.OnDataChange:=nil;
  FDataLink.OnUpdateData:=nil;
  FDataLink.Free;
  inherited Destroy;
end;

function TDBDateTimePicker.GetdataSource:TdataSource;
begin
  result:=FDataLink.DataSource;
end;

Procedure TDBDateTimePicker.SetDataSource(Value:TDataSource);
begin
  FDataLink.DataSource:=Value;
end;

function TDBDateTimePicker.GetDatafield:String;
begin
  result:=FDataLink.FieldName;
end;

procedure TDBDateTimePicker.SetDataField(value:String);
begin
  FDataLink.FieldName:=value;
end;

procedure TDBDateTimePicker.DataChange(Sender:Tobject);
begin
  DateTime:=now;
//若控件连了活动的DataSet则数据集变动时控件显示当前记录的相应字段值
  if FDataLink.Field <> nil then
  begin
    if trim(FDataLink.Field.Text)<>'' then
    begin
      DateTime:=FDatalink.Field.AsDateTime;
    end
    else
    begin
      checked := false;
    end;
  end;
end;

Procedure TDBDateTimePicker.UpdateData(sender:Tobject);
begin
  //用控件中的日期、时间更新相应字段
  if not Checked and ShowCheckbox then
  begin
    FDatalink.Field.AsVariant  := Null;
  end
  else
  begin
    if OnlyDate then
    begin
      FDatalink.Field.AsString :=DateToStr( DateTime);
    end
    else
    begin
      FDatalink.Field.AsDateTime:=DateTime;
    end;
  end;
end;

procedure TDBDateTimePicker.Change;
begin
  //当用户改变了控件中的内容时将DataSet置为编辑状态
  FDataLink.Modified;
  if not FDataLink.Editing then
    FdataLink.Edit;
  inherited Change;
end;

procedure TDBDateTimePicker.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',[TDBDateTimePicker]);//控件注册后安装于DataControls页
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -