首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

FireMonkey FlowLayout未刷新基于可见属性的项目

基础概念

FireMonkey(FMX)是Embarcadero(原Borland)开发的一个跨平台UI框架,用于构建Windows、macOS、iOS和Android应用程序。FlowLayout是一种布局控件,它允许子控件按照流式布局排列,即子控件会从左到右排列,当一行填满后会自动换行。

问题描述

在使用FireMonkey的FlowLayout时,可能会遇到基于可见属性的项目未刷新的问题。这意味着当某个项目的可见性发生变化时,FlowLayout可能不会重新排列或更新显示。

原因分析

  1. 布局更新机制:FlowLayout可能没有正确检测到可见性变化,导致没有触发重新布局。
  2. 性能优化:为了提高性能,FlowLayout可能会延迟更新布局,这在某些情况下可能导致问题。
  3. 编程错误:可能在设置可见性时没有正确通知布局控件。

解决方法

1. 强制刷新布局

可以通过编程方式强制刷新FlowLayout的布局。以下是一个示例代码:

代码语言:txt
复制
uses
  FMX.Layouts;

procedure TForm1.UpdateFlowLayout;
begin
  // 获取FlowLayout控件
  var FlowLayout := TFlowLayout(FindComponent('FlowLayout1'));
  if Assigned(FlowLayout) then
  begin
    // 强制刷新布局
    FlowLayout.BeginUpdate;
    try
      FlowLayout.EndUpdate;
    except
      FlowLayout.CancelUpdate;
      raise;
    end;
  end;
end;

2. 使用OnUpdate事件

可以在FlowLayout上设置OnUpdate事件,当布局需要更新时手动调用该事件。

代码语言:txt
复制
procedure TForm1.FlowLayout1Update(Sender: TObject);
begin
  // 手动更新布局
  UpdateFlowLayout;
end;

3. 确保可见性变化通知

确保在设置控件的可见性时,正确通知父容器。

代码语言:txt
复制
procedure TForm1.SetVisibility(AControl: TControl; AVisible: Boolean);
begin
  if AControl.Visible <> AVisible then
  begin
    AControl.Visible := AVisible;
    // 通知父容器布局需要更新
    AControl.Parent.InvalidateLayout;
  end;
end;

应用场景

这个问题通常出现在需要动态显示或隐藏控件的应用场景中,例如:

  • 仪表盘:根据用户的选择动态显示或隐藏不同的图表和数据。
  • 设置页面:根据用户的选择动态显示或隐藏不同的设置选项。
  • 数据列表:根据数据的可见性动态调整列表项的显示。

参考链接

通过以上方法,可以有效解决FireMonkey FlowLayout未刷新基于可见属性的项目的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【图表组件套件】上海道宁为开发人员提供Steema下载、试用、教程

如果您正在构建仪表板,您可以在每个仪表板面板上放置多个可调整大小的图表。FireMonkey框架将处理不同平台的大部分变化。...05、使用数据可视化工具构建信息仪表板这个Delphi FireMonkey项目提供了一个包含图表、网格和地图的仪表板报告。...图片三、TeeGrid VCL简介Delphi VCL & FMX 的网格组件为您的 RAD Studio 项目提供了一个非常快速的网格。...图片03、代码组件TeeGrid“Ticker”组件在值更新时自动刷新网格单元格。选项包括FadeColors、Delay、Higher.Color、Lower.Color和RefreshSpeed。...它的功能集包括排序、过滤、编辑和分组数据等功能,以及许多用于自定义表格数据外观的格式化属性。图片

3K10

Android:支持单选,多选,还可以限制选择的数量的流式布局

