Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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
Windows 在自己的应用程序中直观地包含另一个应用程序_Windows_Delphi_Forms - Fatal编程技术网

Windows 在自己的应用程序中直观地包含另一个应用程序

Windows 在自己的应用程序中直观地包含另一个应用程序,windows,delphi,forms,Windows,Delphi,Forms,我有四个用Delphi(Win32)编写的小型单表单实用程序,每隔一段时间我就想使用它们,让它们“感觉”好像都是一个应用程序,主要是为了让它们之间的切换非常容易。例如,如果能够将它们作为容器插入到TabSheet中,或者沿着这些线插入,那就太好了 AppControls制作了一个简洁的小组件,它与TForm子代的功能类似,允许将它们插入Delphi应用程序中的另一个容器中(请参见acEmbeddedForm)http://www.appcontrols.com/appcontrols/overv

我有四个用Delphi(Win32)编写的小型单表单实用程序,每隔一段时间我就想使用它们,让它们“感觉”好像都是一个应用程序,主要是为了让它们之间的切换非常容易。例如,如果能够将它们作为容器插入到TabSheet中,或者沿着这些线插入,那就太好了

AppControls制作了一个简洁的小组件,它与TForm子代的功能类似,允许将它们插入Delphi应用程序中的另一个容器中(请参见acEmbeddedForm)http://www.appcontrols.com/appcontrols/overview.html"这里),,但我不认为有任何方法可以用四个独立的应用程序来实现这一点,除非我在构建第五个应用程序时考虑到这一最终结果,并以原始四个应用程序的所有形式进行编译

我还可以想象想要“包含”或嵌入其他应用程序(比如,记事本)

这在德尔福是可能的吗?(一切皆有可能……)。。。如果是这样的话,这会非常困难,并且需要大量熟悉Windows API吗

我想这些问题的答案可能是肯定的,是的,但希望答案是肯定的,不是的。我想我会问的只是为了确定



如果我是从编程的角度在这里做梦,那么这是一项超出其价值的工作;对于那些使在一组标准的三个或四个应用程序之间来回切换比在Windows中更简单的实用程序,您有什么建议吗?

您可以将您的小应用程序转换为OLE服务器,并创建一个新的应用程序,以一种主要形式承载它们。OLE由Delphi很好地支持,因此它应该相当简单,并且不需要太多的API修改。

关于嵌入您无法控制的程序:我怀疑您在尝试执行所描述的操作时会遇到很多困难,如果可能的话(我怀疑这一点),它将依赖于大量的低级API调用和一般的肮脏行为

如果你想重新构造你的应用程序,你可以把你的四个程序做成插件,然后创建第五个“主机”应用程序来加载它们中的任何一个或全部


我建议你看看免费提供的绝地插件系统。

由于你的所有其他应用程序都是单一形式的,你可以将每个应用程序中的所有组件剪切/粘贴/保存到一个单独的“背景”面板上,另存为一个单独的“背景”面板。然后您可以将组件模板加载到它自己的PageControl/Tab上。

另一个可以提供一些提示。基本上,它声明您使用。您还可以使用枚举现有窗口(如notepad.exe),并在其上调用SetParent以在您自己的窗口下重新分配。

我使用了“生成第五个应用”解决方案,当时我将多个内部应用合并到一个带有选项卡的应用中,以在它们之间进行选择

frmShipRef := TfrmShipRef.Create(self);
frmShipRef.Parent := tabShipRef;
frmShipRef.BorderStyle := bsNone;
frmShipRef.Align := alClient;
frmShipRef.Show;
我只是用标签设置了一个新表单,然后用上面的代码创建其他表单。这很有效,通过一点有条件的编译,我能够在左侧添加一个面板,它提供了一种“元复制和粘贴”,允许他们之间传递数据。

感谢提示(和代码!):)我现在可能会走那条路,我们拭目以待。