我正在创建一个继承自TMSFMXGrid的自定义组件。我正在使用RAD XE3在Firemonkey中进行开发。 一切正常,除了样式没有正确应用(我认为这是因为我的自定义组件的父级也继承了父类的样式)。 基本层次结构是TMSCustomGrid-> TMSGrid - > MyCustomGrid
进行一些研究,我认为正确应用样式的最佳方法我需要实现如下:
type
MyCustomGrid= class(TTMSFMXGrid)
protected
function GetClassStyleName: String; override;
end;
implementation
{ MyCustomGrid}
function TTestGrid.GetClassStyleName: String;
begin
Result := ClassParent.ClassName + 'style';
Delete(Result, 1, 1);
end;
这在设计时工作正常,但在运行时我收到以下错误:
[dcc32错误] FMX.TMSCustomGrid.pas(505):E2065不满意的前向或外部声明:'TTMSFMXCustomGrid.ApplyStyle'
查看TMSCustomGrid.pas源文件,我得到以下内容
TTMSFMXCustomGrid = class(TTMSFMXGridData)
....
public
procedure ApplyStyle; override;
....
ApplyStyle没有实现。此外,在我的自定义组件的父类中,未声明此方法。
当我在FMX.TMSCustomGrid.pas源代码中注释掉ApplyStyle过程时,一切都可以从我的自定义组件中正常工作。但是,当我创建TMSGrid(它是我的组件的父组件)时,样式未正确应用。
我感到困惑。为什么函数GetClassStyleName会抛出有关ApplyStyle过程的错误? 是否有一种方法可以取消继承方法(如果这样做甚至有意义?)