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

时间:2013-01-03 13:56:42

标签: forms delphi console-application delphi-2010

我在Windows窗体中使用ScktComp和Winsock创建了一个聊天服务器。如何在控制台应用程序中做同样的事情?

我发现这是一个starting point但是,内部的链接(线程的作者回复“几乎完美答案”)已过期。

相当于ServerSocketClientConnect / ClientSocketConnect以及控制台应用中的其他方法是什么?

2 个答案:

答案 0 :(得分:3)

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

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

步骤:

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

  2. 构建组件,就好像它是一个类:

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

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

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

    你可以继续使用你当前使用的服务器套接字和客户端套接字,虽然我想建议你忘记控制台应用程序,除非你真的需要它,因为你所做的只是进行开发和操作你的程序更难以实现。您不必更改组件或类以在控制台应用程序中使用它们,但是,我应该说GUI或控制台,Delphi中“Internet”选项卡上的TTcpClient和TTcpServer组件不适合实际使用任何现实世界的应用。它们是为了向后兼容而应该被认为是“过时”和“不再以任何严肃的方式使用”。

    查看真实的TCP / IP库,如Indy,ICS,Synapse或其他任何内容,除了组件面板“Internet”页面中的那些组件,这些组件不适合任何实际使用除“玩具”之外的其他规模。

答案 1 :(得分:-1)

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

同时检查现有代码是否使用synchronize在VCL主线程中运行代码。在非VCL应用程序中使用同步可以是dangerous