Added: TJDBDateTimeEdit, TJDBLabeledDateTimeEdit

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2017 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
jujibo
2011-09-26 15:24:02 +00:00
parent 30d568fab9
commit 6fa4fcffa9
11 changed files with 890 additions and 3 deletions

View File

@ -5,7 +5,8 @@ Note: Lazarus Trunk required
Version pre-1.0 Version pre-1.0
-------------------------------------------------- --------------------------------------------------
2011-09-26 Added: TDateTimeEdit, TLabeledDateTimeEdit 2011-09-26 Added: TJDateTimeEdit, TJLabeledDateTimeEdit
TJDBDateTimeEdit, TJDBLabeledDateTimeEdit
2011-09-23 Added: TJDBLabeledEdit, TJTimeEdit, TJLabeledTimeEdit, 2011-09-23 Added: TJDBLabeledEdit, TJTimeEdit, TJLabeledTimeEdit,
TJDBTimeEdit, TJDBLabeledTimeEdit TJDBTimeEdit, TJDBLabeledTimeEdit
2011-09-22 Added: ftTime support 2011-09-22 Added: ftTime support

View File

@ -18,7 +18,7 @@
<CompilerPath Value="$(CompPath)"/> <CompilerPath Value="$(CompPath)"/>
</Other> </Other>
</CompilerOptions> </CompilerOptions>
<Files Count="22"> <Files Count="24">
<Item1> <Item1>
<Filename Value="src/jdbintegeredit.pas"/> <Filename Value="src/jdbintegeredit.pas"/>
<HasRegisterProc Value="True"/> <HasRegisterProc Value="True"/>
@ -127,6 +127,16 @@
<HasRegisterProc Value="True"/> <HasRegisterProc Value="True"/>
<UnitName Value="JLabeledDateTimeEdit"/> <UnitName Value="JLabeledDateTimeEdit"/>
</Item22> </Item22>
<Item23>
<Filename Value="src/jdbdatetimeedit.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="JDBDateTimeEdit"/>
</Item23>
<Item24>
<Filename Value="src/jdblabeleddatetimeedit.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="JDBLabeledDateTimeEdit"/>
</Item24>
</Files> </Files>
<Type Value="RunAndDesignTime"/> <Type Value="RunAndDesignTime"/>
<RequiredPkgs Count="2"> <RequiredPkgs Count="2">

View File

@ -12,7 +12,8 @@ uses
JIntegerEdit, JLabeledIntegerEdit, JCurrencyEdit, JLabeledCurrencyEdit, JIntegerEdit, JLabeledIntegerEdit, JCurrencyEdit, JLabeledCurrencyEdit,
JDateEdit, JLabeledDateEdit, JDBGridControl, jdbgridutils, JDBLabeledEdit, JDateEdit, JLabeledDateEdit, JDBGridControl, jdbgridutils, JDBLabeledEdit,
JTimeEdit, JLabeledTimeEdit, JDBTimeEdit, JDBLabeledTimeEdit, JDateTimeEdit, JTimeEdit, JLabeledTimeEdit, JDBTimeEdit, JDBLabeledTimeEdit, JDateTimeEdit,
JLabeledDateTimeEdit, LazarusPackageIntf; JLabeledDateTimeEdit, JDBDateTimeEdit, JDBLabeledDateTimeEdit,
LazarusPackageIntf;
implementation implementation
@ -38,6 +39,8 @@ begin
RegisterUnit('JDBLabeledTimeEdit', @JDBLabeledTimeEdit.Register); RegisterUnit('JDBLabeledTimeEdit', @JDBLabeledTimeEdit.Register);
RegisterUnit('JDateTimeEdit', @JDateTimeEdit.Register); RegisterUnit('JDateTimeEdit', @JDateTimeEdit.Register);
RegisterUnit('JLabeledDateTimeEdit', @JLabeledDateTimeEdit.Register); RegisterUnit('JLabeledDateTimeEdit', @JLabeledDateTimeEdit.Register);
RegisterUnit('JDBDateTimeEdit', @JDBDateTimeEdit.Register);
RegisterUnit('JDBLabeledDateTimeEdit', @JDBLabeledDateTimeEdit.Register);
end; end;
initialization initialization

