!关于MonthCalendar的有关问题
紧急求助!关于MonthCalendar的问题。
在网上没找到答案,希望大家帮助,一有正确答案,马上结帖给高分,不再大面积散分。
我想单击MonthCalendar里的日期,然后加到DBEdit中,但单击其它地方,日期同样会加上去。
怎么判断单击的是日期,而不是上边那两个按钮或其它地方呢?
先谢谢大家!
------解决方案--------------------
这是D7写的一个简单示例,主要是重写MouseUp这个过程,捕捉鼠标的区域,在区域内获取日期,否则不获取。
在网上没找到答案,希望大家帮助,一有正确答案,马上结帖给高分,不再大面积散分。
我想单击MonthCalendar里的日期,然后加到DBEdit中,但单击其它地方,日期同样会加上去。
怎么判断单击的是日期,而不是上边那两个按钮或其它地方呢?
先谢谢大家!
------解决方案--------------------
这是D7写的一个简单示例,主要是重写MouseUp这个过程,捕捉鼠标的区域,在区域内获取日期,否则不获取。
- Delphi(Pascal) code
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TMonthCalendar = class(ComCtrls.TMonthCalendar) protected procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; end; TForm1 = class(TForm) Edit1: TEdit; MonthCalendar1: TMonthCalendar; private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TMonthCalendar.MouseMove(Shift: TShiftState; X, Y: Integer); begin inherited; Form1.Caption := Format('X:%d,Y:%d',[X,Y]); end; procedure TMonthCalendar.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var r: TRect; begin inherited; with Form1.MonthCalendar1 do r := Rect(15,48,Left+Width,Top+Height); if PtInRect(r,Point(X,Y)) then Form1.Edit1.Text := FormatDateTime('yyyy-mm-dd',Form1.MonthCalendar1.Date); end; end.
------解决方案--------------------
r := Rect(15,48,Left+Width,Top+Height);这个区域有点牵强了,如果分辨率不同,字体不同,就不对了
个人感觉,没必要纠结这个
------解决方案--------------------
Delphi7版本MonthCalendar,有BUG。当 DATAMode设置为模式dmUpDown时,每年的4月有10号,不能使用。
------解决方案--------------------
我也遇到同样的问题。我一般是尽量给客户自动输入一个日期,当需要修改日期时,调出这个控件,选好日期后双击输上去。就是说有问题的东西尽量少用,不过还是咱们水平低,否则改进一下可能就行。