关于delphi 7 Calendar 控件的一个小问题

时间:2021-11-20 14:32:12
delphi 7.0
如何能实现 Calendar 控件的 日期中 当天的小格格显示颜色为红色。这样可以区别出 当天和其他天。现在是当鼠标点击了其他天后 就看不出今天是哪天了。
关于delphi 7 Calendar 控件的一个小问题

16 个解决方案

#1


自己顶一下 顶一下下

#2


自己顶一下 顶一下下!

#3


有两种方法:
1.
将控件的defaultdrawing属性设为false。
为OnDrawGridCell事件添加个事件处理程序,在事件处理程序中自绘日历。
2
从原来的TCalendar控件派生出一个新控件TNewCalendar。
然后重写(override)的DrawGridCell 方法。在方法中自绘日历。

可能叫DrawGridCell吧,我记不太清了,也可能叫CustomDrawGridCell,你自己找找看。

#4


这个控件里没有OnDrawGridCell 这个事件啊

#5


楼主的图中右边是另一个控件, 是 TMonthCalendar , 而左边是 TCalendar, 不妨换一下.

#6


 不想换  右边的 日期选项太难看了

#7



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, Calendar;

type
  TCalendar = class(Calendar.TCalendar)
  protected
    procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
  public

  end;

  TForm1 = class(TForm)
    cal1: TCalendar;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses DateUtils;

{$R *.dfm}

{ TCalendar }

procedure TCalendar.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState);
var
  TheText: string;
  vDay: string;
begin
  TheText := CellText[ACol, ARow];
  vDay := IntToStr(DateUtils.DayOf(Now));
  if vDay = TheText then
  begin
    //当天自定义样式
    Canvas.Brush.Color := clRed;
  end else
  begin
    if  (gdSelected in AState) or (gdFocused in AState) then
    Canvas.Brush.Color := clBlue;
  end;
  inherited;

end;

end.


#8


引用 7 楼 jayqiang 的回复:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, Calendar;

type
  TCalendar = class(Calendar.TCalendar)
  protected
    procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
  public

  end;

  TForm1 = class(TForm)
    cal1: TCalendar;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses DateUtils;

{$R *.dfm}

{ TCalendar }

procedure TCalendar.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState);
var
  TheText: string;
  vDay: string;
begin
  TheText := CellText[ACol, ARow];
  vDay := IntToStr(DateUtils.DayOf(Now));
  if vDay = TheText then
  begin
    //当天自定义样式
    Canvas.Brush.Color := clRed;
  end else
  begin
    if  (gdSelected in AState) or (gdFocused in AState) then
    Canvas.Brush.Color := clBlue;
  end;
  inherited;

end;

end.



用了这个方法   提示这个错误
[Error] datetool.pas(36): Method 'DrawCell' not found in base class
应该是没有DrawCell 这个类吧 

#9


关于delphi 7 Calendar 控件的一个小问题

http://blog.csdn.net/lyhoo163/article/details/52554202

这是我的博客文章。请参阅,解决了你的问题。 

#10


http://download.csdn.net/detail/lyhoo163/9631356

 源码及详细说明文章,下载地址。

#11


没有下载积分了

#12


email, 转给你

#13


引用 楼主 crazy_boom 的回复:
delphi 7.0
如何能实现 Calendar 控件的 日期中 当天的小格格显示颜色为红色。这样可以区别出 当天和其他天。现在是当鼠标点击了其他天后 就看不出今天是哪天了。
关于delphi 7 Calendar 控件的一个小问题


兄弟,右边的那日历控件是什么?谢谢!

#14


引用 12 楼 lyhoo163 的回复:
email, 转给你


980329@qq.com   谢谢lyh00163大哥

#15


引用 13 楼 dzers 的回复:
Quote: 引用 楼主 crazy_boom 的回复:

delphi 7.0
如何能实现 Calendar 控件的 日期中 当天的小格格显示颜色为红色。这样可以区别出 当天和其他天。现在是当鼠标点击了其他天后 就看不出今天是哪天了。
关于delphi 7 Calendar 控件的一个小问题


兄弟,右边的那日历控件是什么?谢谢!


monthcalendar 这个控件啊 win32里的控件啊

#16


