在 Delphi 中使用框架的公认方法是啥?

Posted

技术标签:

【中文标题】在 Delphi 中使用框架的公认方法是啥?【英文标题】:What is the accepted way to use frames in Delphi?在 Delphi 中使用框架的公认方法是什么? 【发布时间】:2010-12-02 14:31:21 【问题描述】:

我像往常一样四处闲逛,碰到了一些框架讨论。

我主要是 Delphi 爱好者而不是专业人士,所以我必须以自己的方式学习如何使用 TFrame:

在其单元内创建一个 TFrame。 将该单元添加到主表单 Uses 子句中。 拥有该 TFrame 类型的私有变量 表单的 OnCreate 实例化 TFrame 并将其附加到 Create 和 .Parent 上的 TPanel 在我的一个操作中设置 TFrame.Visible := True 和 .BringToFront。

这是我经过深思熟虑后的做法。

还有哪些其他方式可以使用框架?

【问题讨论】:

您可能也对此感兴趣:thoughtco.com/… 【参考方案1】:

这是一种方式,没有任何问题。另一种方法是在视觉上进行。因此,您基本上可以将框架添加到表单中。这样做你:

创建您的框架。 转到您希望放置相框的表格。 添加框架组件(标准选项卡) 从下拉列表中选择您的框架。 就是这样!

【讨论】:

这也是我的首选方法,但在某些情况下,我发现“按需”创建框架很有用。特别是对于用作选项卡式控件的一部分并且可能永远不会显示的框架。 @sveinbringsli:是的,这也是我的想法。如果您的用户只使用一两个,那么创建它们会浪费太多的内存。 有时它不起作用。当您想将 Frames 组件放在表单上时,它会显示“项目中没有框架...”。这可以通过手动将框架添加到您的项目中来解决 - 在项目管理器中右键单击您的项目,然后添加。【参考方案2】:

您甚至可以更进一步,将框架注册为组件。

这不允许您在 Frame 组件位于表单上时立即编辑 Frame 上组件的属性。但我认为这是一件好事。

除了将框架注册为组件之外,您还需要做一件事,正如我在这篇关于 Delphi – Frames as visual Components – don’t forget your Sprig! 的文章中所解释的那样。

这些知识不是我的:我是在今年早些时候在圣何塞的Delphi Live conference 的sessions 中从Ray Konopka 那里得到的。

【讨论】:

【参考方案3】:

这更像是一个否定的答案,但我尝试了一条路线,其中包括为有点复杂的 GUI 重新设置 TFrame。

一开始一切正常,但是当应用程序成熟并且更多事件开始飞行时,我不得不禁用然后处理一段时间(20ms)才能更改,然后在更改框架时仍然偶尔会崩溃。

我最终发现的罪魁祸首之一是 TPopmenu 也在全局数据结构中注册了自己。这减少了问题,但它们仍然存在,所以我放弃了这个概念。

【讨论】:

是的,有道理。如果你的帧太多,肯定会坏掉。 更重要的是,即使框架已重新设置父级,框架的 Windows 消息也会到达的风险。【参考方案4】:

您的方法的唯一问题是您无法将同一框架的多个实例添加到给定表单:

Frame1 := TMyFrame.Create(Self);
Frame1.Parent := Self;
// ...
Frame2 := TMyFrame.Create(Self); // bombs out with "a component with the name MyFrame already exists"

他的解决方法是为每个实例分配一个不同的名称:

Frame1 := TMyFrame.Create(Self)
Frame1.Parent := Self;
Frame1.Name := "FirstFrame";
// ...
Frame2 := TMyFrame.Create(Self); // works now, there is no name conflict

【讨论】:

感谢您的想法。我通常每个功能只需要一帧,但它很快就会发生,我需要多个实例。谢谢!!

以上是关于在 Delphi 中使用框架的公认方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

google服务框架是啥 google服务框架有啥用

Delphi 框架的模型 OnCreate 事件

Delphi XE5,如何将包中定义的框架放入组件调色板

如何在 C# 中制作类似 Delphi 的框架?

嵌套在 Delphi 框架中的私有组件字段

在 Delphi 中编程延迟的最佳方法是啥?