在您自己的应用中可视化地包含另一个应用

时间:2009-04-15 19:21:38

标签: windows delphi forms

我有四个小的单一形式的实用程序应用程序,我用Delphi(Win32)编写,每隔一段时间,我想以一种让他们“感觉”的方式使用,好像它们都是一个应用程序,主要是让它们之间来回切换非常容易。例如,能够将它们作为容器插入TabSheet中,或者沿着这些行插入它们将会很棒。

AppControls创建了一个与TForm后代类似的简洁组件,允许它们插入到Delphi应用程序中的另一个容器中(参见acEmbeddedForm http://www.appcontrols.com/appcontrols/overview.html'>除非我在构建第五个应用程序时考虑到这个最终结果,并且在原始的四个应用程序的所有形式中进行编译,但我没有看到任何方法使用四个单独的应用程序执行此操作。

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

这在Delphi中可行吗? (所有事情都是可能的......< g>)......如果是这样,那会非常困难,并且需要大量的Windows API熟悉程度吗?

我认为对这些问题的答案可能是肯定的,是的,但希望答案是肯定的,不是。以为我会问我肯定。 &LT g取代;


如果我从编程的角度来到这里做梦,那么这比它的价值更多的工作;对于在一组标准的三到四个应用程序之间来回切换的实用程序的任何建议都比在Windows中更简单?

5 个答案:

答案 0 :(得分:5)

您可以将小型应用程序转换为OLE服务器并创建一个以一个主窗体托管它们的新应用程序。 Delphi很好地支持OLE,因此它应该非常简单并且不需要太多的API调整。

答案 1 :(得分:3)

另一个SO question可以提供一些提示。基本上它声明你使用SetParent。您还可以使用FindWindow对现有窗口(例如notepad.exe)进行枚举,并在它们上面调用SetParent以在您自己的窗口下重新显示。

答案 2 :(得分:1)

关于嵌入程序你无法控制:我怀疑你在尝试做你正在描述的事情时会遇到很多麻烦,如果它甚至可能(我怀疑的话),它会依赖于大量的低级API调用和一般的肮脏。

如果您想稍微重新构建应用程序,可以将四个程序插入到插件中,并创建可以加载其中任何一个或全部的第五个“主机”应用程序。

我建议你看一下JEDI插件系统,http://delphi-jedi.org免费提供。

答案 3 :(得分:1)

当我将多个内部应用程序合并到一个应用程序中时,我选择了“制作第五个应用程序”解决方案,并在其中选择标签。

frmShipRef := TfrmShipRef.Create(self);
frmShipRef.Parent := tabShipRef;
frmShipRef.BorderStyle := bsNone;
frmShipRef.Align := alClient;
frmShipRef.Show;

我只是设置了一个带有标签的新表单,然后使用上面的代码创建彼此的表单。这样做效果很好,通过一些条件编译我可以在左边添加一个面板,它提供了一种“元复制和粘贴”,允许它们在它们之间传递数据。

答案 4 :(得分:0)

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