如何让TDateTimePicker控件显示为空而不是1899-12-30(200分)

  • 主题发起人 主题发起人 delphfan
  • 开始时间 开始时间
D

delphfan

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个数据敏感的DateTimePikcer控件,可令人头痛的是当所连日期字段值为空时
该控件显示为1899-12-30而不是空,我下载过类似的控件也存在这个问题,
请各位高手前辈赐教, 小生感激不尽
 
好像不可能,用MaskEdit吧
 
不可能把,除非你修改它的代码
 
很简单,集成下来,相应它的 OnDataChange 事件。
判断如果是 1899-12-30 就将值设置为 空
 
不能的。是borland 在tdatatime 中自定以的 (默认启示时间为1899-12-30 ) 。
载过类似的控件也是从他那里继承过来的 。所以。。。。。
 
哦,我看错了。

DateTimePicker是调用的系统控件,我们是没有办法修改它的属性的。
除非。。。。你继承下来,重新写一遍?
Override WM_Paint 消息处理函数???
 
var
ss:tdatetime;


ss:=strtodate('2001-10-10'');
datetimepicker1.date:=ss;
 
这是一个简单的演示程序,可以使TDateTimePicker不显示任何东西哦[:D]。

type
TForm1 = class(TForm)
...
private
FNewWndProc, FOldWndProc: TFarProc;
procedure MyWndProc(var Msg: TMessage);
...
end;

procedure TForm1.MyWndProc(var Msg: TMessage);
begin
if Msg.Msg = WM_PAINT then
else
Msg.Result := CallWindowProc(FOldWndProc,
DateTimePicker1.Handle, Msg.Msg,
Msg.wParam, Msg.lParam);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
RestoreWndProc;
end;

procedure TForm1.RestoreWndProc;
begin
SetWindowLong(DateTimePicker1.Handle, GWL_WNDPROC,
LongInt(FOldWndProc));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FOldWndProc := Pointer(GetWindowLong(
DateTimePicker1.Handle, GWL_WNDPROC));
FNewWndProc := MakeObjectInstance(MyWndProc);
SetWindowLong(DateTimePicker1.Handle, GWL_WNDPROC,
LongInt(FNewWndProc));
end;

 
接受答案了.
 
后退
顶部