项目地址 用法 在app的build.grade中加入依赖 dependencies { compile 'com.zhy:flowlayout-lib:1.0.3' } 声明 在布局文件中声明: 支持属性: max_select:-1为不限制选择数量,>=1的数字为控制选择tag的数量 auto_select_effect 是否开启默认的选中效果,即为selector中设置的效果,默认为true...= mFlowLayout.getSelectedList(); 虽然功能挺多了,但是还是不能满足我的要求,因为我的项目中在展示完数据后还可以手动的添加新的标签,此项目没有设置添加新数据的方法.虽然有刷新数据的方法...,但是这样之前选中的标签也会一块刷新,也就是等于重置.于是我就结合刷新数据的方法和设置默认选中的方法,解决了我的问题.下面放代码 前面的设置都是一样的,重复的步骤就不写了....,还保证了选中的item状态.完美 大家可根据自己的项目实际需要进行代码的修改

95520
  • Delphi XE5中的新增内容

    比较基于网络或基于基本语言的应用,您的Android和iOS 应用会具有快捷的原生性能、以及更佳安全性。 针对具有多种设备类型、分辨率、和方向的 iOS 用户界面,使用完全可视化设计器。...通过FireDAC 企业数据库连接、DataSnap n层中间件、以及通过MBaas提供者访问基于云端的RESTful web服务,迅速连接您的应用到内部部署或云端中的企业数据库和服务。...iOS,并带有不受限的部署许可证 FireDAC 可单独使用,大部分特性仅在企业版及以上有效 FireMonkey传感器对位置、方向和运动的支持 FireMonkey框架和全新的 TListView 组件...2009 Unicode 功能区控件 Robust 项目管理 重要的DataSnap 升级 泛型和匿名方法 Develop iOS应用 with Delphi iOS ARM编译器、工具链、全新的可视化开发环境和针对...项目管理 重要的DataSnap 升级 泛型和匿名方法 在Embarcadero doc wiki上查看Delphi XE5 中更多新增内容。

    2.2K40

    Java基础-25(01)图形用户界面编程GUI

    1:如何让Netbeans的东西Eclipse能访问。 在Eclipse中创建项目,把Netbeans项目的src下的东西给拿过来即可。...注意:修改项目编码为UTF-8 2:GUI(了解) (1)用户图形界面 GUI:方便直观 CLI:需要记忆一下命令,麻烦 (2)两个包: java.awt:和系统关联较强 javax.swing...(4)事件监听机制(理解) A:事件源 事件发生的地方 B:事件 就是要发生的事情 C:事件处理 就是针对发生的事情做出的处理方案 D:事件监听 就是把事件源和事件关联起来 举例:人受伤事件。...WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); // 设置窗体可见...(ch>='0' && ch<='9')){ e.consume(); } } }); // 设置窗体可见 f.setVisible(true); } }

    1.6K60

    Java图形用户界面设计的布局管理器

    然后,我们将窗口的布局管理器设置为 FlowLayout。接下来,我们创建了四个按钮,并使用 frame.add() 方法将它们添加到窗口中。最后,我们将窗口设置为可见。...设置受该对象控制的 GUI 组件横向跨越多少个网格,如果属性值为 GridBagContraints.REMAIND,则表明当前组件是横向最后一个组件,如果属性值为GridBagConstraints.RELATIVE...gridheight 设置受该对象控制的 GUI 组件纵向跨越多少个网格,如果属性值为 GridBagContraints.REMAIND,则表明当前组件是纵向最后一个组件,如果属性值为GridBagConstraints.RELATIVE...通过设置GridBagConstraints对象的属性,可以控制每个按钮的位置和大小。最后,调用frame.setVisible(true);使窗口可见。..., int axis) 指定创建基于 target 容器的 BoxLayout 布局管理器,该布局管理器里的组件按 axis 方向排列。

    20210

    java-GUI编程之布局类型介绍

    FlowLayout(int align) 使用指定的对齐方式及默认的垂直间距、水平间距创建 FlowLayout 布局管理器。...FlowLayout 中组件的排列方向(从左向右、从右向左、从中间向两边等) , 该参数应该使用FlowLayout类的静态常量 : FlowLayout. LEFT 、 FlowLayout....设置受该对象控制的 GUI 组件横向跨越多少个网格,如果属性值为 GridBagContraints.REMAIND,则表明当前组件是横向最后一个组件,如果属性值为GridBagConstraints.RELATIVE...gridheight 设置受该对象控制的 GUI 组件纵向跨越多少个网格,如果属性值为 GridBagContraints.REMAIND,则表明当前组件是纵向最后一个组件,如果属性值为GridBagConstraints.RELATIVE...axis) 指定创建基于 target 容器的 BoxLayout 布局管理器,该布局管理器里的组件按 axis 方向排列。

    1.7K10

    【Groovy】使用 SwingBuilder 构建 Swing 窗口 ( 创建一个 Swing 构造器 | 配置 Swing 窗口的一系列属性 | 设置 Swing 窗口显示 )

    Swing 构造器 , SwingBuilder 对象 ; // 创建 Swing 构造器 def swingBuilder = new SwingBuilder() 然后 , 配置 Swing 窗口的一系列属性..., 如窗口标题 , 大小 , 布局 , 关闭方式 , 这些都在 SwingBuilder 对象的 frame 方法中配置 ; Swing 窗口的内容在闭包中设置 ; // 配置 Swing 窗口 def...swing = swingBuilder.frame( title: "Swing 窗口", size: [400, 300], layout: new FlowLayout...button(text: "按钮", actionPerformed: { println "点击按钮" }) } 最后 , 设置 Swing 窗口显示 , 即设置其可见...---- 完整代码示例 : import groovy.swing.SwingBuilder import javax.swing.WindowConstants import java.awt.FlowLayout

    88420

    Java私活200元,完成JavaSwing学生成绩管理系统(三)

    ,要求: 自定义数据库文件格式 需求分析 在别人眼中:要写java代码 还要写连接数据库代码 以及创建表、写注释 编写文档等等 在我的眼中:创建一个javaswing的项目并套用之前写好的学生成绩管理的各种属性...代码生成器实现原理 1.文件目录介绍 config:包含一些系统的配置文件,比如这个系统的启动端口,连接的数据库 target:程序的主体(jar文件) bat :两个bat文件都可以用来启动这个项目用的...3.1界面 除了代码生成器这个模块,其他的功能没必要去管他 (这些就是历史原因了哈哈,本来想做一个网站的上线的…) 3.2 生成 在新增或者修改项目后,要记得保存,保存后下次可以复用 3.3 配置项.... , / 、等 中文名 用于对象名或属性名的描述,这样生成的系统注释才会齐全。...例如我要设默认时间为当前时间,则填{time.now}(这是我自己制定的规则),生成的时候,他们会判断这是java、C#项目来自动设置默认值。

    69610

    JAVA学习Swing章节流布局管理器简单学习

    * 默认情况下,组件在每一行上都是居中排列的,但是通过设置也可以更改组件在每一行上的排列位置 * * 2:FlowLayout类中具有三种构造方法 * alignment参数使用流布局管理器后组件在每一行的具体摆放位置...,和垂直间隔 setLayout(new FlowLayout(1,10,10));//new一个构造方法 //FlowLayout第一个参数设置为0每一行组件将按照左对齐排列...{ container.add(border[i],new JButton(buttonName[i])); } //设置窗体的外部属性...setSize(350,200);//设置窗体的大小 setVisible(true);//设置窗体可见 //设置窗体的关闭方式 setDefaultCloseOperation...setTitle("这是一个网格布局管理器的窗体"); setSize(300,300);//设置窗体的大小 setVisible(true);//设置窗体的可见

    1.5K00

    JAVA学习Swing章节流布局管理器简单学习

    * 默认情况下,组件在每一行上都是居中排列的,但是通过设置也可以更改组件在每一行上的排列位置 * * 2:FlowLayout类中具有三种构造方法 * alignment参数使用流布局管理器后组件在每一行的具体摆放位置...,和垂直间隔 setLayout(new FlowLayout(1,10,10));//new一个构造方法 //FlowLayout第一个参数设置为0每一行组件将按照左对齐排列...{ container.add(border[i],new JButton(buttonName[i])); } //设置窗体的外部属性...setSize(350,200);//设置窗体的大小 setVisible(true);//设置窗体可见 //设置窗体的关闭方式 setDefaultCloseOperation...setTitle("这是一个网格布局管理器的窗体"); setSize(300,300);//设置窗体的大小 setVisible(true);//设置窗体的可见

    1K30

    面试官: 说一下你做过哪些性能优化?

    ,开始我是通过设置 windowIsTranslucent 透明属性,发现虽然没有了白屏,但是中间还是有一小段不可见,这个用户体验还是不好的。...(这里可以介绍下 GC 回收机制,回收算法,知识点尽量往外扩展而不脱离本题) 最后在说一下在实际开发中避免内存泄漏的场景: 资源型对象未关闭: Cursor,File 注册对象未销毁: 广播,...尽量别用补间动画,改为属性动画,因为通过性能监控发现补间动画重绘非常频繁 2. 使用硬件加速提高渲染速度,实现平滑的动画效果。...界面刷新 7. ... 基于这几点去说卡顿肯定是没有问题的。 4、怎么保证 APP 的稳定运行? 程序员: 保证程序的稳定我们可以从内存、代码质量、Crash、ANR、后台存活等知识点来展开优化。...程序员: 有过优化,在没有优化之前项目的包体积大小是 80M,优化之后是 50M. 面试官: 说一说是怎么优化的 程序员: [image] 基于这几点优化方案,一般都能解决 APK 体积问题。

    1.2K00

    java swing一篇轻松学习(高考后可以自学)

    环境与工具: 系统环境:win10 开发工具:Eclipse IDE for Java Developers - 2020-09 数据库:MySQL5.6 正文: ---- 随便创建一个java项目就行...布局管理器,将组件间的横向和纵向间隙都设置为20像素 jPanel.setLayout(new FlowLayout(FlowLayout.LEADING,20,20));...c) 如果在子菜单层次结构中存在指定的组件,则返回 true isPopupMenuVisible() 如果菜单的弹出窗口可见,则返回 rue isSelected() 如果菜单是当前选择的(即高亮显示的...setMenuLocation(int x,int y) 设置弹出组件的位置 setPopupMenuVisible(boolean b) 设置菜单弹出的可见性 setSelected(boolean...(boolean b) 设置 borderPainted 属性,如果需要绘制边框,则此属性为 true setFloatable(boolean b) 设置 floatable 属性,如果要移动工具栏,

    9.6K10

    超详细的Java容器、面板及四大布局管理器应用讲解!

    之前在进行Java的窗体开发时经常会把容器、面板与布局管理混淆,从而不能正确的使用这三种属性对窗体应用进行布局。所以今天在这里记录一下Java窗体中容器、面板及常见的四大布局管理器的用法。...:“盘点Java窗体中关于默认布局管理器容易踩的坑” 之后再使用以下方法对组件进行绝对定位: setBounds(x,y,width,height); //其中x表示组件基于容器左上角的横坐标、y表示纵坐标...流布局管理器 流布局管理器(FlowLayout)具有的特点就是:在其中的组件可以像“流”一样按照从左到右的顺序依次的排列,直到该行排列完毕后再从下一行继续排列。...在默认的情况下,组将在流布局管理器中都是以居中排列的,当然排列的顺序是可以改变的, FlowLayout类中的构造函数中有如下三种: Public FlowLayout(); Public FlowLayout...可以赋的值为: FlowLayout.LEFT = 0; FlowLayout.CENTER = 1; FlowLayout.RIGHT = 2; 以上三个值被赋予以后,表示组件在流布局管理器中每一行的摆放位置和摆放顺序

    2.9K10

    Swift 探索 UICollectionView 之 SupplementaryView 和 Decoration View

    ,利用它们可以非常方便的做到固定 header 和 footer 的效果,仅需在上面设置 layout 的逻辑中加入如下俩行代码即可: flowLayout.sectionHeadersPinToVisibleBounds...如果你的产品经理给你提了一个需求,要求你要为 UICollectionView 的 section 设置背景, 但当你查阅文档的时候,你就会发现 UICollectionView 是无法通过属性设置来为...,只返回与 rect 位置相交的属性 attrs!....,那我们还得及时的更新数据源,来保证视图刷新后,导致拖拽的结果被还原,具体实现代码如下: 添加手势 // 添加手势 let longPressGesture = UILongPressGestureRecognizer...老样子,按照国际惯例,,最后附上项目工程地址: https://github.com/ShenJieSuzhou/SwiftScrollBanner

    2.2K10

    Java课程设计【学生信息管理系统】

    jf.setResizable(false); //设置JFrame单机X时结束程序 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置JFrame可见...(new FlowLayout(FlowLayout.LEFT)); private JPanel pQq=new JPanel(new FlowLayout(FlowLayout.LEFT)); private...String.valueOf(table.getValueAt(row, 5))); tMajor.setText(String.valueOf(table.getValueAt(row, 6))); //设置dialog可见...“查询”按钮进行刷新,显示出修改后的信息,如下图所示: 5、删除 (1)在学生信息管理系统界面选中某一学生记录,单击“删除”按钮,弹出删除确认界面。...虽然这是一个小项目,但是能把它做好也是有很大的满足感。虽然一开始遇到很多问题,但自己都咬牙克服、迎难而上,每天都在钻研程序,然后将自己的思想与同学们交流。

    5.7K21

    11 - JavaSE之GUI

    FlowLayout 默认的对齐方式是居中。...使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的大小和位置属性,如果试图使用 Java 提供的 setLocation(), setSize(), setBounds...e.getSource(); f.addPoint(new Point(e.getX(),e.getY())); f.repaint(); // 当有鼠标点击时重绘,保证在界面未重画的时候...void windowOpened(WindowEvent e) // 第一次调用窗口可见。 与 WindowListener 对应的适配器为 WindowAdapter。...在实际的项目中看到一个很奇怪的现象,Java可以直接new一个接口,然后在new里面粗暴的加入实现代码。就像下面这样。那么问题来了,new出来的对象没有实际的类作为载体,这不是很奇怪吗?

    1.9K50

    《Java 2 图形设计卷Ⅱ- SWING》第2章 Swing的基本知识

    ,既作为applet使用时,不能刷新,一旦刷新图就没了。      ...2.2 GJApp    本书介绍的应用程序都是在GJApp类的帮助下实现的,该类提供了一个状态区,并能从属性文件中读取资源。...任何软件开发人员都可证实,把一个复杂的系统和以前未预见的设计组合起来不是一个简单的任务,把轻量组件合并到AWT中也不例外。...例如,如果在一个按钮激活,项目列表需要更新时,则通常在与该按钮相关联的事件监听器的actionPerformed方法中来实现该列表的更新。  ...然而,有时可能需要从事件派发线程以外的线程中更新Swing组件。例如,如果上述项目列表中包含了很多来自数据库或Internet的数据,则可能在按钮激活后还要等一段时间才能看到更新的列表。

    2.5K20

    【Java AWT 图形界面编程】Container 容器 ① ( Container 容器类子类 | Component 组件类常用 API | Container 容器类常用 API )

    属性与方法 , 在 Container 中也可以使用 ; public class Container extends Component Container 容器类 又有如下几个子类 : 这些容器类子类也都是容器...; Dialog 是对话框类 ; Panel 内嵌容器 : 该类有一个子类 Applet 类 , 默认的 布局管理器 是 FlowLayout ; ScrollPanel 可滚动容器 : 默认的 布局管理器...中的函数 , 这里首先介绍 Component 组件类 的 常用 API , 然后再介绍 Container 容器类的 API ; Component 组件类 常用 API : setLocation...(int x, int y) : 设置 组件 在 屏幕中的位置 , 屏幕中默认的坐标体系 , 左上角为原点 , 向右为 x 轴 , 向下为 y 轴 , 与 Android 的屏幕坐标系 类似 ; setSize...和 组件 像素大小 ; setVisible(boolean b) : 设置组件是否可见 , true 可见 , false 不可见 ; Container 容器类 常用 API : Component

    61720
    领券