zoukankan      html  css  js  c++  java
  • FMX从TCustomXXX继承控件的子控件,无法同时显示的问题

    这个问题,我在盒子发了,也没有满意的结果。

    (http://bbs.2ccc.com/topic.asp?topicid=535134)



    模仿FMX的标准TPanel控件(这个控件没有什么实现的代码),自己写了个Panel,可以实现改变颜色及Stroke等属性,就是增加这几个属性:
        //Appreance
        property Fill;
        property Stroke;
        property Cornered;
        property CornerSize;
        property FaceColor;

    通过以下2个方法加载Style及得到Style的TRectangle对象

        function GetStyleObject: TFmxObject; override;
        procedure ApplyStyle; override;

    实现代码:
    function TMyPanel.GetStyleObject: TFmxObject;
    begin
      if StyleLookup.IsEmpty then
       Result := TStyleManager.GetStyleResource(DefStyleName)
      else
        inherited;
    end;

    procedure TMyPanel.ApplyStyle;
    begin
      inherited;

      if FindStyleResource<TRectangle>(DefStyleName, FAppreance) then
      begin
        if FAppreance <> nil then
        begin
          FAppreance.Fill.Assign(FFill);
          FAppreance.Stroke.Assign(FStroke);
          if FCornered then
            FAppreance.Corners := [TCorner.TopLeft, TCorner.TopRight, TCorner.BottomLeft, TCorner.BottomRight]
          else
            FAppreance.Corners := [];
          FAppreance.CornerType := TCornerType.Round;
          FAppreance.XRadius := FCornerSize;
          FAppreance.YRadius := FCornerSize;
          FAppreance.Align := TAlignLayout.Client;
          FAppreance.Anchors := [TAnchorKind.akLeft, TAnchorKind.akTop];
        end;
      end;
    end;

    FAppreance就是Style中的Rectangle

    但是,有一个大问题,这样的控件当设置了Parent时,只能显示最后创建的一个,前面的全部不显示,不管其Parent是不是一样的。估计是丢失了Style,所以对象存在,但是显示不了。
    简单跟踪了下,在设置控件Parent,发生了许多事,看的晕乎乎。

    就是创建多个Panel时,为什么只显示最后一个Panel!!!!!

    这几天又在折腾这个问题,现在DELPHI帮助里的 FMX控件开发指导,还是DELPHIXE5还是XE6时候的帮助,无语了,都不一样了,还误导开发者。


    上面代码的GetStyleObject方法的写法是不对的

    因为是用自己的Style资源,所以还是得明确从Res文件加载,


    function TJKCustomPanelButton.GetStyleObject: TFmxObject;
    begin
      if StyleLookup = '' then
      begin
        //Result := TStyleManager.GetStyleResource(DefJkPanelButtonStyleName);
        Result := TStyleStreaming.LoadFromResource(HInstance, DefJkPanelButtonStyleName, RT_RCDATA);
      end
      else
        inherited GetStyleObject;
    end;

    这样就可以了,深层原因就不知道了,这里的代码转的厉害,看的晕呼呼。

  • 相关阅读:
    Xcode修改新建项目注释模板(作者和公司名等)
    Xcode全局替换内容,一键Replace
    The type javax.ws.rs.core.MediaType cannot be resolved. It is indirectly referenced from required .class files
    IT公司的女流之辈
    论公司的核心竞争力
    人性
    如何使用yum 下载 一个 package ?如何使用 yum install package 但是保留 rpm 格式的 package ? 或者又 如何通过yum 中已经安装的package 导出它,即yum导出rpm?
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files.
    maven repo plugin archiver
    Error connecting to database [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)]
  • 原文地址:https://www.cnblogs.com/jankerxp/p/7774023.html
Copyright © 2011-2022 走看看