访问在另一个单元的实现部分中定义的类型



我在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!(。在编译过程中,复制的单元将优先于原始单元。注意:只有在未启用运行时软件包的情况下,这种方法才有效。

最新更新