Added: TJDBLabeledEdit

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1987 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
jujibo
2011-09-23 08:39:35 +00:00
parent a1785912c0
commit 58aef337cb
5 changed files with 333 additions and 3 deletions

View File

@@ -1,10 +1,12 @@
JUJIBOUTILS
-----------
Note: Lazarus Trunk required
Version pre-1.0
--------------------------------------------------
2011-09-23 Added: TJDBLabeledEdit
2011-09-22 Added: ftTime support (testing)
2011-09-21 Added: TJDBGridControl and example (testgridctr)
2011-09-20 Added: TJIntegerEdit, TJLabeledIntegerEdit
TJCurrencyEdit, TJLabeledCurrencyEdit

View File

@@ -18,7 +18,7 @@
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Files Count="15">
<Files Count="16">
<Item1>
<Filename Value="src/jdbintegeredit.pas"/>
<HasRegisterProc Value="True"/>
@@ -92,6 +92,11 @@
<Filename Value="src/jdbgridutils.pas"/>
<UnitName Value="jdbgridutils"/>
</Item15>
<Item16>
<Filename Value="src/jdblabelededit.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="JDBLabeledEdit"/>
</Item16>
</Files>
<Type Value="RunAndDesignTime"/>
<RequiredPkgs Count="2">

View File

@@ -10,7 +10,8 @@ uses
jdbintegeredit, jdblabeledintegeredit, jdbcurrencyedit,
jdblabeledcurrencyedit, jdbdateedit, jdblabeleddateedit, jcontrolutils,
JIntegerEdit, JLabeledIntegerEdit, JCurrencyEdit, JLabeledCurrencyEdit,
JDateEdit, JLabeledDateEdit, JDBGridControl, jdbgridutils, LazarusPackageIntf;
JDateEdit, JLabeledDateEdit, JDBGridControl, jdbgridutils, JDBLabeledEdit,
LazarusPackageIntf;
implementation
@@ -29,6 +30,7 @@ begin
RegisterUnit('JDateEdit', @JDateEdit.Register);
RegisterUnit('JLabeledDateEdit', @JLabeledDateEdit.Register);
RegisterUnit('JDBGridControl', @JDBGridControl.Register);
RegisterUnit('JDBLabeledEdit', @JDBLabeledEdit.Register);
end;
initialization

View File

