可堆叠面板 Delphi 组件

Posted

技术标签:

【中文标题】可堆叠面板 Delphi 组件【英文标题】:Stackable Panel Delphi Component 【发布时间】:2011-11-11 14:26:01 【问题描述】:

有谁知道 Delphi 组件实现类似于 jquery sortable 的功能,但用于桌面应用程序?

即一个垂直控件,包含许多可以重新排序的面板,也可以用作其他组件的容器(特别是包含不同文本位的 TMemos)。

感谢您提供任何信息,

布伦丹。

【问题讨论】:

您使用的是哪个版本的 Delphi?我之所以问,是因为根据您的版本,您可能有权访问某些内置控件,也可能无法访问。 感谢您到目前为止的回答。我目前使用的是 Delphi 2010。 @Jerry,我认为最好回答这个问题,然后在其中提到它仅适用于某些版本。这样,即使 this 用户没有必要的版本,other 想同样问题的人仍然可以从这个问题中受益。 TCategoryPanel 在 D2010 中吗?我不记得了。 【参考方案1】:

TMS 具有可以折叠/展开的 TAdvPanelGroup。见右下角的截图: http://www.tmssoftware.com/site/advpanel.asp

【讨论】:

【参考方案2】:

只运行一次,然后我从正在运行的应用程序中移动它们并调整它们的大小。

这是 dfm:

object Form2: TForm2
  Left = 0
  Top = 0
  Caption = 'Form2'
  ClientHeight = 337
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object clbr1: TCoolBar
    Left = 0
    Top = 0
    Width = 635
    Height = 313
    Bands = <
      item
        Control = gb1
        ImageIndex = -1
        MinHeight = 123
        Width = 629
      end
      item
        Control = pnl1
        ImageIndex = -1
        MinHeight = 112
        Width = 629
      end>
    object gb1: TGroupBox
      Left = 11
      Top = 0
      Width = 620
      Height = 123
      Caption = 'gb1'
      TabOrder = 0
      object lbledt1: TLabeledEdit
        Left = 112
        Top = 40
        Width = 121
        Height = 21
        EditLabel.Width = 32
        EditLabel.Height = 13
        EditLabel.Caption = 'lbledt1'
        TabOrder = 0
      end
    end
    object pnl1: TPanel
      Left = 11
      Top = 125
      Width = 620
      Height = 112
      Caption = 'pnl1'
      TabOrder = 1
      object rg1: TRadioGroup
        Left = 128
        Top = 4
        Width = 185
        Height = 105
        Caption = 'rg1'
        Items.Strings = (
          'dsfsdf'
          'sdfsdfsd')
        TabOrder = 0
      end
    end
  end
end

【讨论】:

我不明白我们在看什么。您能否添加一些句子来解释您的答案的作用?你能澄清你的第一句话吗? 什么只运行一个,为什么不能多运行呢? 使用“一次运行”,我的意思是我没有通过设计器修改 UI……我只在应用程序启动时拖放“面板”。面板包含控件。因此,由于我不确定完全理解这个问题,所以我展示了仅使用显示的 dfm 可以做什么【参考方案3】:

虽然我是从代码而不是设计时执行此操作,但我会使用包含一些框架或面板的 TScrollbox 或 TPanel,这些框架或面板都是顶部对齐的。如果我想要折叠/展开框架,我只需在框架中放置一个按钮,让您可以将框架折叠到最小高度,例如折叠时为 20 像素,展开时更高。

里面的框架可以是你想要的任何控件,甚至是包含一些其他控件的面板。***控件可以在父面板或滚动框中重新排序。

【讨论】:

【参考方案4】:

我还没有在 Delphi 2007 中找到一个标准控件来满足您的需求,但我会提供一个类似于 Warren 建议的自定义解决方案。主要区别在于我将在 TFrame 中创建它,这样您就可以更轻松地维护允许您操纵控件及其相互交互的代码。您还可以在框架内创建用于添加新面板(带有备忘录和要显示的文本)、移动它们等的方法。

这是一项工作,但它也可以成为一次很棒的学习经历。最好的部分是一旦你完成了,你可以在任何你想要的任何形式或另一个框架内重复使用该框架。如果你做得对,它也将毫无困难地工作。

【讨论】:

以上是关于可堆叠面板 Delphi 组件的主要内容,如果未能解决你的问题,请参考以下文章

Delphi - 引用在运行时创建的组件

Delphi自定义组件如何在属性面板中实现打开文件的对话框?

Delphi:滑动(动画)面板

一个jQuery插件,它通过在面板到达视口顶部时粘贴面板来创建堆叠效果。

将长格式面板数据重塑为宽堆叠时间序列

Delphi中如何实现如图所示的进度条效果