lazarus/lcl/include/dbdateedit.inc

166 lines
3.5 KiB
PHP

{%MainUnit ../dbextctrls.pp}
{******************************************************************************
This file is part of the Lazarus Component Library (LCL)
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************}
// included by dbextctrls.pp
{ Private Methods }
procedure TDBDateEdit.DataChange(Sender: TObject);
begin
if FDataLink.Field <> nil then begin
Self.Date := FDataLink.Field.AsDateTime;
if Focused and AutoSelect then SelectAll;
end
else
Text := '';
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;
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.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if Operation=opRemove then
if assigned(FDataLink) and (AComponent=DataSource) then
DataSource:=nil;
end;
function TDBDateEdit.EditCanModify: Boolean;
begin
Result := FDataLink.CanModify;
end;
procedure TDBDateEdit.EditEnter;
begin
inherited;
if not FDataLink.Editing then
FDataLink.Reset;
end;
procedure TDBDateEdit.EditKeyDown(var Key: Word; Shift: TShiftState);
begin
inherited;
case Key of
VK_ESCAPE:
//cancel out of editing by reset on Esc
if FDataLink.Editing then begin
FDataLink.Reset;
Key := VK_UNKNOWN;
end;
VK_DELETE, VK_BACK:
if not FDataLink.Edit then
Key := VK_UNKNOWN;
end;
end;
procedure TDBDateEdit.EditKeyPress(var Key: Char);
begin
inherited;
case Key of
#32..#255: //standard keys
if not assigned(FDataLink.Field) or not Field.IsValidChar(Key) or not FDataLink.Edit then
Key:=#0;
end;
end;
procedure TDBDateEdit.ButtonClick;
begin
if not Focused then
SetFocus;
if FDataLink.CanModify then
FDataLink.Edit;
inherited;
end;
procedure TDBDateEdit.EditChange;
begin
if FDataLink.Editing then
FDataLink.Modified;
inherited;
end;
procedure TDBDateEdit.EditExit;
begin
inherited;
if FDataLink.Editing then
FDataLink.UpdateRecord
else
FDataLink.Reset;
end;
procedure TDBDateEdit.Reset;
begin
FDataLink.Reset;
inherited;
end;
{ Public Methods }
constructor TDBDateEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDataLink := TFieldDataLink.Create;
FDataLink.Control := Self;
FDataLink.OnDataChange := @DataChange;
FDataLink.OnUpdateData := @UpdateData;
end;
destructor TDBDateEdit.Destroy;
begin
FDataLink.Destroy;
inherited Destroy;
end;
function TDBDateEdit.ExecuteAction(AAction: TBasicAction): Boolean;
begin
Result := inherited ExecuteAction(AAction) or
assigned(FDataLink) and FDataLink.ExecuteAction(AAction);
end;
function TDBDateEdit.UpdateAction(AAction: TBasicAction): Boolean;
begin
Result := inherited UpdateAction(AAction) or
assigned(FDataLink) and FDataLink.UpdateAction(AAction);
end;