引用 14 楼 crazy_boom 的回复:
Quote: 引用 12 楼 lyhoo163 的回复:

email, 转给你


980329@qq.com   谢谢lyh00163大哥


已发送。

#1


自己顶一下 顶一下下

#2


自己顶一下 顶一下下!

#3


有两种方法:
1.
将控件的defaultdrawing属性设为false。
为OnDrawGridCell事件添加个事件处理程序,在事件处理程序中自绘日历。
2
从原来的TCalendar控件派生出一个新控件TNewCalendar。
然后重写(override)的DrawGridCell 方法。在方法中自绘日历。

可能叫DrawGridCell吧,我记不太清了,也可能叫CustomDrawGridCell,你自己找找看。

#4


这个控件里没有OnDrawGridCell 这个事件啊

#5


楼主的图中右边是另一个控件, 是 TMonthCalendar , 而左边是 TCalendar, 不妨换一下.

#6


 不想换  右边的 日期选项太难看了

#7



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, Calendar;

type
  TCalendar = class(Calendar.TCalendar)
  protected
    procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
  public

  end;

  TForm1 = class(TForm)
    cal1: TCalendar;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses DateUtils;

{$R *.dfm}

{ TCalendar }

procedure TCalendar.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState);
var
  TheText: string;
  vDay: string;
begin
  TheText := CellText[ACol, ARow];
  vDay := IntToStr(DateUtils.DayOf(Now));
  if vDay = TheText then
  begin
    //当天自定义样式
    Canvas.Brush.Color := clRed;
  end else
  begin
    if  (gdSelected in AState) or (gdFocused in AState) then
    Canvas.Brush.Color := clBlue;
  end;
  inherited;

end;

end.


#8


引用 7 楼 jayqiang 的回复:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, Calendar;

type
  TCalendar = class(Calendar.TCalendar)
  protected
    procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
  public

  end;

  TForm1 = class(TForm)
    cal1: TCalendar;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses DateUtils;

{$R *.dfm}

{ TCalendar }

procedure TCalendar.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState);
var
  TheText: string;
  vDay: string;
begin
  TheText := CellText[ACol, ARow];
  vDay := IntToStr(DateUtils.DayOf(Now));
  if vDay = TheText then
  begin
    //当天自定义样式
    Canvas.Brush.Color := clRed;
  end else
  begin
    if  (gdSelected in AState) or (gdFocused in AState) then
    Canvas.Brush.Color := clBlue;
  end;
  inherited;

end;

end.



用了这个方法   提示这个错误
[Error] datetool.pas(36): Method 'DrawCell' not found in base class
应该是没有DrawCell 这个类吧 

#9


关于delphi 7 Calendar 控件的一个小问题

http://blog.csdn.net/lyhoo163/article/details/52554202

这是我的博客文章。请参阅,解决了你的问题。 

#10


http://download.csdn.net/detail/lyhoo163/9631356

 源码及详细说明文章,下载地址。

#11


没有下载积分了

#12


email, 转给你

#13


引用 楼主 crazy_boom 的回复:
delphi 7.0
如何能实现 Calendar 控件的 日期中 当天的小格格显示颜色为红色。这样可以区别出 当天和其他天。现在是当鼠标点击了其他天后 就看不出今天是哪天了。
关于delphi 7 Calendar 控件的一个小问题


兄弟,右边的那日历控件是什么?谢谢!

#14


引用 12 楼 lyhoo163 的回复:
email, 转给你


980329@qq.com   谢谢lyh00163大哥

#15


引用 13 楼 dzers 的回复:
Quote: 引用 楼主 crazy_boom 的回复:

delphi 7.0
如何能实现 Calendar 控件的 日期中 当天的小格格显示颜色为红色。这样可以区别出 当天和其他天。现在是当鼠标点击了其他天后 就看不出今天是哪天了。
关于delphi 7 Calendar 控件的一个小问题


兄弟,右边的那日历控件是什么?谢谢!


monthcalendar 这个控件啊 win32里的控件啊

#16


引用 14 楼 crazy_boom 的回复:
Quote: 引用 12 楼 lyhoo163 的回复:

email, 转给你


980329@qq.com   谢谢lyh00163大哥


已发送。