unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls;type TForm1 = class(TForm) DateTimePicker1: TDateTimePicker; procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); private { Private declarations } public procedure mymessage(var Msg: TMsg; var Handled: Boolean); end;var Form1: TForm1;implementationuses Types;{$R *.dfm}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pt : TPoint; rt : TRect; begin if ssRight in Shift then begin if GetCursorPos(pt) then begin rt := DateTimePicker1.BoundsRect; if PtInRect(rt,pt) then ShowMessage('ok') end; end; end;procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := mymessage; end;procedure TForm1.mymessage(var Msg: TMsg; var Handled: Boolean); var pt : TPoint; spt : TSmallPoint; rt : TRect; begin if msg.message = WM_lBUTTONDOWN then begin if GetCursorPos(pt) then begin GetWindowRect(DateTimePicker1.Handle,rt); if PtInRect(rt,pt) then begin DateTimePicker1.DateTime := DateTimePicker1.DateTime+ 1; end; end; end; inherited; end;end.
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls;type TForm1 = class(TForm) DateTimePicker1: TDateTimePicker; procedure FormCreate(Sender: TObject); private { Private declarations } public procedure mymessage(var Msg: TMsg; var Handled: Boolean); end;var Form1: TForm1;implementationuses Types;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := mymessage; end;procedure TForm1.mymessage(var Msg: TMsg; var Handled: Boolean); var pt : TPoint; spt : TSmallPoint; rt : TRect; begin if msg.message = WM_lBUTTONDOWN then begin if GetCursorPos(pt) then begin GetWindowRect(DateTimePicker1.Handle,rt); if PtInRect(rt,pt) then begin DateTimePicker1.DateTime := DateTimePicker1.DateTime+ 1; end; end; end; inherited; end;end. 用这个. 自己再判断下数据集的状态后再处理就OK了。
to starluck 不好意思,可能我没有把问题描述清楚。这里我重新描述一下我的问题:DBDateTimeEditEh控件使用时,弹出日期选择框后,在文本输入框里面单击鼠标左键,日期会自动往前走,每单击一次日期就会自动往前一天。现在我不希望他这样,就是在文本输入框里面单击鼠标左键时日期不要变化。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;type
TForm1 = class(TForm)
DateTimePicker1: TDateTimePicker;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure mymessage(var Msg: TMsg; var Handled: Boolean); end;var
Form1: TForm1;implementationuses Types;{$R *.dfm}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
pt : TPoint;
rt : TRect;
begin
if ssRight in Shift then
begin
if GetCursorPos(pt) then
begin
rt := DateTimePicker1.BoundsRect;
if PtInRect(rt,pt) then ShowMessage('ok')
end; end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := mymessage;
end;procedure TForm1.mymessage(var Msg: TMsg; var Handled: Boolean);
var
pt : TPoint;
spt : TSmallPoint;
rt : TRect;
begin
if msg.message = WM_lBUTTONDOWN then
begin
if GetCursorPos(pt) then
begin
GetWindowRect(DateTimePicker1.Handle,rt);
if PtInRect(rt,pt) then
begin
DateTimePicker1.DateTime := DateTimePicker1.DateTime+ 1;
end;
end;
end; inherited;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;type
TForm1 = class(TForm)
DateTimePicker1: TDateTimePicker;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure mymessage(var Msg: TMsg; var Handled: Boolean); end;var
Form1: TForm1;implementationuses Types;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := mymessage;
end;procedure TForm1.mymessage(var Msg: TMsg; var Handled: Boolean);
var
pt : TPoint;
spt : TSmallPoint;
rt : TRect;
begin
if msg.message = WM_lBUTTONDOWN then
begin
if GetCursorPos(pt) then
begin
GetWindowRect(DateTimePicker1.Handle,rt);
if PtInRect(rt,pt) then
begin
DateTimePicker1.DateTime := DateTimePicker1.DateTime+ 1;
end;
end;
end; inherited;
end;end.
用这个. 自己再判断下数据集的状态后再处理就OK了。