我在Delphi Firemonkey中对FMX.Calendar.Style进行子类化,以便为TCalendar组件添加更多功能。我想添加"拖动选择"多天(一天范围(。我有一个粗略的工作原理证明。我正在FMX.Calendar.Style中对TStyledCalendar进行子类化。
为了提取选定的日期,我需要转换为TDayItem。问题是TDayItem类型是在实现部分中定义的,因此在具有新类的其他单元中不可访问。
有办法访问它吗?
unit FMX.Calendar.Style;
interface
{$SCOPEDENUMS ON}
uses
System.Classes, .., ..
type
{ TStyledCalendar }
TStyledCalendar = class(TStyledPresentation)
public const
CountOfVisibleDays = 6 * 7;
..
..
..
end;
implementation
uses
System.SysUtils, .. ..
type
TDayItem = class(TListBoxItem)
private
FDate: TDateTime;
public
property Date: TDateTime read FDate write FDate;
end;
..
..
不幸的是,一个单元根本无法访问在另一个单元的implementation
部分中声明的类型(或变量或常量(。只有在单元的interface
部分中声明的项才能被其他单元访问。一个单元的implementation
部分只能由它所属的单元访问。
在这种情况下,您有两个选择:
-
将
TDayItem
的声明复制到您自己的单元中,然后根据需要将ListBox项类型转换为该类型。然后查看FMX对TDayItem
的声明,了解每个新版本/补丁中的更改,以便相应地更新代码。 -
制作
FMX.Calander.Style.pas
的副本,并将该副本添加到您的项目中。然后,您可以随意更改副本的implementation
(但不能更改其interface
!(。在编译过程中,复制的单元将优先于原始单元。注意:只有在未启用运行时软件包的情况下,这种方法才有效。