在我的主窗体上,我有一个 TPanel,其中包含用作工具栏的按钮。我想将此工具栏和按钮及其功能克隆/复制到第二种形式。
使用 newmenu.merge(mainmenu) 克隆菜单很简单。这是复制 Tmainmenu 的绝佳捷径。
但是我不知道如何轻松复制我的工具栏,而无需手动分配事件并保留一个计时器来比较和跟踪与主窗体上的真实主菜单相比哪些按钮被启用和禁用。根据应用程序正在执行的操作,主工具栏按钮将在不同时间启用和禁用。
这里有什么想法吗?感谢您提供任何建议或提示以使这更容易。
复制控件
在表单设计器中,选择面板并按下Ctrl+C以将其及其所有子项复制到剪贴板。转到第二个表格,然后按Ctrl+V粘贴。
如果您仍在进行设计并希望在两个表单之间保持一致,请在此处创建TFrame
并设计您的工具栏布局。然后在您的两个表单上放置该框架的一个实例。对框架设计的更改将反映在表格中。
请参阅帮助中的使用框架。
确保始终启用两组按钮
创建数据模块。放一个TActionList
。为主窗体上的每个按钮添加一个操作。将事件处理程序分配给操作的OnUpdate
事件。在其中,设置动作的 Enabled
属性。最后,分配每个按钮的Action
属性以引用相应的操作对象。这些按钮将随着操作自动启用和禁用。不需要计时器。
此外,您也可以处理动作的OnExecute
事件。清除每个按钮的OnClick
属性,然后将按钮的OnClick
代码移动到相应操作的OnExecute
处理程序中。当你点击按钮时它会自动被调用,即使OnClick
属性是空的。
当您分配 a 的Caption
orHint
属性时TAction
,任何关联控件的相应属性也会更改。同样对于图像,如果控件支持它们。操作也可以分配给菜单项。
请参阅帮助中的使用操作列表。
像工具栏一样工作
只需使用TToolbar
. 这就是它的用途。
或者,一旦您习惯了操作,将 aTActionManager
放入您的项目中并与TActionToolbar
and一起使用TActionMainMenuBar
。请参阅帮助中的组织工具栏和菜单的操作。
按钮是否附加到操作?如果是这样,您可以使用 TActionList 的 OnUpdate 事件来指定应该启用和不应该启用的内容。如果没有,转换为使用操作也不是什么工作量。
如果您通过这条路线转换为使用 ActionList,请考虑将 ActionList 放在数据模块中,不同的单元和表单可以引用它。
您可以使用剪贴板对象来复制您的面板。
Clipboard.SetComponent(Panel1);
Clipboard.GetComponent(Form2,GroupBox1);