【问题标题】:Visually containing another app inside your own app在您自己的应用程序中直观地包含另一个应用程序
【发布时间】:2009-04-15 19:21:37
【问题描述】:

我有四个用 Delphi (Win32) 编写的小型单一形式的实用程序,每隔一段时间我想以一种让它们“感觉”就像它们都是一个应用程序的方式来使用它们,主要是为了使它们之间的来回切换变得非常容易。例如,如果能够将它们作为容器插入 TabSheet 或类似的东西,那就太好了。

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

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

这在 Delphi 中可行吗? (一切皆有可能……)……如果是这样,会不会超级困难,并且需要大量熟悉 Windows API 的底层知识?

我认为这些问题各自的答案可能是肯定的,但希望答案是肯定的和否定的。以为我会问只是为了确定。


如果我从编程的角度在这里做梦,这比它的价值要多得多;对于在一组标准的三个或四个应用程序之间来回切换比通常在 Windows 中更简单的实用程序有什么建议吗?

【问题讨论】:

    标签: windows delphi forms


    【解决方案1】:

    您可以将您的小应用程序制作成 OLE 服务器,并创建一个新应用程序以一种主要形式托管它们。 Delphi 很好地支持 OLE,因此它应该相当简单并且不需要太多的 API 摆弄。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        如果您想对您的应用程序进行一些重构,您可以将您的四个程序变成插件,然后创建第五个“宿主”应用程序来加载其中的任何一个或全部。

        我建议你看看 JEDI 插件系统,可以从http://delphi-jedi.org免费获得。

        【讨论】:

          【解决方案4】:

          当我将多个内部应用程序组合成一个应用程序时,我采用了“制作第五个应用程序”解决方案,并使用选项卡在它们之间进行选择。

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

          我刚刚设置了一个带有标签的新表单,然后使用上面的代码创建了另一个表单。这工作得很好,通过一点条件编译,我能够在左侧添加一个面板,提供一种“元复制和粘贴”,允许他们在彼此之间传递数据。

          【讨论】:

          • 感谢您的提示(和代码!)。 :) 我现在可能最终会走那条路,我们拭目以待。
          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2013-05-13
            • 1970-01-01
            • 2011-02-16
            • 1970-01-01
            • 2020-09-06
            • 1970-01-01
            • 2021-09-02
            • 2023-03-28
            • 2011-06-02
            相关资源
            最近更新 更多