自己做的日期控件,为什么在win98下可以,在win2000却不行(附源代码)

myxfang 2001-07-25 11:10:03
做选择日期的控件(TDBEDit+Tdatetimepicker)
源代码:
unit fDBdateEdit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Mask, DBCtrls,comctrls;

type
TfDBDateEdit1 = class(TDBEdit)
t1:Tdatetimepicker;
private
{ Private declarations }
protected
{ Protected declarations }
procedure dbchange(Sender: TObject);
procedure change;override;//去掉这一行和下面的过程就可以
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Free', [TfDBDateEdit1]);
end;

constructor TfDBDateEdit1.Create(AOwner: TComponent);
begin
inherited create(AOwner);
t1:=Tdatetimepicker.Create(self);
t1.parent:=self;
t1.Left:=left-2;
t1.Top:=top-2;
t1.height:=height;
t1.Width:=width;
t1.onchange:=dbchange;
end;

procedure TfDBDateEdit1.dbchange(Sender: TObject);
begin
DataSource.Edit;
Field.AsDateTime:=t1.date;
end;

procedure TfDBDateEdit1.change;
begin
if Field.AsDateTime>0 then
t1.date:=Field.AsDateTime;
end;

end.
...全文
152 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangt 2001-07-25
  • 打赏
  • 举报
回复
1,你查一下tdbedit.change的声明,看看是不是有什么特别,
2,报错的内容是什么?
3,2000有比98严格的多的消息管理机制,你没犯着它吧?
myxfang 2001-07-25
  • 打赏
  • 举报
回复
高手???
myxfang 2001-07-25
  • 打赏
  • 举报
回复
win2000
flytiger1977 2001-07-25
  • 打赏
  • 举报
回复
你的开发环境是win98?
myxfang 2001-07-25
  • 打赏
  • 举报
回复
谢谢jingpingyi(jingpingyi)
再给10分
jingpingyi 2001-07-25
  • 打赏
  • 举报
回复
//不好意思,把你的控件改了一点
//我在 win2000+delphi6 下使用没有问题。
unit DbDateEdit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Mask, DBCtrls,comctrls;

type
TDBDateEdit = class(TDBEdit)
DateTimePicker: TDateTimePicker;
private
{ Private declarations }
protected
{ Protected declarations }
procedure DBChange(Sender: TObject);
procedure Change;override;
public
{ Public declarations }
constructor Create(Owner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Free', [TDBDateEdit]);
end;

constructor TDBDateEdit.Create(Owner: TComponent);
begin
inherited Create(Owner);

DateTimePicker := TDateTimePicker.Create(self);
DateTimePicker.Parent := self;
DateTimePicker.Left := Left - 1;
DateTimePicker.Top := Top - 1;
DateTimePicker.Height := Height;
DateTimePicker.Width := Width;
DateTimePicker.OnChange := DBChange;
end;

procedure TDBDateEdit.DBChange(Sender: TObject);
begin
if DataSource <> nil then
begin
DataSource.Edit;
Field.AsDateTime := DateTimePicker.Date;
end;
end;

procedure TDBDateEdit.Change;
begin
if DataSource <> nil then
if Field.AsDateTime > 0 then
DateTimePicker.Date := Field.AsDateTime;
end;

destructor TDBDateEdit.Destroy;
begin
DateTimePicker.Free;

inherited;
end;

end.
myxfang 2001-07-25
  • 打赏
  • 举报
回复
编译不出错(Delpli5+win2000)
在把控件放在form上就出错
错误信息:
Access violation at address 5100213E in modue 'dclusr50.bpl',Read of address 00000000

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