码迷,mamicode.com
首页 > 其他好文 > 详细

FireMonkey 继承Frame存在的问题

时间:2020-03-02 12:57:02      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:str   pos   运行时   frame   code   一行代码   object   size   image   

在FireMonkey项目中,我建立一个TFrame,放置一个Text对象,然后设置:

技术图片

设置Text1.Margins.Right为49。

现在我们有了一个TFrame2类,从这个类再继承一个新的TFrame。

技术图片

 

现在我们从Frame2继承出一个Frame3,然后,我们设置Frame3:

技术图片

 

把Text1.Margins.Right设置为0.

问题马上要出来了,我们再把Frame3放置到Form上,然后写一行代码,看看运行期Text1.Margins.Right的值为多少?

procedure TForm1.FormCreate(Sender: TObject);
begin
  Text1.Text:=Frame31.Text1.Margins.Right.ToString;
end.

这里,竟然是49!也就是说,我们在设计期,在TFrame3做的修改,会被TFrame2覆盖掉。

进一步测试,把Text1.Margins.Right设置为100,显示正常了!

再进一步测试,把Text1.Text的值进行修改,这个属性也不存在上面的问题。

为什么会产生这样的结果呢?

打开窗体的DFM文件,进一步分析原因,原来,当我们修改Text1.Margins.Right=0时,不会记录到DFM中,而改成非0的任意值,则会记录到DFM中。下面是Form1的DFM代码:

object Form1: TForm1

  ...
  inline Frame31: TFrame3
    Position.X = 248.000000000000000000
    Position.Y = 112.000000000000000000
    Size.Width = 379.000000000000000000
    Size.Height = 290.000000000000000000
    Size.PlatformDefault = False
    inherited Text1: TText
      Margins.Right = 100.000000000000000000
      Text = ‘‘
    end
  end
end

我们看到,在DFM文件中,Frame31中Text1对象前面有Inherited,表示从父类继承,如果这里没有属性值定义,则自动从父类继承。当我们修改Margins.Right=0时,不会存在DFM中,运行时,自动从父类TFrame2继承来49!问题就是这样了,等官方解决吧。

 

FireMonkey 继承Frame存在的问题

标签:str   pos   运行时   frame   code   一行代码   object   size   image   

原文地址:https://www.cnblogs.com/kinglandsoft/p/12394765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!