adbdate.pas
来自「delphi编程控件」· PAS 代码 · 共 543 行
PAS
543 行
unit adbdate;
(*
COPYRIGHT (c) RSD Software 1997 - 98
All Rights Reserved.
*)
interface
{$I aclver.inc}
uses Classes, SysUtils, ADateCtl, DB, DBTables {$IFDEF DELPHI3_0}, dbctrls{$ENDIF};
type
TAutoDBDateControl = class(TCustomAutoDateControl)
private
FDateLink : TFieldDataLink;
FBeginDateLink : TFieldDataLink;
FEndDateLink : TFieldDataLink;
FUpdateFlag : Boolean;
procedure DateChange(Sender: TObject);
procedure UpdateDate(Sender: TObject);
procedure BeginDateChange(Sender: TObject);
procedure UpdateBeginDate(Sender: TObject);
procedure EndDateChange(Sender: TObject);
procedure UpdateEndDate(Sender: TObject);
function GetDateFieldName: String;
function GetBeginDateFieldName: String;
function GetEndDateFieldName: String;
function GetDataSource: TDataSource;
function GetDateField: TField;
function GetBeginDateField: TField;
function GetEndDateField: TField;
procedure SetDateField(const Value: String);
procedure SetBeginDateField(const Value: String);
procedure SetEndDateField(const Value: String);
procedure SetDataSource(Value: TDataSource);
protected
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure DoDateChange; override;
procedure DoBeginDateChange; override;
procedure DoEndDateChange; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property DateField: TField read GetDateField;
property BeginDateField: TField read GetBeginDateField;
property EndDateField: TField read GetEndDateField;
published
property DateDataField: string read GetDateFieldName write SetDateField;
property BeginDateDataField: string read GetBeginDateFieldName write SetBeginDateField;
property EndDateDataField: string read GetEndDateFieldName write SetEndDateField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
{ Property SelectPeriod must be first. }
property SelectPeriod;
property Align;
property DragCursor;
property DragMode;
property Enabled;
property Font;
{$IFDEF DELPHI3_0}
property ImeMode;
property ImeName;
{$ENDIF}
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property StartOfWeek;
property TabOrder;
property TabStop;
property Visible;
property OnDateChange;
property OnBeginDateChange;
property OnEndDateChange;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
end;
TAutoDBDateEdit = class(TCustomAutoDateEdit)
private
FDateLink : TFieldDataLink;
FBeginDateLink : TFieldDataLink;
FEndDateLink : TFieldDataLink;
FUpdateFlag : Boolean;
procedure DateChange(Sender: TObject);
procedure UpdateDate(Sender: TObject);
procedure BeginDateChange(Sender: TObject);
procedure UpdateBeginDate(Sender: TObject);
procedure EndDateChange(Sender: TObject);
procedure UpdateEndDate(Sender: TObject);
function GetDateFieldName: String;
function GetBeginDateFieldName: String;
function GetEndDateFieldName: String;
function GetDataSource: TDataSource;
function GetDateField: TField;
function GetBeginDateField: TField;
function GetEndDateField: TField;
procedure SetDateField(const Value: String);
procedure SetBeginDateField(const Value: String);
procedure SetEndDateField(const Value: String);
procedure SetDataSource(Value: TDataSource);
protected
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure DoDateChange; override;
procedure DoBeginDateChange; override;
procedure DoEndDateChange; override;
procedure Change; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property DateField: TField read GetDateField;
property BeginDateField: TField read GetBeginDateField;
property EndDateField: TField read GetEndDateField;
published
property DateDataField: string read GetDateFieldName write SetDateField;
property BeginDateDataField: string read GetBeginDateFieldName write SetBeginDateField;
property EndDateDataField: string read GetEndDateFieldName write SetEndDateField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
{ Property SelectPeriod must be first. }
property SelectPeriod;
property AutoSelect;
property AutoSize;
property BorderStyle;
property Color;
property Ctl3D;
property DragCursor;
property DragMode;
property Enabled;
property Font;
{$IFDEF DELPHI3_0}
property ImeMode;
property ImeName;
{$ENDIF}
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ReadOnly;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnDateChange;
property OnBeginDateChange;
property OnEndDateChange;
property OnChange;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
end;
implementation
{TAutoDBDateControl}
constructor TAutoDBDateControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDateLink := TFieldDataLink.Create;
FDateLink.Control := self;
FDateLink.OnDataChange := DateChange;
FDateLink.OnUpdateData := UpdateDate;
FBeginDateLink := TFieldDataLink.Create;
FBeginDateLink.Control := self;
FBeginDateLink.OnDataChange := BeginDateChange;
FBeginDateLink.OnUpdateData := UpdateBeginDate;
FEndDateLink := TFieldDataLink.Create;
FEndDateLink.Control := self;
FEndDateLink.OnDataChange := EndDateChange;
FEndDateLink.OnUpdateData := UpdateEndDate;
FUpdateFlag := False;
end;
destructor TAutoDBDateControl.Destroy;
begin
FDateLink.Free;
FBeginDateLink.Free;
FEndDateLink.Free;
inherited Destroy;
end;
procedure TAutoDBDateControl.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (FDateLink <> Nil) and
(AComponent = DataSource) then DataSource := nil;
end;
procedure TAutoDBDateControl.DoDateChange;
begin
if(FDateLink <> Nil) And (FDateLink.Field <> Nil) then
UpdateDate(self);
inherited DoDateChange;
end;
procedure TAutoDBDateControl.DoBeginDateChange;
begin
if(FBeginDateLink <> Nil) And (FBeginDateLink.Field <> Nil) then
UpdateBeginDate(self);
inherited DoBeginDateChange;
end;
procedure TAutoDBDateControl.DoEndDateChange;
begin
if(FEndDateLink <> Nil) And (FEndDateLink.Field <> Nil) then
UpdateEndDate(self);
inherited DoEndDateChange;
end;
procedure TAutoDBDateControl.DateChange(Sender: TObject);
begin
if (FDateLink.Field <> Nil) And Not FUpdateFlag then begin
FUpdateFlag := True;
if(FDateLink.Field.IsNull) then begin
Date := SysUtils.Date;
FDateLink.Field.AsDateTime := Date;
end else Date := FDateLink.Field.AsDateTime;
FUpdateFlag := False;
end;
end;
procedure TAutoDBDateControl.UpdateDate(Sender: TObject);
begin
if Not FUpdateFlag then begin
FUpdateFlag := True;
FDateLink.Edit;
if FDateLink.Editing then
FDateLink.Field.AsDateTime := Date;
FUpdateFlag := False;
end;
end;
procedure TAutoDBDateControl.BeginDateChange(Sender: TObject);
begin
if(FBeginDateLink.Field <> Nil) And Not FUpdateFlag then begin
FUpdateFlag := True;
BeginDate := FBeginDateLink.Field.AsDateTime;
FUpdateFlag := False;
end;
end;
procedure TAutoDBDateControl.UpdateBeginDate(Sender: TObject);
begin
if Not FUpdateFlag then begin
FUpdateFlag := True;
FBeginDateLink.Edit;
if FBeginDateLink.Editing then
FBeginDateLink.Field.AsDateTime := BeginDate;
FUpdateFlag := False;
end;
end;
procedure TAutoDBDateControl.EndDateChange(Sender: TObject);
begin
if (FEndDateLink.Field <> Nil) And Not FUpdateFlag then begin
FUpdateFlag := True;
EndDate := FEndDateLink.Field.AsDateTime;
FUpdateFlag := False;
end;
end;
procedure TAutoDBDateControl.UpdateEndDate(Sender: TObject);
begin
if Not FUpdateFlag then begin
FUpdateFlag := True;
FEndDateLink.Edit;
if FEndDateLink.Editing then
FEndDateLink.Field.AsDateTime := Date;
FUpdateFlag := False;
end;
end;
function TAutoDBDateControl.GetDateFieldName: String;
begin
Result := FDateLink.FieldName;
end;
function TAutoDBDateControl.GetBeginDateFieldName: String;
begin
Result := FBeginDateLink.FieldName;
end;
function TAutoDBDateControl.GetEndDateFieldName: String;
begin
Result := FEndDateLink.FieldName;
end;
function TAutoDBDateControl.GetDataSource: TDataSource;
begin
Result := FDateLink.DataSource;
end;
function TAutoDBDateControl.GetDateField: TField;
begin
Result := FDateLink.Field;
end;
function TAutoDBDateControl.GetBeginDateField: TField;
begin
Result := FBeginDateLink.Field;
end;
function TAutoDBDateControl.GetEndDateField: TField;
begin
Result := FEndDateLink.Field;
end;
procedure TAutoDBDateControl.SetDateField(const Value: String);
begin
FDateLink.FieldName := Value;
end;
procedure TAutoDBDateControl.SetBeginDateField(const Value: String);
begin
FBeginDateLink.FieldName := Value;
end;
procedure TAutoDBDateControl.SetEndDateField(const Value: String);
begin
FEndDateLink.FieldName := Value;
end;
procedure TAutoDBDateControl.SetDataSource(Value: TDataSource);
begin
FDateLink.DataSource := Value;
FBeginDateLink.DataSource := Value;
FEndDateLink.DataSource := Value;
if Value <> Nil then
Value.FreeNotification(Self);
end;
{TAutoDBDateEdit}
constructor TAutoDBDateEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDateLink := TFieldDataLink.Create;
FDateLink.Control := self;
FDateLink.OnDataChange := DateChange;
FDateLink.OnUpdateData := UpdateDate;
FBeginDateLink := TFieldDataLink.Create;
FBeginDateLink.Control := self;
FBeginDateLink.OnDataChange := BeginDateChange;
FBeginDateLink.OnUpdateData := UpdateBeginDate;
FEndDateLink := TFieldDataLink.Create;
FEndDateLink.Control := self;
FEndDateLink.OnDataChange := EndDateChange;
FEndDateLink.OnUpdateData := UpdateEndDate;
FUpdateFlag := False;
end;
destructor TAutoDBDateEdit.Destroy;
begin
FDateLink.Free;
FBeginDateLink.Free;
FEndDateLink.Free;
inherited Destroy;
end;
procedure TAutoDBDateEdit.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (FDateLink <> Nil) and
(AComponent = DataSource) then DataSource := nil;
end;
procedure TAutoDBDateEdit.DoDateChange;
begin
if(FDateLink <> Nil) And (FDateLink.Field <> Nil) then
UpdateDate(self);
inherited DoDateChange;
end;
procedure TAutoDBDateEdit.DoBeginDateChange;
begin
if(FBeginDateLink <> Nil) And (FBeginDateLink.Field <> Nil) then
UpdateBeginDate(self);
inherited DoBeginDateChange;
end;
procedure TAutoDBDateEdit.DoEndDateChange;
begin
if(FEndDateLink <> Nil) And (FEndDateLink.Field <> Nil) then
UpdateEndDate(self);
inherited DoEndDateChange;
end;
procedure TAutoDBDateEdit.Change;
begin
DoDateChange;
DoBeginDateChange;
DoEndDateChange;
end;
procedure TAutoDBDateEdit.DateChange(Sender: TObject);
begin
if (FDateLink.Field <> Nil) and Not FUpdateFlag then begin
FUpdateFlag := True;
if FDateLink.Editing and FDateLink.Field.IsNull then begin
Date := SysUtils.Date;
FDateLink.Field.AsDateTime := Date;
end else Date := FDateLink.Field.AsDateTime;
FUpdateFlag := False;
end;
end;
procedure TAutoDBDateEdit.UpdateDate(Sender: TObject);
begin
if Not FUpdateFlag then begin
FUpdateFlag := True;
FDateLink.Edit;
if FDateLink.Editing then
FDateLink.Field.AsDateTime := Date;
FUpdateFlag := False;
end;
end;
procedure TAutoDBDateEdit.BeginDateChange(Sender: TObject);
begin
if(FBeginDateLink.Field <> Nil) And Not FUpdateFlag then begin
FUpdateFlag := True;
BeginDate := FBeginDateLink.Field.AsDateTime;
FUpdateFlag := False;
end;
end;
procedure TAutoDBDateEdit.UpdateBeginDate(Sender: TObject);
begin
if Not FUpdateFlag then begin
FUpdateFlag := True;
FBeginDateLink.Edit;
if FBeginDateLink.Editing then
FBeginDateLink.Field.AsDateTime := BeginDate;
FUpdateFlag := False;
end;
end;
procedure TAutoDBDateEdit.EndDateChange(Sender: TObject);
begin
if (FEndDateLink.Field <> Nil) And Not FUpdateFlag then begin
FUpdateFlag := True;
EndDate := FEndDateLink.Field.AsDateTime;
FUpdateFlag := False;
end;
end;
procedure TAutoDBDateEdit.UpdateEndDate(Sender: TObject);
begin
if Not FUpdateFlag then begin
FUpdateFlag := True;
FEndDateLink.Edit;
if FEndDateLink.Editing then
FEndDateLink.Field.AsDateTime := Date;
FUpdateFlag := False;
end;
end;
function TAutoDBDateEdit.GetDateFieldName: String;
begin
Result := FDateLink.FieldName;
end;
function TAutoDBDateEdit.GetBeginDateFieldName: String;
begin
Result := FBeginDateLink.FieldName;
end;
function TAutoDBDateEdit.GetEndDateFieldName: String;
begin
Result := FEndDateLink.FieldName;
end;
function TAutoDBDateEdit.GetDataSource: TDataSource;
begin
Result := FDateLink.DataSource;
end;
function TAutoDBDateEdit.GetDateField: TField;
begin
Result := FDateLink.Field;
end;
function TAutoDBDateEdit.GetBeginDateField: TField;
begin
Result := FBeginDateLink.Field;
end;
function TAutoDBDateEdit.GetEndDateField: TField;
begin
Result := FEndDateLink.Field;
end;
procedure TAutoDBDateEdit.SetDateField(const Value: String);
begin
FDateLink.FieldName := Value;
end;
procedure TAutoDBDateEdit.SetBeginDateField(const Value: String);
begin
FBeginDateLink.FieldName := Value;
end;
procedure TAutoDBDateEdit.SetEndDateField(const Value: String);
begin
FEndDateLink.FieldName := Value;
end;
procedure TAutoDBDateEdit.SetDataSource(Value: TDataSource);
begin
FDateLink.DataSource := Value;
FBeginDateLink.DataSource := Value;
FEndDateLink.DataSource := Value;
if Value <> Nil then
Value.FreeNotification(Self);
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?