View File

@ -1,3 +1,21 @@
{ TJDateTimeEdit
Copyright (C) 2011 Julio Jiménez Borreguero
Contact: jujibo at gmail dot com
This library is free software; you can redistribute it and/or modify it
under the same terms as the Lazarus Component Library (LCL)
See the file license-jujiboutils.txt and COPYING.LGPL, included in this distribution,
for details about the license.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit JDateTimeEdit; unit JDateTimeEdit;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}

View File

@ -0,0 +1,352 @@
{ TJDBDateTimeEdit
Copyright (C) 2011 Julio Jiménez Borreguero
Contact: jujibo at gmail dot com
This library is free software; you can redistribute it and/or modify it
under the same terms as the Lazarus Component Library (LCL)
See the file license-jujiboutils.txt and COPYING.LGPL, included in this distribution,
for details about the license.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit JDBDateTimeEdit;
{$mode objfpc}{$H+}
interface
uses
Classes, LResources, Controls, StdCtrls, DB, DBCtrls, LMessages, LCLType, Dialogs,
SysUtils;
type
{ TJDBDateTimeEdit }
TJDBDateTimeEdit = class(TCustomEdit)
private
fFormat: string;
FDataLink: TFieldDataLink;
procedure DataChange(Sender: TObject);
procedure UpdateData(Sender: TObject);
procedure FocusRequest(Sender: TObject);
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
function IsReadOnly: boolean;
function getFormat: string;
procedure setFormat(const AValue: string);
procedure formatInput;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure CMGetDataLink(var Message: TLMessage); message CM_GETDATALINK;
protected
procedure Loaded; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure ActiveChange(Sender: TObject); virtual;
procedure KeyDown(var Key: word; Shift: TShiftState); override;
procedure KeyPress(var Key: char); override;
procedure DoEnter; override;
function GetReadOnly: boolean; override;
procedure SetReadOnly(Value: boolean); override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure EditingDone; override;
property Field: TField read GetField;
published
property DisplayFormat: string read getFormat write setFormat;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property ReadOnly: boolean read GetReadOnly write SetReadOnly default False;
// From TEdit
property Action;
property Align;
property Alignment;
property Anchors;
property AutoSize;
property AutoSelect;
property BidiMode;
property BorderStyle;
property BorderSpacing;
property CharCase;
property Color;
property Constraints;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property HideSelection;
property MaxLength;
property ParentBidiMode;
property OnChange;
property OnChangeBounds;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEditingDone;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseEnter;
property OnMouseLeave;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnStartDrag;
property OnUTF8KeyPress;
property ParentColor;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabStop;
property TabOrder;
property Visible;
end;
procedure Register;
implementation
uses
jcontrolutils;
procedure Register;
begin
{$I jdbdatetimeedit_icon.lrs}
RegisterComponents('Data Controls', [TJDBDateTimeEdit]);
end;
procedure TJDBDateTimeEdit.DataChange(Sender: TObject);
begin
if FDataLink.Field <> nil then
begin
if not Focused then
formatInput
else
Caption := FDataLink.Field.AsString;
end
else
Text := '';
end;
procedure TJDBDateTimeEdit.UpdateData(Sender: TObject);
var
theValue: string;
begin
if FDataLink.Field <> nil then
begin
theValue := NormalizeDateTime(Text, FDataLink.Field.AsDateTime);
if Text = '' then
FDataLink.Field.Text := Text
else
if IsValidDateTimeString(theValue) then
begin
FDataLink.Field.Text := theValue;
end
else
begin
ShowMessage(Caption + ' no es un valor válido');
Caption := FDataLink.Field.AsString;
SelectAll;
SetFocus;
end;
end
else
Text := '';
end;
procedure TJDBDateTimeEdit.FocusRequest(Sender: TObject);
begin
SetFocus;
end;
function TJDBDateTimeEdit.GetDataField: string;
begin
Result := FDataLink.FieldName;
end;
function TJDBDateTimeEdit.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;
function TJDBDateTimeEdit.GetField: TField;
begin
Result := FDataLink.Field;
end;
function TJDBDateTimeEdit.IsReadOnly: boolean;
begin
if FDatalink.Active then
Result := not FDatalink.CanModify
else
Result := False;
end;
function TJDBDateTimeEdit.getFormat: string;
begin
Result := fFormat;
end;
procedure TJDBDateTimeEdit.setFormat(const AValue: string);
begin
fFormat := AValue;
if not Focused then
formatInput;
end;
procedure TJDBDateTimeEdit.formatInput;
begin
if FDataLink.Field <> nil then
if (fFormat <> '') and (not FDataLink.Field.IsNull) then
Caption := FormatDateTime(fFormat, FDataLink.Field.AsDateTime)
else
Caption := FDataLink.Field.DisplayText
else
Caption := 'nil';
end;
function TJDBDateTimeEdit.GetReadOnly: boolean;
begin
Result := FDataLink.ReadOnly;
end;
procedure TJDBDateTimeEdit.SetReadOnly(Value: boolean);
begin
inherited;
FDataLink.ReadOnly := Value;
end;
procedure TJDBDateTimeEdit.SetDataField(const Value: string);
begin
FDataLink.FieldName := Value;
end;
procedure TJDBDateTimeEdit.SetDataSource(Value: TDataSource);
begin
if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then
ChangeDataSource(Self, FDataLink, Value);
end;
procedure TJDBDateTimeEdit.CMGetDataLink(var Message: TLMessage);
begin
Message.Result := PtrUInt(FDataLink); // Delphi dbctrls compatibility?
end;
procedure TJDBDateTimeEdit.Loaded;
begin
inherited Loaded;
if (csDesigning in ComponentState) then
DataChange(Self);
end;
procedure TJDBDateTimeEdit.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
// clean up
if (Operation = opRemove) then
begin
if (FDataLink <> nil) and (AComponent = DataSource) then
DataSource := nil;
end;
end;
procedure TJDBDateTimeEdit.ActiveChange(Sender: TObject);
begin
if FDatalink.Active then
datachange(Sender)
else
Text := '';
end;
procedure TJDBDateTimeEdit.KeyDown(var Key: word; Shift: TShiftState);
begin
inherited KeyDown(Key, Shift);
if Key = VK_ESCAPE then
begin
FDataLink.Reset;
SelectAll;
Key := VK_UNKNOWN;
end
else
if Key in [VK_DELETE, VK_BACK] then
begin
if not IsReadOnly then
FDatalink.Edit
else
Key := VK_UNKNOWN;
end;
end;
procedure TJDBDateTimeEdit.KeyPress(var Key: char);
begin
if not (Key in ['0'..'9', #8, #9, '.', '-', '/', ',', ':', ' ']) then
Key := #0
else
if not IsReadOnly then
FDatalink.Edit;
inherited KeyPress(Key);
end;
procedure TJDBDateTimeEdit.DoEnter;
begin
if FDataLink.Field <> nil then
Caption := FDataLink.Field.AsString;
inherited DoEnter;
end;
constructor TJDBDateTimeEdit.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
ControlStyle := ControlStyle + [csReplicatable];
FDataLink := TFieldDataLink.Create;
FDataLink.Control := Self;
FDataLink.OnDataChange := @DataChange;
FDataLink.OnUpdateData := @UpdateData;
FDataLInk.OnActiveChange := @ActiveChange;
// Set default values
//fFormat := ShortDateFormat;
end;
destructor TJDBDateTimeEdit.Destroy;
begin
FDataLink.Free;
FDataLink := nil;
inherited Destroy;
end;
procedure TJDBDateTimeEdit.EditingDone;
begin
inherited EditingDone;
if DataSource.State in [dsEdit, dsInsert] then
UpdateData(self);
end;
end.

View File

@ -0,0 +1,49 @@
LazarusResources.Add('tjdbdatetimeedit','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0
+#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147
+#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#219#9#23#14
+#5#13'}'#171#238#233#0#0#3#233'IDATH'#199#181#150']L'#155'U'#28#198#127'oi'
+#233'w'#161#133'A`'#3#198#16'p'#192'p'#3'D'#152#3#9's'#138#155'Qj'#212#152#24
+#227#197#212#11#141#17'c'#194'.'#184'1Q'#226#136#154#204#152'x'#161#153#201
+'LH'#156'.i6G'#22#199#220'`+'#3#17#28#31#11#3#25#155'P`PXi'#161'P'#250'y'#188
+' L'#176'lCtOrr'#206#249#231#228#249#229'}'#206#251#190#231'HB'#8'6'#162#166
+#227#159#150'+#'#220'5J'#149'og'#132'"B'#31#12#8'<'#243#30#199#188#155'6O@]'
+#247#252'['#181#173#0#210'J'#192#247#151'n'#137'oN'#223'X'#211#240#205'g'#183
+#241'JI'#130#4'p'#233#199'O'#190#138#142#158'=hL'#169#140'T'#26'6'#161#212#24
+#17'"'#132#219'9'#142'c'#180#143#241#254#11#243#174'9E'#221#203'U_~$'#9'!V'
+#25#127#241#206'#'#228'$'#235#184':'#226#198#238#244'bw'#249#176';'#189#156
+#180#142#1#240'A'#137#157#204#132'IL)'#251#153'Z'#208#211';'#228#194'>'#179
+'@ (0'#234'Ud'#167#233'0'#138#27'\'#187#248#29#147#246'@'#181'$'#132'`'#239
+#161#22#145#155'n"5^MN'#138#158#184'h'#229'*s'#187#203#199#252'b'#16#149#223
+#142'ys'#3'iEo'#211'7'#174'd'#218#233'%'#247'!'#19#209#6#25#2#9#135'+H{'#255
+#20':'#165#140#237#134#1':N'#31'['#144#1'lK2'#208'3'#232#224#164'ul'#149#233
+'J'#243#158'A'#7#169#161'NL'#201#229'Ly'#12'L8'#22'1'#151'm'#197#164#23'8'
+#220'nt'#6'-'#201'I'#6'*'#159'Lcr.'#196#180','#139#248#212#205#26'9@'#204'h'
+#19'1'#210'R'#214']'#13#191#135#229#175#4#30#149' YmCkz'#138#243#253#14#242
+#178#226'X'#8#8#20#10#5#141'?[x'#241#5'3j'#149#138#198#230#203'de'#228#209
+#218'9LEF!'#242'e'#147#170'*'#243'}'#223#156'k'#231'>C'#165'52>}'#155'}1j'
+#188'A'#129'V'#163'atd'#132#198#243#205#244'vw'#177#247#233#10#140'q'#26'n9'
+#22#137'*'#218#250'7`YG'#142'X'#238#10'(M'#245#18#10'y'#241#248'Bx'#131'K5'
+#187'k'#14#173'NGow'#23#7'*'#205'l'#207#217#193#176#203#143#223#31'B'#132'|'
+#225#128'{=I'#231#169'!\'#147#127#16#165'M'#228#230#196#2#233'['#162'@'#166
+'"'#175#160#136#135'w'#228#160#137'2'#224#246#130'mb'#30#131'V'#198#204'X7'
+#178#181#140#204#181#131#152'k'#7#195'j'#214#145#24'l}'#205#20'f'#170'i'#189
+'2'#137'B'#9'Z'#149#130'=%'#187#137'5'#26'P'#2':'#21#252'v'#197'Ni'#182#140
+#225#158#203#225#128#127#26#175'T|'#214'>F'#175#219'0'#249#219'H'#210#187#249
+#246#196#0#195'cN$'#175#31#201#227'g'#196#230#228#235#31#250'IV'#219#217#228
+'9'#131'mh~1,"KM:'#245'->N4'#13#135#1#142#183'z'#200'U?'#134#236#220'O'#236
+'*s'#147#24'S'#200#153'&'''#206#185' '#193#144'@'#175#129#226',A'#172#247','
+#237'g'#219#241'G'#198#212#201#215#251#239#177#212#164#3'P'#223#146#194#133
+#214#0#158#134'&b'#19#173'Tdd'#19#157#144#2'"'#192#237#209'A'#254'l'#187#202
+#205'i'#5#153#187'_'#162#236#185#131#31#174#27'P'#223#226#227#213#199'#'#1
+#232#245#238#164#234#181'b'#6':~'#161#185#161#27#181#188#3#191#223#143#206#24
+'G'#247#245'E'#14'}'#252'9'#26#253#210#218'u'#3#150'"K'#185'37'#197'o'#161
+#248#192#235#252':h'#225#153#253#187'x'#162't'#15#5#5#5'ttt'#0'0'#235#180#173
+#13'X'#185#201#203'cKM:'#150#154#244'U'#243#245'J~'#183#172#239#181#15#255'F'
+#242#245'|'#193#255'Er'#128#195#135#223#149#154'/Z'#197#3'!'#8'!'#194#218#209
+#163#199#196#251#239#189'!'#132#16#162#188#218'*'#252#129#160'('#175#182#222
+'i'#203#245#229#177#16'B'#228#231#231#175#234']3#B'#8'q'#127#192'F'#181#12
+#144#214':'#244'g'#157#182#255'%.Ct'#146'$m'#244'V'#177'^'#201'x'#192#250#11
+#171'TF'#11#166#129'pf'#0#0#0#0'IEND'#174'B`'#130
]);

View File

@ -0,0 +1,352 @@
{ JDBLabeledDateTimeEdit
Copyright (C) 2011 Julio Jiménez Borreguero
Contact: jujibo at gmail dot com
This library is free software; you can redistribute it and/or modify it
under the same terms as the Lazarus Component Library (LCL)
See the file license-jujiboutils.txt and COPYING.LGPL, included in this distribution,
for details about the license.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit JDBLabeledDateTimeEdit;
{$mode objfpc}{$H+}
interface
uses
Classes, LResources, Controls, ExtCtrls, DB, DBCtrls, LMessages, LCLType, Dialogs,
SysUtils;
type
{ TJDBLabeledDateTimeEdit }
TJDBLabeledDateTimeEdit = class(TCustomLabeledEdit)
private
fFormat: string;
FDataLink: TFieldDataLink;
procedure DataChange(Sender: TObject);
procedure UpdateData(Sender: TObject);
procedure FocusRequest(Sender: TObject);
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
function IsReadOnly: boolean;
function getFormat: string;
procedure setFormat(const AValue: string);
procedure formatInput;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure CMGetDataLink(var Message: TLMessage); message CM_GETDATALINK;
protected
procedure Loaded; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure ActiveChange(Sender: TObject); virtual;
procedure KeyDown(var Key: word; Shift: TShiftState); override;
procedure KeyPress(var Key: char); override;
procedure DoEnter; override;
function GetReadOnly: boolean; override;
procedure SetReadOnly(Value: boolean); override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure EditingDone; override;
property Field: TField read GetField;
published
property DisplayFormat: string read getFormat write setFormat;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property ReadOnly: boolean read GetReadOnly write SetReadOnly default False;
// From TEdit
property Action;
property Align;
property Alignment;
property Anchors;
property AutoSize;
property AutoSelect;
property BidiMode;
property BorderStyle;
property BorderSpacing;
property CharCase;
property Color;
property Constraints;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property HideSelection;
property MaxLength;
property ParentBidiMode;
property OnChange;
property OnChangeBounds;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEditingDone;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseEnter;
property OnMouseLeave;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnStartDrag;
property OnUTF8KeyPress;
property ParentColor;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabStop;
property TabOrder;
property Visible;
end;
procedure Register;
implementation
uses
jcontrolutils;
procedure Register;
begin
{$I jdblabeleddatetimeedit_icon.lrs}
RegisterComponents('Data Controls', [TJDBLabeledDateTimeEdit]);
end;
procedure TJDBLabeledDateTimeEdit.DataChange(Sender: TObject);
begin
if FDataLink.Field <> nil then
begin
if not Focused then
formatInput
else
Caption := FDataLink.Field.AsString;
end
else
Text := '';
end;
procedure TJDBLabeledDateTimeEdit.UpdateData(Sender: TObject);
var
theValue: string;
begin
if FDataLink.Field <> nil then
begin
theValue := NormalizeDateTime(Text, FDataLink.Field.AsDateTime);
if Text = '' then
FDataLink.Field.Text := Text
else
if IsValidDateTimeString(theValue) then
begin
FDataLink.Field.Text := theValue;
end
else
begin
ShowMessage(Caption + ' no es un valor válido');
Caption := FDataLink.Field.AsString;
SelectAll;
SetFocus;
end;
end
else
Text := '';
end;
procedure TJDBLabeledDateTimeEdit.FocusRequest(Sender: TObject);
begin
SetFocus;
end;
function TJDBLabeledDateTimeEdit.GetDataField: string;
begin
Result := FDataLink.FieldName;
end;
function TJDBLabeledDateTimeEdit.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;
function TJDBLabeledDateTimeEdit.GetField: TField;
begin
Result := FDataLink.Field;
end;
function TJDBLabeledDateTimeEdit.IsReadOnly: boolean;
begin
if FDatalink.Active then
Result := not FDatalink.CanModify
else
Result := False;
end;
function TJDBLabeledDateTimeEdit.getFormat: string;
begin
Result := fFormat;
end;
procedure TJDBLabeledDateTimeEdit.setFormat(const AValue: string);
begin
fFormat := AValue;
if not Focused then
formatInput;
end;
procedure TJDBLabeledDateTimeEdit.formatInput;
begin
if FDataLink.Field <> nil then
if (fFormat <> '') and (not FDataLink.Field.IsNull) then
Caption := FormatDateTime(fFormat, FDataLink.Field.AsDateTime)
else
Caption := FDataLink.Field.DisplayText
else
Caption := 'nil';
end;
function TJDBLabeledDateTimeEdit.GetReadOnly: boolean;
begin
Result := FDataLink.ReadOnly;
end;
procedure TJDBLabeledDateTimeEdit.SetReadOnly(Value: boolean);
begin
inherited;
FDataLink.ReadOnly := Value;
end;
procedure TJDBLabeledDateTimeEdit.SetDataField(const Value: string);
begin
FDataLink.FieldName := Value;
end;
procedure TJDBLabeledDateTimeEdit.SetDataSource(Value: TDataSource);
begin
if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then
ChangeDataSource(Self, FDataLink, Value);
end;
procedure TJDBLabeledDateTimeEdit.CMGetDataLink(var Message: TLMessage);
begin
Message.Result := PtrUInt(FDataLink); // Delphi dbctrls compatibility?
end;
procedure TJDBLabeledDateTimeEdit.Loaded;
begin
inherited Loaded;
if (csDesigning in ComponentState) then
DataChange(Self);
end;
procedure TJDBLabeledDateTimeEdit.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
// clean up
if (Operation = opRemove) then
begin
if (FDataLink <> nil) and (AComponent = DataSource) then
DataSource := nil;
end;
end;
procedure TJDBLabeledDateTimeEdit.ActiveChange(Sender: TObject);
begin
if FDatalink.Active then
datachange(Sender)
else
Text := '';
end;
procedure TJDBLabeledDateTimeEdit.KeyDown(var Key: word; Shift: TShiftState);
begin
inherited KeyDown(Key, Shift);
if Key = VK_ESCAPE then
begin
FDataLink.Reset;
SelectAll;
Key := VK_UNKNOWN;
end
else
if Key in [VK_DELETE, VK_BACK] then
begin
if not IsReadOnly then
FDatalink.Edit
else
Key := VK_UNKNOWN;
end;
end;
procedure TJDBLabeledDateTimeEdit.KeyPress(var Key: char);
begin
if not (Key in ['0'..'9', #8, #9, '.', '-', '/', ',', ':', ' ']) then
Key := #0
else
if not IsReadOnly then
FDatalink.Edit;
inherited KeyPress(Key);
end;
procedure TJDBLabeledDateTimeEdit.DoEnter;
begin
if FDataLink.Field <> nil then
Caption := FDataLink.Field.AsString;
inherited DoEnter;
end;
constructor TJDBLabeledDateTimeEdit.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
ControlStyle := ControlStyle + [csReplicatable];
FDataLink := TFieldDataLink.Create;
FDataLink.Control := Self;
FDataLink.OnDataChange := @DataChange;
FDataLink.OnUpdateData := @UpdateData;
FDataLInk.OnActiveChange := @ActiveChange;
// Set default values
//fFormat := ShortDateFormat;
end;
destructor TJDBLabeledDateTimeEdit.Destroy;
begin
FDataLink.Free;
FDataLink := nil;
inherited Destroy;
end;
procedure TJDBLabeledDateTimeEdit.EditingDone;
begin
inherited EditingDone;
if DataSource.State in [dsEdit, dsInsert] then
UpdateData(self);
end;
end.

View File

@ -0,0 +1,49 @@
LazarusResources.Add('tjdblabeleddatetimeedit','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0
+#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147
+#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#219#9#23#14
+#6#30#210'8'#252#244#0#0#4#0'IDATH'#199#213#148'mL[U'#28#198#127#183#20'J'#11
+#237'h'#7#155#128#131'1Vqc'#1#204'*'#17'67'#134']'#130#147'(|Pc'#140'!'#209
+'-K4'#153','#139#144#134'/'#243'm7'#204'h'#208#24#253#160#139'b$SCR1'#16#151
+#209#5#182#181#131'm'#213#133#23'q'#11#130#178#23#24#29#22#24#133#210#215#227
+#135'Y'#194#155#11'['#162#137'Ors'#254#231#229'>'#191#156#243#156'{%'#238'Sm'
+#223#28'-VEyjT'#177#254#188#168#232'(m(('#240'N{'#221#211#30':'#189'Aum'#217
+#254'#'#29#0#210#252#151#142#159#25#22#159'5'#15'.k'#184#175't'#3'/'#236'H'
+#145#0#206'|w'#228#147#132#132#219#175#232#211#203'bT'#186'$T'#26'=B'#132#241
+'L'#12#227#190#222#199#240#229#182#233#201#169#232#218#231#15'~'#252#182#180
+#216#248#195#215'r'#217#146#22'O'#239'U'#15#174#9#31#174'I?'#174#9#31'M'#246
+#27#0#28'z'#220'EV'#242'('#134#244'='#220#154#209#210'30'#137'k|'#134'`H'#160
+#215#198#146#157#25#143'^'#12#242#235#153#175#24'u'#5#171'$'#128#226'*'#187
+#200'1'#26#200'X'#171'fK'#186#150'5'#9#170#5#230#174'I?'#211#179'!b'#3'.'#202
+'S['#200'|'#236'U'#250#134'U'#140'M'#248#200#217'h A'#167'@ '#225#158#12'q'
+#225#242'-'#226'U'#10'6'#233#174#224'l'#174#159'Q'#0'lX'#167#163#187#223'M'
+#147#253#198#2#211#249#230#221#253'n2'#194'?aH+'#230#150'W'#199'M'#247','#229
+'E'#235'1h'#5'n'#143#135'x]'#28'i'#235't'#148#153'3'#25#157#10'3'#166#216#204
+#218#140'TM'#20#192#238#156'M'#135'S'#165#17'R'#165#17'n'#246#247'1'#208#211
+#195#215#159'V'#147#20#173'&'#236#26'@'#233#30'$U'#26'!'#247#129'!'#214'e'#23
+'q'#238'J'#128#220#135#147#136#211#196#160' '#140#181#169#137#204#13#25'<'
+#177'};)'#25'F'#214'o'#204#164#179'{'#148'<'#163#234'N'#200#213#213#31#137
+#202#202#242#185'@KK'#203#230#234#230#230#239'q8'#206'#'#203'2'#0#22#139#133
+'A'#159#145'o?x'#153'V'#199#5#226'T'#10#10'M'#166#5#23#226#203'S'#29'|'#209
+'p'#137#202'='#160'X|['#234#234#172#152#205#21#0#152#205#21#212#213'Y'#145'e'
+#25#179#185#130#183#246'='#138','#203'x'#253'a,'#22#11#187#183#229'Sh2a'#177
+'X0'#151'>'#13#192#137'N'''#190' '#4#2'aDx'#22#229'b@d''6['#253#130#218'f'
+#171#199#246#247#154'Uq'#10#146'r'#205#192#157']i'#18#147#217#127'`7'#182#230
+#31#240#248#225#218#205'itq'#10#198'ot-'#5#0#148#191#219#191'd,'#186#224'='
+#138'V'#217')'#201#153'!&K'#205'p'#151'mnnfl'#132'D}!'#0#241#177'p'#241#146
+#139#157#217#10#134'~>'#183#244#136#230#155'G'#178#176'X,'#4':'#222#160#245
+'D'#19#135#142#182'b'#8't"'#203'2'#207'U7'#240'y'#163#13'Y'#150#145#188#1#0
+'J'#242'M'#164#169']$y'#127#228#218#192#244#236#178'!78'#252'4'#182#15'a'#173
+'1.'#1#231#168'{)Z}'#150#188#162']'#140'*'#242#233#248'%'#200#196'T'#136'PX'
+#160#213'@'#193'fA'#162#239'$'#23'O^'#192#203#234'7'#149'+'#253#247'D`'#13
+#142't'#218':'#130'x['#218'IL'#177'S'#242'P6'#9#201#233' '#130#252'y'#189#159
+'?:{'#249'},'#154#172#194'g'#217#245#204#222#195'+'#6'48'#252#188#184'-'#6
+#128#30'_'#30#149'/'#21'p'#197'y'#138#211'-]'#168#149'N'#2#129#0#241#250'5t'
+#253'6K'#245';'#239#163#209#222'Y'#187'b@c'#251#16#144'>'#215'7'#172'}'#144
+#130#167'*8'#223'o'#229#201'='#143#176's'#199'vL&'#19'N'#167#19#128#219#19
+#215#150#7#204#15'9R[k'#140'Xk'#140#11#250'+'#149#242#159#206#250'n9'#220#139
+#148#243#191#224#127'CJ'#128#218#218#3'R'#251#233#179#130#255'J'#199#142#213
+#139#131#175#239#21'B'#8'Q\e'#23#129'`H'#20'W'#217#231#158#200'x'#164#22'B'
+#136#173'['#183'.h'''#199#175#138#21#1#238'W'#17#128#180#28#224#174#244'{'
+#208'*}'#154#196#255'^'#127#1#218'f 9O'#6'WZ'#0#0#0#0'IEND'#174'B`'#130
]);

View File

@ -1,3 +1,20 @@
{ TJDBTimeEdit
Copyright (C) 2011 Julio Jiménez Borreguero
Contact: jujibo at gmail dot com
This library is free software; you can redistribute it and/or modify it
under the same terms as the Lazarus Component Library (LCL)
See the file license-jujiboutils.txt and COPYING.LGPL, included in this distribution,
for details about the license.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit JDBTimeEdit; unit JDBTimeEdit;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}

View File

@ -1,3 +1,22 @@
{ TJDateTimeEdit
Copyright (C) 2011 Julio Jiménez Borreguero
Contact: jujibo at gmail dot com
This library is free software; you can redistribute it and/or modify it
under the same terms as the Lazarus Component Library (LCL)
See the file license-jujiboutils.txt and COPYING.LGPL, included in this distribution,
for details about the license.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit JLabeledDateTimeEdit; unit JLabeledDateTimeEdit;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}

View File

@ -1,3 +1,20 @@
{ TJLabeledTimeEdit
Copyright (C) 2011 Julio Jiménez Borreguero
Contact: jujibo at gmail dot com
This library is free software; you can redistribute it and/or modify it
under the same terms as the Lazarus Component Library (LCL)
See the file license-jujiboutils.txt and COPYING.LGPL, included in this distribution,
for details about the license.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit JLabeledTimeEdit; unit JLabeledTimeEdit;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}