Delphi 如何实现一个可以是两个应用或一个应用的应用?

Delphi 如何实现一个可以是两个应用或一个应用的应用?,delphi,Delphi,澄清: 我想从硬件传感器收集数据,并将其显示在采集位置的PC上 我想做一些数据挖掘,并显示在PC上的结果,这可能是或可能不是共同定位 因此,有些人可能希望在一个位置同时使用两种功能 考虑到可能会有一些共享代码,最好的方法是什么 两个独立的应用程序,还是一个可以在客户身上显示功能A、B或A&B的应用程序 如果是一个应用程序,您将使用什么来显示两个窗口?肩并肩,还是什么 还是仅仅取决于字符串的长度?我会使用不同的应用程序。后台运行的收集数据的非可视服务,以及向用户显示数据的查看器应用程序。然后,查看

澄清:

  • 我想从硬件传感器收集数据,并将其显示在采集位置的PC上
  • 我想做一些数据挖掘,并显示在PC上的结果,这可能是或可能不是共同定位
  • 因此,有些人可能希望在一个位置同时使用两种功能

    考虑到可能会有一些共享代码,最好的方法是什么

    两个独立的应用程序,还是一个可以在客户身上显示功能A、B或A&B的应用程序

    如果是一个应用程序,您将使用什么来显示两个窗口?肩并肩,还是什么


    还是仅仅取决于字符串的长度?

    我会使用不同的应用程序。后台运行的收集数据的非可视服务,以及向用户显示数据的查看器应用程序。然后,查看器应用程序可以在本地机器和远程机器上运行,所有这些都连接到服务以接收数据更新。

    我已经在Delphi中为复杂的生物分析自动化设备实现了一些非常接近的软件解决方案

    我看到至少两种实现模式:

    1-您可以同时拥有相同的Delphi可执行文件:

    • 后台服务应用程序
    • GUI应用程序
    请注意,在这种情况下,将执行可执行文件的两个实例。因此,您不能简单地在代码的两部分之间共享变量,必须依赖于某些IPC机制:GDI消息轻快,但由于服务应用程序使用Vista,因此不允许使用GDI消息,因此我想命名管道将是合适的候选者

    优点:服务部件将在后台运行,甚至在用户打开其windows会话之前(这对于后台硬件任务很有意义)

    缺点:要实现的IPC更复杂

    但是,如果您准备好IPC协议网络,您将能够远程查阅所有数据:您可以在网络上部署客户端应用程序,必要时甚至可以通过Internet。或者,如果您使用通过HTTP发布某些JSON或HTML内容,则可以部署Ajax应用程序

    (我已经在我的自动化设备上使用了这种设计,并在客户端和服务器之间共享相同的类)

    2-您可以让一个Delphi可执行文件同时作为后台应用程序和GUI应用程序

    要落实这一点:

    • 覆盖
      OnClose/wmClose
      事件以禁止关闭表单-改为在托盘中最小化表单
    • 创建一个信号量来本地化现有的应用程序:这样当你下次启动.exe时,它将还原主应用程序
    • 托盘图标将有一个菜单或通过双击恢复应用程序
    • 创建一个后台线程来处理所有度量-使用一个带有
      Sleep
      调用的循环

    雷米,好主意。我没有想到这一点,但这肯定是有道理的。在我给出答案之前,有没有关于如何实施的提示?而且,如果在一个位置(假设两个应用有不同的显示),在一个带有选项卡的应用程序中,在两个独立的应用程序中,在两个独立的应用程序中,每个应用程序都可以独立运行,您会如何显示?感谢1000000的帮助(+)除非数据挖掘在其自身的过程中有很多开销,否则我可能只会使用一个带有TabSheet的应用程序,每个选项卡显示相同数据的不同视图。该服务是它自己的过程,收集传感器数据,将数据更新推送到客户端,并存储最新数据的本地缓存,以便新客户端可以在下一次更新之前接收当前数据。查看器接收数据更新的单个副本,并根据需要对其进行处理。我会使用TCP或命名管道连接到服务,因为两者都支持网络。@由于最新的Windows安全策略,RemyLebeau TeamB命名管道是真正的网络PITA。根据我的实验,TCP或HTTP在客户端更容易使用。我认为使用HTTP通信守护进程和GUI有点过分。@当然,这就是为什么我说,既然不再允许GDI消息,我的第一个建议是使用命名管道。然后,通过网络进行远程GUI访问的HTTP:由于Windows的某些安全策略(取决于所使用的操作系统)和防火墙/网络设置,命名管道的网络友好性远不如HTTP。