在我的主窗体上,我有一个包含按钮作为工具栏的TPanel。我想将此工具栏和按钮及其功能克隆/复制到第二种形式。
使用newmenu.merge(mainmenu)克隆菜单很简单。这是复制Tmainmenu的绝佳捷径。
但是我不知道如何轻松复制我的工具栏而不必手动分配事件并保留计时器来比较和跟踪与主窗体上的真实主菜单相比启用和禁用哪些按钮。根据应用程序的操作,将在不同时间启用和禁用主工具栏按钮。
这里有什么想法吗?感谢任何建议或提示,使这更容易。
答案 0 :(得分:4)
复制控件
在“表单设计器”中,选择面板并按 Ctrl + C 将其及其所有子项复制到剪贴板。转到第二个表单,然后按 Ctrl + V 进行粘贴。
如果您仍在处理设计并希望在两个表单之间保持一致,请创建TFrame
并在那里设计工具栏布局。然后在您的表单上放置该框架的实例。框架设计的更改将反映在表单中。
请参阅帮助中的Working with frames。
确保两组按钮一致启用
创建数据模块。放一个TActionList
。为主窗体上的每个按钮添加一个操作。将事件处理程序分配给操作“OnUpdate
事件。在其中,设置操作' Enabled
属性。最后,指定每个按钮的Action
属性以引用相应的操作对象。按钮将自动启用和禁用操作。无需计时器。
此外,您还可以处理“OnExecute
个活动”。清除每个按钮的OnClick
属性,然后将按钮的OnClick
代码移动到相应操作的OnExecute
处理程序中。即使OnClick
属性为空,它也会在您单击按钮时自动调用。
分配Caption
的{{1}}或Hint
属性时,任何关联控件的相应属性也会更改。同样对于图像,如果控件支持它们。也可以将操作分配给菜单项。
请参阅帮助中的Using action lists。
像工具栏一样
只需使用TToolbar
即可。这就是它的用途。
或者,一旦您习惯了操作,请在项目中添加TActionManager
,并将其与TActionToolbar
和TActionMainMenuBar
一起使用。请参阅帮助中的Organizing actions for toolbars and menus。
答案 1 :(得分:1)
按钮是否附加到动作?如果是这样,您可以使用TActionList的OnUpdate事件来指定应该和不应该启用的内容。如果没有,转换为使用动作并不是太多工作。
如果您使用ActionList转换为此路由,请考虑将ActionList放在数据模块中,其中不同的单位和表单可以引用它。
答案 2 :(得分:0)
您可以使用ClipBoard对象复制面板。
Clipboard.SetComponent(Panel1的);
Clipboard.GetComponent(窗体2,GroupBox1);