// included by dbctrls.pp { Private Methods } procedure TDBDateEdit.DataChange(Sender: TObject); begin if FDataLink.Field <> nil then begin Self.Date := FDataLink.Field.AsDateTime; SelectAll; end else Text := ''; end; procedure TDBDateEdit.ActiveChange(Sender: TObject); begin if FDataLink.Active then DataChange(Sender) else begin Text := ''; FDataLink.Reset; end; end; procedure TDBDateEdit.UpdateData(Sender: TObject); begin if Text = '' then FDataLink.Field.Clear else FDataLink.Field.AsDateTime := Self.Date; end; function TDBDateEdit.GetDataField: string; begin Result := FDataLink.FieldName; end; function TDBDateEdit.GetDataSource: TDataSource; begin Result := FDataLink.DataSource; end; function TDBDateEdit.GetField: TField; begin Result := FDataLink.Field; end; function TDBDateEdit.GetReadOnly: Boolean; begin Result := FDataLink.ReadOnly; end; procedure TDBDateEdit.SetReadOnly(Value: Boolean); begin inherited; FDataLink.ReadOnly := Value; end; procedure TDBDateEdit.SetDataField(const Value: string); begin FDataLink.FieldName := Value; end; procedure TDBDateEdit.SetDataSource(Value: TDataSource); begin ChangeDataSource(Self,FDataLink,Value); end; procedure TDBDateEdit.CMGetDataLink(var Message: TLMessage); begin Message.Result := PtrUInt(FDataLink); end; { Protected Methods} procedure TDBDateEdit.KeyDown(var Key: Word; Shift: TShiftState); begin inherited KeyDown(Key,Shift); if Key=VK_ESCAPE then begin //cancel out of editing by reset on esc FDataLink.Reset; SelectAll; Key := VK_UNKNOWN; end else if (Key in [VK_DELETE, VK_BACK]) or (Key>=32) then begin if FDataLink.CanModify then FDataLink.Edit else Key := VK_UNKNOWN; end; end; procedure TDBDateEdit.DoButtonClick(Sender: TObject); begin if not Focused then SetFocus; if FDataLink.CanModify then FDataLink.Edit; inherited; end; procedure TDBDateEdit.Loaded; begin inherited Loaded; //need to make sure the state is updated on first load if (csDesigning in ComponentState) then DataChange(Self); end; procedure TDBDateEdit.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); if (Operation=opRemove) then begin if (FDataLink<>nil) and (AComponent=DataSource) then DataSource:=nil; end; end; procedure TDBDateEdit.Change; begin inherited Change; FDataLink.Modified; end; procedure TDBDateEdit.Reset; begin inherited Reset; FDataLink.Reset; end; procedure TDBDateEdit.WMSetFocus(var Message: TLMSetFocus); begin inherited WMSetFocus(Message); if not FDataLink.Editing then FDataLink.Reset; end; procedure TDBDateEdit.WMKillFocus(var Message: TLMKillFocus); begin inherited WMKillFocus(Message); if FDataLink.Editing then FDataLink.UpdateRecord else FDataLink.Reset; end; { Public Methods } constructor TDBDateEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); FDataLink := TFieldDataLink.Create; FDataLink.Control := Self; FDataLink.OnDataChange := @DataChange; FDataLink.OnUpdateData := @UpdateData; FDataLink.OnActiveChange := @ActiveChange; end; destructor TDBDateEdit.Destroy; begin FDataLink.Destroy; inherited Destroy; end;