在Firemonkey Delphi 10.3中,我创建了一个自定义的TFrame类型来添加功能:
TCustomFrame = class(TFrame);
TFrameObserver = class(TCustomFrame, IObserver)
public
procedure Update; virtual;
end;
然后我的框架继承自这个类:
TfStore = class(TFrameObserver)
一切都很好,我保存它,今天早上我在设计时打开时出现错误消息(在执行时也是如此):
您访问的页面不存在!
当我忽略这些错误时,我看到在.fmx中,它删除了属性:
Size.Width
Size.Height
Size.PlateformDefault
并添加:
ClientWidth
ClientHeight
如果我这么做,那就是工作:
TfStore = class(TFrame, IObserver)
我做错什么了吗?
复制:
- 创建一个新的Firemonkey项目
- 添加一个从下面的测试继承的TFrame:
类型IFrameTest =接口过程Test; return class();
TFrameITest = class(TFrameTest, IFrameTest)
procedure Test; virtual;
end;
TFrame1 = class(TFrameITest)
private
{ Déclarations privées }
public
procedure Test; override;
end;
关闭并打开项目以显示错误
下面是我的项目代码:
unit Unit2;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls;
type
IFrameTest = interface
procedure Test;
end;
TFrameTest = class(TFrame);
TFrameITest = class(TFrameTest, IFrameTest)
procedure Test; virtual;
end;
TFrame2 = class(TFrameITest)
private
{ Déclarations privées }
public
procedure Test; override;
end;
implementation
{$R *.fmx}
{ TFrameITest }
procedure TFrameITest.Test;
begin
//
end;
{ TFrame2 }
procedure TFrame2.Test;
begin
inherited;
//
end;
end.
和相应的FMX文件:
object Frame2: TFrame2
Size.Width = 320.000000000000000000
Size.Height = 240.000000000000000000
Size.PlatformDefault = False
end
1条答案
按热度按时间carvr3hs1#
TFrame是一个类,IDE为它做了特殊的魔术。
要从另一个框架继承一个框架,请首先使用IDE创建框架,然后使用IDE(菜单文件/新建/其他./ Inheritable items /选择第一帧)。
我知道你需要一个接口。在第一个(祖先)框架中定义它,并将其添加到类声明中。
当你拥有继承的框架时,你可以(不是强制的,取决于你想做什么)覆盖实现接口的虚方法。
下面是具有接口的基本帧(TFrame 3)的代码:
以及相应的FMX文件:
下面是继承帧(TFrame 4)的代码:
相应的FMX: