📄 humanresourcecontrols.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 + -