Forms 如何在Delphi中将Windows窗体移植到控制台应用程序

Forms 如何在Delphi中将Windows窗体移植到控制台应用程序,forms,delphi,console-application,delphi-2010,Forms,Delphi,Console Application,Delphi 2010,我已经在Windows窗体中使用ScktComp和Winsock创建了一个聊天服务器。如何在控制台应用程序中进行相同的操作 我发现这是一个错误,但是,里面的链接(该线程的作者回答为“几乎完美的答案”)已经过期 控制台应用程序中的ServerSocketClientConnect/ClientSocketConnect和其他方法的等价物是什么?Delphi在控制台应用程序中使用相同的类和非可视组件。您不需要更改所使用的类,但是您需要学习如何通过手动输入来向单元添加内容,而不是依赖delphiide

我已经在Windows窗体中使用ScktComp和Winsock创建了一个聊天服务器。如何在控制台应用程序中进行相同的操作

我发现这是一个错误,但是,里面的链接(该线程的作者回答为“几乎完美的答案”)已经过期


控制台应用程序中的
ServerSocketClientConnect
/
ClientSocketConnect
和其他方法的等价物是什么?

Delphi在控制台应用程序中使用相同的类和非可视组件。您不需要更改所使用的类,但是您需要学习如何通过手动输入来向单元添加内容,而不是依赖delphiide为您生成代码

您可以使用以下步骤自己创建它们,也可以使用在控制台应用程序中使用包含非可视组件的VCL Win32 GUI应用程序时已构建的数据模块

步骤:

  • 将包含要使用的类或组件的单元名称添加到Uses子句中

  • 将组件构造为类:

      var
        aSomething:TSomething;
      begin
        aSomething := TSomething.Create(Parameter1,Parameter2);
      end;
    
  • 记得把它放在正确的地方

         aSomething.Free;
    
  • 然而,我很难理解为什么要将聊天服务器变成控制台应用程序,而不是作为玩具或实验。在实际使用中,您可能需要一个Win32 GUI,或者您需要一个完全非可视化的服务(NT样式的服务),您可以创建它,而无需将APPTYPE更改为console,但它可以在没有任何GUI的情况下运行

    我所看到的编写控制台应用程序的主要实际原因是从命令行编写有用的东西,例如构建助手实用程序等。制作控制台应用程序本身非常简单。首先创建一个新的空控制台应用程序,向其中添加一个新的空pascal单元,生成一个main方法,然后将您想要的单元名称添加到您正在处理的主单元的uses子句中。就这些

    您可以继续使用当前正在使用的服务器套接字和客户端套接字,尽管我建议您忘记console应用程序,除非您真的需要它,因为您所做的只是让程序的开发和操作变得更加困难,而没有真正的目的。您不必更改组件或类来在控制台应用程序中使用它们,但是,我应该说GUI或控制台一样,Delphi中“Internet”选项卡上的TTcpClient和TTcpServer组件不适合在任何实际应用程序中实际使用。它们用于向后兼容,应该被视为“过时”和“不再以任何严肃的方式使用”


    看看真正的TCP/IP库,比如Indy、ICS、Synapse或其他任何东西,除了组件调色板“Internet”页面中的组件,这些组件不适合在除“玩具”以外的任何规模的真实世界中使用。

    一些VCL类需要Windows消息循环和/或窗口句柄。因此,如果更改应用程序类型,它们可能会停止工作


    还要检查现有代码是否使用
    同步
    在VCL主线程中运行代码。在非VCL应用程序中使用同步可能非常困难。

    这是非常广泛的。什么特别的方面困扰着你?那页上的链接很糟糕,因为网站的论坛软件在2002年3月到今天的某个时候改变了它的URL结构。相关帖子仍然存在:搜索短语
    ^gLes TMyEvents
    (即用户gLes发布的关于TMyEvents的帖子)。如果您对Windows特定的控制台TCP/IP演示感兴趣,几年前ICS为它提供了一个很好的设置和框架。请注意,它可能比这更复杂,因为您可能需要创建一个消息泵。ICS TApplication衍生产品为您提供了这一功能(单位为conapp,称为IIRC)。值得一看的是,即使你使用不同的socket SuiteSkys作为建议,这也是我一直在寻找的出发点。你知道INDY在控制台应用程序中是否工作良好吗?我知道TTimer需要一个消息句柄,但你仍然可以在控制台应用程序中使用Win32消息句柄,对吗?你就是不能创建可见的窗口。我非常确定,因为AppType是不会阻止对CreateWindow调用的控制台。:-)@是的,我在控制台应用程序或服务中使用Indy TCP客户端。通常,只要不使用异步Winsock API方法,就不需要windows句柄。