在TCalendar中高亮单元格
有没有办法在Delphi的 TCalendar 组件中同时高亮显示若干不相邻的单元格?不仅仅是当天的日期?
我需要让用户在不同的单元格中标记不同的日期,彼此不一定相邻。可以是文本、背景,或两者都使用与未标记单元格不同的颜色。
我正在使用Delphi 12.3。
解决方案
当然。你可以重写 TCalendar.DrawCell 过程来实现你想要的任意自定义绘制。
不过,请注意,这需要你对控件内部实现有一定了解。
下面是一个简单的示例:
{ TCalendar }
procedure TCalendar.DrawCell(ACol, ARow: Longint; ARect: TRect;
AState: TGridDrawState);
begin
if (ACol mod 3 = 0) and (ARow = 2) and not (gdSelected in AState) then
Canvas.Brush.Color := clSilver;
inherited;
end;
在这个简单的例子中,我只是简单地假设文本在 clSilver 背景上是清晰可读的。 在生产代码中,你不能做出这样的假设。
另外,请注意,这种方法返回的是单元格的行和列,而不是日期。你很可能希望以日期来处理。要在日期和(行、列)之间进行转换,请遵循控件其余部分相同的逻辑。
例如,在 TCalendar.GetCellText 的实现中,我看到
DayNum := FMonthOffset + ACol + (ARow - 1) * 7;
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
