Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何拆分大型GUI的代码?_Delphi_User Interface - Fatal编程技术网

Delphi 如何拆分大型GUI的代码?

Delphi 如何拆分大型GUI的代码?,delphi,user-interface,Delphi,User Interface,我有一个带有大型GUI的程序。GUI分为几个选项卡。 管理GUI的代码(例如一个选项卡包含完整的Windows资源管理器克隆)相当大 哪种方法是将如此大的GUI拆分为多个文件,但不将GUI拆分为多个表单(在运行时)?使用嵌入式表单。通过这种方式,您可以在一个单独的文件中维护每一个,并且在运行时它们看起来都是同一GUI表单的一部分 创建全局变量以存储当前表单: MyForm: TForm; 您不想自动创建表单,因此请将其从“项目选项->表单自动创建”列表中删除。而是通过以下方式动态创建它们:

我有一个带有大型GUI的程序。GUI分为几个选项卡。 管理GUI的代码(例如一个选项卡包含完整的Windows资源管理器克隆)相当大


哪种方法是将如此大的GUI拆分为多个文件,但不将GUI拆分为多个表单(在运行时)?

使用嵌入式表单。通过这种方式,您可以在一个单独的文件中维护每一个,并且在运行时它们看起来都是同一GUI表单的一部分

创建全局变量以存储当前表单:

MyForm: TForm; 
您不想自动创建表单,因此请将其从“项目选项->表单自动创建”列表中删除。而是通过以下方式动态创建它们:

MyForm := TMyForm.Create(Application); 
然后根据需要设置属性,包括以下内容:

我假设您有一个名为EmbeddedMyForm_panel的面板,它位于要嵌入表单的选项卡上。不管怎样,我就是这么做的。您也可以直接使用TTabSheet

with MyForm do begin 
  BorderIcons := []; 
  BorderStyle := bsNone; 
  parent      := EmbeddedMyForm_panel; 
  Align       := alClient; 
  Visible     := true; 
end; 
我曾参与过许多项目,这些项目非常成功地使用这种方法在一个大型GUI中的大量选项卡上嵌入了单独的表单


补充:当我问他们为什么不使用框架时,他们告诉我,如果主窗体上有十几个或更多的嵌入窗体,那么用框架加载它将花费很长时间,因为IDE会抱怨无法找到窗体上几乎每个框架的祖先窗体。您需要首先打开所有的框架表单,以便在不从IDE收到任何警告的情况下打开主表单。如果您只想处理主窗体本身(例如编辑主菜单),而根本不需要处理任何框架,这尤其令人讨厌。

每个选项卡页都是一个窗口。你是说多个窗体而不是多个窗口吗?听起来框架就是答案。“最佳方法”听起来有点“主要基于观点”,也许可以重新表述。我更喜欢多个窗口,在运行时停靠广告,类似于使用框架的线条。“最佳方法”也可能意味着我有多个好/坏的想法(可能永远不会在我脑海中出现),并选择我个人非常喜欢的一个(无论其他人投了什么票):)唯一真正的缺点是在两个这样的单元之间共享代码变得更加困难。但这本身就是一个优势,因为它迫使你将逻辑分成不同的单元。我同意@DavidHeffernan的观点,框架是解决这个问题的理想方案。每个选项卡都有自己的框架。我看不出停靠窗口或嵌入表单在这方面有什么优势。它们更难使用,并且没有明显的好处。这是一个优雅的解决方案!谢谢这里有一篇关于框架的文章,但与你的解决方案相比,完全是矫枉过正。框架是如何矫枉过正的?它们并不复杂,也许不那么复杂。图形用户界面的许多方面都可以更好地使用框架。框架的设计允许您避免这种解决方案,因为它会导致其他问题(选项卡排序、消息处理、焦点更改等)必须手动处理。虽然我没有否决你的答案(因为从技术上讲,这是一种解决方案),但我强烈建议使用框架。如果你有一个“模板”,你想把它放在一堆表单上,那么框架是非常棒的。如果您只想在另一个表单中嵌入表单的一个实例,那么嵌入表单是一个更简单的解决方案。框架有一个缺点,当你打开一个有框架的表单时,如果你没有在IDE中打开框架的源文件,IDE会抱怨。我一直不明白这背后的原因,但它阻止我使用框架。如果它非常需要框架文件,为什么不直接打开它呢?如果我没记错的话,TeeChart演示就是这样做的。TTabSheet是父级。