带DB的带Label的TDateTimePicker源代码公开,非让你给我开贴子不可。嘻嘻!
给lxjgyl82朋友发了几封Email,可能没有收到,干脆把Code贴出来算了。
这是一个带DB的带Label的TDateTimePicker,方便、实用,如果有什么建议请给我Email:feng93017@163.net 需要的朋友可以自己打包编译安装,该程序在Delphi6.0下编译通过。用的爽给我开贴子,我是不会拒绝的哟,嘻嘻。
========================================================================
unit POSControls;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Grids, DB, DBCtrls, StdCtrls, ExtCtrls, ComCtrls, Buttons;
{**********THE TPOSLABEL CLASS DECLARE HERE*********}
type
TPOSLabel = class(TBoundLabel)
published
property FocusControl;
end;
{**************************************************}
TPOSDatetimePicker = class(TDatetimePicker)
private
FEditLabel: TPOSLabel;
FLabelPosition: TLabelPosition;
FLabelSpacing: Integer;
procedure SetLabelPosition(const Value: TLabelPosition);
procedure SetLabelSpacing(const Value: Integer);
protected
procedure SetParent(AParent: TWinControl); override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure SetName(const Value: TComponentName); override;
procedure CMVisiblechanged(var Message: TMessage);
message CM_VISIBLECHANGED;
//procedure CMEnabledchanged(var Message: TMessage);
//message CM_ENABLEDCHANGED;
procedure CMBidimodechanged(var Message: TMessage);
message CM_BIDIMODECHANGED;
procedure WMPaint(var Message: TMessage); message WM_PAINT;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); override;
procedure SetupInternalLabel;
published
property LabelPosition: TLabelPosition read FLabelPosition write SetLabelPosition;
property LabelSpacing: Integer read FLabelSpacing write SetLabelSpacing;
property EditLabel: TPOSLabel read FEditLabel;
end;
TPOSDBDatetimePicker = class(TPOSDatetimePicker)
private
FAllowChange: Boolean;
FSaveMode: TDateTimeMode;
FDataLink: TFieldDataLink;
function GetDataField: String;
function GetDataSource: TDataSource;
procedure SetDataField(const Value: String);
procedure SetDataSource(Value: TDataSource);
procedure DataChange(Sender: TObject);
procedure CMExit(var Message: TWMNoParams); message CM_EXIT;
procedure SetSaveMode(const Value: TDateTimeMode);
protected
{ Protected declarations }
procedure DateTimeChange(Sender: TObject); virtual;
public
{ Public declarations }
constructor Create(Aowner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property SaveMode: TDateTimeMode read FSaveMode write SetSaveMode;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('POSComponent',[TPOSDatetimePicker, TPOSDBDatetimePicker]);
end;
{ TPOSDatetimePicker }
procedure TPOSDatetimePicker.CMBidimodechanged(var Message: TMessage);
begin
inherited;
FEditLabel.BiDiMode := BiDiMode;
end;
{
procedure TPOSDatetimePicker.CMEnabledchanged(var Message: TMessage);
begin
inherited;
FEditLabel.Enabled := Enabled;
end;
}
procedure TPOSDatetimePicker.CMVisiblechanged(var Message: TMessage);
begin
inherited;
FEditLabel.Visible := Visible;
end;
constructor TPOSDatetimePicker.Create(AOwner: TComponent);
begin
inherited;
FLabelPosition := lpLeft;
FLabelSpacing := 3;
SetupInternalLabel;
FEditLabel.Alignment := taRightJustify;
FEditLabel.Visible := true;
//MessageBox(handle, PChar(IntToStr(FLabelSpacing)),'',MB_OK);
//Invalidate;
//SetLabelPosition(FLabelPosition);
end;
procedure TPOSDatetimePicker.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (AComponent = FEditLabel) and (Operation = opRemove) then
FEditLabel := nil;
end;
procedure TPOSDatetimePicker.SetBounds(ALeft, ATop, AWidth,
AHeight: Integer);
begin
inherited SetBounds(ALeft, ATop, AWidth, AHeight);
SetLabelPosition(FLabelPosition);
end;