zoukankan      html  css  js  c++  java
  • FireMonkey 继承Frame存在的问题

    在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中,看下面代码:

    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
          Text = ''
        end
      end
    end

    现在改成非0的任意值,则会记录到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!问题就是这样了,等官方解决吧。

  • 相关阅读:
    cf 1155 d 最大区间和(变形 区间*x)
    俄罗斯方块的形状暴力
    cf 1160 E dp 组合数 思维
    cf 1110d dp(题目特殊性质)
    cf 1114d 区间dp 0,1标记左右
    poj 1426 bfs
    poj 1679 最小生成树是否唯一
    cf 1106e dp
    【PAT顶级】1002 Business (35分)(0/1背包,DP)
    【PAT顶级】1001 Battle Over Cities
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/12394765.html
Copyright © 2011-2022 走看看