【问题标题】:Delphi - Duplicate tpanel and tbuttons on second formDelphi - 在第二种形式上重复 tpanel 和 tbuttons
【发布时间】:2011-01-13 17:41:43
【问题描述】:

在我的主窗体上,我有一个 TPanel,其中包含用作工具栏的按钮。我想将此工具栏和按钮及其功能克隆/复制到第二种形式。

使用 newmenu.merge(mainmenu) 克隆菜单很简单。这是复制 Tmainmenu 的绝佳捷径。

但是我不知道如何轻松复制我的工具栏,而无需手动分配事件并保留一个计时器来比较和跟踪哪些按钮与主窗体上的真正主菜单相比是启用和禁用的。根据应用程序正在执行的操作,主工具栏按钮将在不同时间启用和禁用。

这里有什么想法吗?感谢您提供任何建议或提示以简化此操作。

【问题讨论】:

    标签: delphi tpanel


    【解决方案1】:
    • 复制控件

      在表单设计器中,选择面板并按 Ctrl+C 将其及其所有子项复制到剪贴板。转到第二个表单并按 Ctrl+V 进行粘贴。

      如果您仍在进行设计并希望在两个表单之间保持一致,则创建一个TFrame 并在那里设计您的工具栏布局。然后在您的两个表单上放置该框架的一个实例。对框架设计的更改将反映在表单中。

      请参阅帮助中的Working with frames

    • 确保两组按钮始终启用

      创建一个数据模块。在上面写上TActionList。为主窗体上的每个按钮添加一个操作。将事件处理程序分配给操作的OnUpdate 事件。在其中,设置 actions' Enabled 属性。最后,分配每个按钮的Action 属性以引用相应的操作对象。这些按钮将自动通过操作启用和禁用。不需要计时器。

      此外,您还可以处理操作的OnExecute 事件。清除每个按钮的OnClick 属性,然后将按钮的OnClick 代码移动到相应操作的OnExecute 处理程序中。即使OnClick 属性为空,它也会在您单击按钮时自动调用。

      当您分配TActionCaptionHint 属性时,任何关联控件的相应属性也会更改。同样对于图像,如果控件支持它们。操作也可以分配给菜单项。

      请参阅帮助中的Using action lists

    • 像工具栏一样工作

      只需使用TToolbar。这就是它的用途。

      或者,一旦您习惯了操作,在您的项目中添加一个TActionManager 并将其与TActionToolbarTActionMainMenuBar 一起使用。请参阅帮助中的Organizing actions for toolbars and menus

    【讨论】:

    • 谢谢,框架选项运行良好。我以前没有使用过它们,我现有的方法是带有按钮的标准 tpnael。
    【解决方案2】:

    按钮是否附加到操作?如果是这样,您可以使用 TActionList 的 OnUpdate 事件来指定应该启用和不应该启用的内容。如果没有,转换为使用操作也不是什么工作量。

    如果您通过这条路线转换为使用 ActionList,请考虑将 ActionList 放在数据模块中,以便不同的单元和表单可以引用它。

    【讨论】:

      【解决方案3】:

      您可以使用剪贴板对象来复制您的面板。

      剪贴板.SetComponent(Panel1);
      Clipboard.GetComponent(Form2,GroupBox1);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-19
        • 2017-11-13
        • 1970-01-01
        • 1970-01-01
        • 2011-07-20
        • 1970-01-01
        相关资源
        最近更新 更多