如何使用DateTimePicker,实现与数据库中日期的关联? 请问如何使用DateTimePicker,实现与数据库中日期的关联?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我这里有现成的 TDBDateTimePickertype TDBDateTimePicker = class(TDateTimePicker) private { Private declarations } FAllowChange: Boolean; FDataLink: TFieldDataLink; FCanvas: TControlCanvas; FReadOnly: Boolean; function GetDataField: string; function GetDataSource: TDataSource; procedure SetDataField(const Value: string); procedure SetDataSource(Value: TDataSource); procedure DataChange(Sender: TObject); procedure EditingChange(Sender: TObject); procedure CMExit(var Message: TWMNoParams); message CM_EXIT; procedure WMPaint(var Message: TWMPaint); message WM_PAINT; procedure Enter(var Message: TMessage); message CM_ENTER; procedure SetReadOnly(const Value: Boolean); protected procedure Change; override; 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 ReadOnly: Boolean read FReadOnly write SetReadOnly; //未处理 end;implementationconstructor TDBDateTimePicker.Create(AOwner: TComponent);begin inherited Create(AOwner); FDataLink:=TFieldDataLink.Create; FDataLink.OnDataChange:=DataChange; FDataLink.OnEditingChange := EditingChange; FAllowChange:=True; FCanvas := TControlCanvas.Create; FCanvas.Control := Self;end;destructor TDBDateTimePicker.Destroy;begin FDataLink.OnDataChange:=nil; FDataLink.Free; FCanvas.Free; inherited Destroy;end;procedure TDBDateTimePicker.DataChange(Sender: TObject);begin if FDataLink.Field=nil then Self.DateTime:=1 else if FAllowChange then begin try if FDataLink.Field.AsDateTime=0 then Self.DateTime :=1 else self.DateTime :=FDataLink.Field.AsDateTime; except Self.DateTime := 0; end; end;end;procedure TDBDateTimePicker.Change;begin inherited; with FDataLink do begin FAllowChange:=False; if not editing then Edit; end; FDatalink.Field.AsDateTime:=self.DateTime; FAllowChange:=True;end;procedure TDBDateTimePicker.CMExit(var Message: TWMNoParams);begin try FDataLink.UpdateRecord; except on Exception do SetFocus; end; inherited;end;function TDBDateTimePicker.GetDataField: string;begin Result:=FDataLink.FieldName;end;function TDBDateTimePicker.GetDataSource: TDataSource;begin Result:=FDataLink.DataSource;end;procedure TDBDateTimePicker.SetDataField(const Value: string);begin FDataLink.FieldName:=Value;end;procedure TDBDateTimePicker.SetDataSource(Value: TDataSource);begin FDataLink.DataSource := Value;end;procedure TDBDateTimePicker.WMPaint(var Message: TWMPaint);begin inherited; if csDesigning in ComponentState then Exit; if (DataSource = nil) or (DataSource.DataSet = nil) or (not DataSource.DataSet.Active) or (DataField = '') or (DataSource.DataSet.FieldByName(DataField).IsNull) and (not Focused) then begin FCanvas.Brush.Color := Color; FCanvas.FillRect(Rect(0, 0, Width - GetSystemMetrics(SM_CXVSCROLL) - 4, Height));// FCanvas.TextOut(1, 1, '空') end;end;procedure TDBDateTimePicker.EditingChange(Sender: TObject);begin Invalidate;end;procedure TDBDateTimePicker.Enter(var Message: TMessage);begin inherited; Invalidate;end;procedure TDBDateTimePicker.SetReadOnly(const Value: Boolean);begin FReadOnly := Value;end; IP4000里有一个wwDBDateTimePicker控件.如果自已写。dbedit1.Field.AsString:=datetostr(datetimepicker.date); 建议使用Elib中的TDBDateTimeEditEh控件,可以跟数据库相联 雪夜:我是新手,请问如何添加你的代码为控件?谢谢。磕睡:你说得Elib,我也没有找到阿。chinaandys:添加了你的代码,程序报错。很奇怪。 请问写继承窗体中写函数过程的问题 简单数据库密码登陆,权限设置,高手进来解答 给我儿子起个好名字 求矢量图控件! 急!!!!!!!!SQL查询 如何通过光标上下键在listview中移动并取得当前值? ★★★★★★★★写通用查询模块时碰到的两个问题★★★★★★★★★★ delphi 中有整型转成浮点型的函数吗?? 动态创建数据表 求教 新手问题~~~ 没事,散点分吧 怎样直接从内存中将页面中的图片,脚本等导入TWebBrowser.
type
TDBDateTimePicker = class(TDateTimePicker)
private
{ Private declarations }
FAllowChange: Boolean;
FDataLink: TFieldDataLink;
FCanvas: TControlCanvas;
FReadOnly: Boolean;
function GetDataField: string;
function GetDataSource: TDataSource;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure DataChange(Sender: TObject);
procedure EditingChange(Sender: TObject);
procedure CMExit(var Message: TWMNoParams); message CM_EXIT;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
procedure Enter(var Message: TMessage); message CM_ENTER;
procedure SetReadOnly(const Value: Boolean);
protected
procedure Change; override;
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 ReadOnly: Boolean read FReadOnly write SetReadOnly; //未处理
end;implementationconstructor TDBDateTimePicker.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDataLink:=TFieldDataLink.Create;
FDataLink.OnDataChange:=DataChange;
FDataLink.OnEditingChange := EditingChange;
FAllowChange:=True;
FCanvas := TControlCanvas.Create;
FCanvas.Control := Self;
end;destructor TDBDateTimePicker.Destroy;
begin
FDataLink.OnDataChange:=nil;
FDataLink.Free;
FCanvas.Free;
inherited Destroy;
end;procedure TDBDateTimePicker.DataChange(Sender: TObject);
begin
if FDataLink.Field=nil then Self.DateTime:=1
else
if FAllowChange then
begin
try
if FDataLink.Field.AsDateTime=0 then Self.DateTime :=1
else self.DateTime :=FDataLink.Field.AsDateTime;
except
Self.DateTime := 0;
end;
end;
end;procedure TDBDateTimePicker.Change;
begin
inherited;
with FDataLink do begin
FAllowChange:=False;
if not editing then Edit;
end;
FDatalink.Field.AsDateTime:=self.DateTime;
FAllowChange:=True;
end;procedure TDBDateTimePicker.CMExit(var Message: TWMNoParams);
begin
try
FDataLink.UpdateRecord;
except
on Exception do SetFocus;
end;
inherited;
end;function TDBDateTimePicker.GetDataField: string;
begin
Result:=FDataLink.FieldName;
end;function TDBDateTimePicker.GetDataSource: TDataSource;
begin
Result:=FDataLink.DataSource;
end;procedure TDBDateTimePicker.SetDataField(const Value: string);
begin
FDataLink.FieldName:=Value;
end;procedure TDBDateTimePicker.SetDataSource(Value: TDataSource);
begin
FDataLink.DataSource := Value;
end;procedure TDBDateTimePicker.WMPaint(var Message: TWMPaint);
begin
inherited;
if csDesigning in ComponentState then Exit;
if (DataSource = nil) or
(DataSource.DataSet = nil) or
(not DataSource.DataSet.Active) or
(DataField = '') or
(DataSource.DataSet.FieldByName(DataField).IsNull) and (not Focused) then
begin
FCanvas.Brush.Color := Color;
FCanvas.FillRect(Rect(0, 0, Width - GetSystemMetrics(SM_CXVSCROLL) - 4, Height));
// FCanvas.TextOut(1, 1, '空')
end;
end;procedure TDBDateTimePicker.EditingChange(Sender: TObject);
begin
Invalidate;
end;procedure TDBDateTimePicker.Enter(var Message: TMessage);
begin
inherited;
Invalidate;
end;procedure TDBDateTimePicker.SetReadOnly(const Value: Boolean);
begin
FReadOnly := Value;
end;