首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

!关于MonthCalendar的有关问题

2012-04-30 
紧急求助!关于MonthCalendar的问题。在网上没找到答案,希望大家帮助,一有正确答案,马上结帖给高分,不再大面

紧急求助!关于MonthCalendar的问题。
在网上没找到答案,希望大家帮助,一有正确答案,马上结帖给高分,不再大面积散分。
我想单击MonthCalendar里的日期,然后加到DBEdit中,但单击其它地方,日期同样会加上去。
怎么判断单击的是日期,而不是上边那两个按钮或其它地方呢?
先谢谢大家!

[解决办法]
这是D7写的一个简单示例,主要是重写MouseUp这个过程,捕捉鼠标的区域,在区域内获取日期,否则不获取。

Delphi(Pascal) code
unit Unit1;interfaceuses  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号,不能使用。
[解决办法]
我也遇到同样的问题。我一般是尽量给客户自动输入一个日期,当需要修改日期时,调出这个控件,选好日期后双击输上去。就是说有问题的东西尽量少用,不过还是咱们水平低,否则改进一下可能就行。

热点排行