@@ -0,0 +1,288 @@
{ JDBLabeledEdit
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 JDBLabeledEdit;
{$mode objfpc}{$H+}
interface
uses
Classes, LResources, Controls, ExtCtrls, DB, DBCtrls,
LMessages, LCLType, SysUtils;
type
{ TJDBLabeledEdit }
TJDBLabeledEdit = class(TCustomLabeledEdit)
private
{ Private declarations }
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;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure CMGetDataLink(var Message: TLMessage); message CM_GETDATALINK;
protected
{ Protected declarations }
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
{ Public declarations }
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure EditingDone; override;
property Field: TField read GetField;
published
{ Published declarations }
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property ReadOnly: boolean read GetReadOnly write SetReadOnly default False;
property Action;
property Align;
property Alignment;
property Anchors;
property AutoSelect;
property AutoSize;
property BidiMode;
property BorderSpacing;
property BorderStyle;
property CharCase;
property Color;
property Constraints;
property DragCursor;
property DragMode;
property EditLabel;
property Enabled;
property Font;
property LabelPosition;
property LabelSpacing;
property MaxLength;
property ParentColor;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnChange;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEditingDone;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
property OnUTF8KeyPress;
end;
procedure Register;
implementation
procedure Register;
begin
{$I jdblabelededit_icon.lrs}
RegisterComponents('Data Controls', [TJDBLabeledEdit]);
end;
{ TJDBLabeledEdit }
procedure TJDBLabeledEdit.DataChange(Sender: TObject);
begin
if FDataLink.Field <> nil then
Caption := FDataLink.Field.AsString
else
Text := '';
end;
procedure TJDBLabeledEdit.UpdateData(Sender: TObject);
begin
if FDataLink.Field <> nil then
FDataLink.Field.Text := Text
else
Text := '';
end;
procedure TJDBLabeledEdit.FocusRequest(Sender: TObject);
begin
SetFocus;
end;
function TJDBLabeledEdit.GetDataField: string;
begin
Result := FDataLink.FieldName;
end;
function TJDBLabeledEdit.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;
function TJDBLabeledEdit.GetField: TField;
begin
Result := FDataLink.Field;
end;
function TJDBLabeledEdit.IsReadOnly: boolean;
begin
if FDatalink.Active then
Result := not FDatalink.CanModify
else
Result := False;
end;
procedure TJDBLabeledEdit.SetDataField(const Value: string);
begin
FDataLink.FieldName := Value;
end;
procedure TJDBLabeledEdit.SetDataSource(Value: TDataSource);
begin
if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then
ChangeDataSource(Self, FDataLink, Value);
end;
procedure TJDBLabeledEdit.CMGetDataLink(var Message: TLMessage);
begin
Message.Result := PtrUInt(FDataLink);
end;
procedure TJDBLabeledEdit.Loaded;
begin
inherited Loaded;
if (csDesigning in ComponentState) then
DataChange(Self);
end;
procedure TJDBLabeledEdit.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 TJDBLabeledEdit.ActiveChange(Sender: TObject);
begin
if FDatalink.Active then
datachange(Sender)
else
Text := '';
end;
procedure TJDBLabeledEdit.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 TJDBLabeledEdit.KeyPress(var Key: char);
begin
inherited KeyPress(Key);
if not IsReadOnly then
FDatalink.Edit;
inherited KeyPress(Key);
end;
procedure TJDBLabeledEdit.DoEnter;
begin
if FDataLink.Field <> nil then
Caption := FDataLink.Field.AsString;
inherited DoEnter;
end;
function TJDBLabeledEdit.GetReadOnly: boolean;
begin
Result := FDataLink.ReadOnly;
end;
procedure TJDBLabeledEdit.SetReadOnly(Value: boolean);
begin
inherited;
FDataLink.ReadOnly := Value;
end;
constructor TJDBLabeledEdit.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;
end;
destructor TJDBLabeledEdit.Destroy;
begin
FDataLink.Free;
FDataLink := nil;
inherited Destroy;
end;
procedure TJDBLabeledEdit.EditingDone;
begin
inherited EditingDone;
UpdateData(self);
end;
end.

View File

@@ -0,0 +1,33 @@
LazarusResources.Add('tjdblabelededit','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#8
+#10':F'#3'+'#155#0#0#2'wIDATH'#199#213#149']HSa'#24#199#127'GDo'#202'9C'#5'C'
+#163#129#232#197'2'#226#140'`'#176#4#21#20'"'#232'f72'#162#249#17'D!'#226#141
+'0'#132#212#139#16#186#136'd7'#129'H'#203#8'ov#'#216#141#176#4#29#8'q'#14#194
+'X'#17#136#226#7#147#152'a'#155#31#224'${'#187#168#247#180#237#204#204'Y'#23
+#253'o'#206#243'>'#231#229#249#248#191#255#231'}'#225#31'CI_L'#206'm'#138#177
+#233#149#156#27#239#221#178#209#222'X'#165#228#149' ='#240#232#195#171#216'k'
+#206#17']'#223'#'#158'H'#17'O'#30#18'O'#164#152#10#199#242'JT'#0'06'#189'BCm'
+#25#183']'#23#137'''RF'#240#254#206'6#ICm'#25#182#234#18#142#235'PBUUaJ`'#171
+'.!'#178#180#205'T8fT'#220#223#217#6#192#196#176#155#253#131'#\'#214#15','#6
+':H'#134'z'#9#6#131'";'#152#170#170'B'#174#211#253#10'@'#183'?"*K'#139#169
+#176#20#25'T'#0'$C'#189'XZF'#13#251#198#253'W'#236#29'|e1'#208#129#174#235'J'
+'0'#24#20'###'#0#248'|>'#220'n'#183#162#170#170#208'u'#221#160#176#16'`ec'
+#135#202#210'r'#0#6'<'#245'47\ '#186#190#135'7'#244#131#243'x"'#197'D'#8#230
+#159#223#201#160'C'#6#148#246#177'g`'#171'.'#225#221#251#207#25#213#231#130
+#165'e'#148'k'#222#23#200#10'%U'#217#182'IE'#191#163'H'#6'~p'#253#19#146#14#0
+']'#215'3'#232#144#182#236'H'#250#21#128#230#254#176'p^)'#167#194'R'#132#253
+#210'y'#131#162't'#153#198#147#135#236#31#28#17'Y'#218#230#237#19#151'r'#170
+'9'#232#246'G'#196'Zl'#151#163'o'#130#1'O='#171#218#155#191'2'#197']]w'#149
+#156#20'y'#234#150#137'F'#230#207#20'|h'#232#17#22'k'#141'R'#8#176#22#219#165
+#178#180#216'P'#209#170#182#12#192#211'gcy'''#216'Il'#252'RQ'#231#205#203#127
+#164'"'#9'g'#207#172#201#231'p82'#190#25's '#239#150#201#185'M'#241#248#245
+'G<u'#167#175'X'#211'4'#28#14#7#154#166#153#231'@'#162#189#177'J'#201'V'#200
+#140#190#133#179'g'#22'g'#207',3'#250'VF'#23#217#190'\(<'#169#178'V'#181#156
+'V'#181#201#8'*'#237#5#191#217#151'W'#130#25'}'#139#193'@4'#239#195'.8i'#195
+'` '#202#130#191#201#168#248#180'8'#177#131'a'#175'='#167'j'#164'o'#216'k7'
+#212's'#220'A'#155'0>'#254'R'#244#245'v'#139#179' '#249'e]'#152#222'd'#227
+#146#251#249#243#172#176'Xk'#20#254'{|'#7#172#15'p'#145#208'Pic'#0#0#0#0'IEN'
+'D'#174'B`'#130
]);