TCategoryPanel的顺序进入TCategoryPanelGroup

时间:2015-07-14 04:10:10

标签: delphi delphi-2010

我有一个完整的Delphi应用程序,有32种不同形式的数据输入。我有1个主要的TCategoryPanelGroup,上面有115个diffrents TCategoryPanel。

我们在每个表单上找到了6个主要的TCategoryPanel(main1,到main6),我们在其中添加了一些特定的(特定的1,2,3等等)TCategoryPanel给每个表单。

所有表单都已在应用程序中预先构建,并未在运行时构建。

我管理这些表格的方式(32种表格,每种表格平均有10个面板)

  • 在运行应用程序之前,所有面板都显示为false并且所有面板都已正确排序;
  • 用户选择了32种表格中的一种;
  • 我按顺序显示(可见true)这些面板: main1,main2,main3,specific1,specific2,main4,main5和main6;
  • 比我向用户显示表单;
  • 在关闭表单时,我按顺序隐藏(可见错误):main6,main5,main4,specific 2,specific 1,main3,main2和main1;

用户可以打开另一个不同的表单(从32开始),同样的过程再次进行。但不知何故,面板的顺序并不总是与我所展示的相同(可见真实)。

有时,special1面板在main1之前或者甚至在main6之后。 第一种形式是开放总是很好,在打开和关闭不同形式后,所有面板订单都混合在一起。

我花了一些时间在网上试图了解TCategoryPanelGroup管理其面板顺序的方式,同时显示和隐藏它们,然后我就去了,我需要帮助。

嗯,问题很简单,是否有不同的方法来管理TCategoryPanelGroup上的面板顺序以满足我的需求?我们可以简单地让它们可见而不是重新排列顺序吗?

到目前为止,我专注于那些类似但无法解决的2个链接:

http://www.devsuperpage.com/search/Articles.aspx?G=2&ArtID=92075 http://codeverge.com/embarcadero.delphi.vcl.using/order-of-tcategorypanels-on-tcat/1066818

  

我的MCVE

Download it here

特定小组的Nb:

  • 表格#1 = 4
  • 表格#2 = 2
  • 表格#3 = 3
  • 表格#4 = 2

测试A:

  1. 打开表格#1 {okay}
  2. 关闭它
  3. 打开表格#3 {okay}
  4. 关闭它
  5. 打开表单#1 {不行,因为特定面板中最低nb的另外一个面板打开了}}
  6. 关闭它
  7. 打开表格#4 {好吧}他现在是具有2的特定开放式面板的最低nb。
  8. 关闭它
  9. 打开表格#3 {不行,因为有3个特定面板,现在打开的最低面积降至2}
  10. 关闭应用程序。
  11. 测试B:

    1. 打开表格#3 {okay}
    2. 关闭它
    3. 打开表格#4 {okay最低nb具体现在为2}
    4. 关闭它
    5. 打开表格#3 {不行,因为有3个特定面板,现在打开的最低面积降至2}
    6. 关闭它
    7. 打开表格#2 {好,因为我们现在等于特定最低的nb,即2}
    8. 关闭它
    9. 打开表格#3 {不行,原因得到3个特定面板,现在打开的最低值降至2.这里我们有另一种情况,因为具体的#2,#6和#4现在已经混淆,也没有重新组合}
    10. 关闭应用程序。
    11. 2种不同的总体情况:未重新组合的特定面板和特定的面板顺序混合在一起。我确实理解了在一个接一个地打开表格之前发生了什么,但是找不到解决方法。

1 个答案:

答案 0 :(得分:2)

好吧,自己拿到它

TCategoryPanelGroup使用TOP属性管理其TCategoryPanel的顺序。

隐藏(可见:false)它们的顺序相反,并且显示(可见:=真)它们按顺序可以工作,如果你总是有相同数量的面板以相同的顺序显示。

我发现这篇帖子与TOP属性相关,激发了我的灵感:How to reorder categories in TCategoryPanelGroup (Delphi XE)。在这篇文章中,解决方案是为第一个面板提供0的精确TOP值,第二个面板等于第一个面板的高度值,依此类推。

通过在展示它们之前给所有面板提供相同的TOP值,我觉得更容易一些...小心,为了防止面板混乱,你需要给出一个TOP值大于你在TCategoryPanelGroup中可能拥有的最长形式面板COLLAPSED为false。

所以在隐藏所有面板时,无论确切顺序如何,并给它们TOP值:= 10000,现在每个都是固定的。

RECAP:

  • 所有面板都是不可见的{无论您使它们不可见的顺序}。
  • 所有面板都具有相同的TOP值:= 10000; {比最长的形式更有价值}
  • 按照从TOP到BOTTOM必须显示的确切顺序显示面板;

我们已经完成了!

  

我的MCVE解决方案包括download it here