为什么在设计时找不到 TServerSocket Class?

Why TServerSocket Class not found at design-time?

Comm_Ethernet.dfm 中,我声明了一个类型为 TServerSocket:

的组件
object frmCommEthernet: TfrmCommEthernet
  object ServerSocket1: TServerSocket
    Active = False
    Port = 5555
    ServerType = stNonBlocking
    OnClientConnect = ServerSocket1ClientConnect
    OnClientDisconnect = ServerSocket1ClientDisconnect
    OnClientRead = ServerSocket1ClientRead
    OnClientError = ServerSocket1ClientError
    Left = 808
    Top = 8
  end
end

TServerSocket 在 RTL 单元 System.Win.ScktComp 中声明,但它在设计时似乎不可用,因为当我打开我的表单时它会抱怨:

TServerSocket class not found [Ignore] [Cancel] [Ignore All]

但是我的项目编译并运行得很好(当此表单未在 IDE 中打开时)。我如何摆脱这个错误?

出于某种原因,默认情况下,包含此单元的 BPL 包未安装在 IDE。

你必须去:

Components -> Install Packages -> Add

然后select dclsockets160.bpl in Embarcadero\RAD Studio.0\bin(根据你的Delphi版本更改)

如何找出一个单元包含在哪个 RTL BPL 包中对我来说是个谜;它似乎没有被记录在任何地方。

ScktComp 中的组件已弃用并已弃用很长时间。您应该使用不同的组件,例如 Indy。弃用的一个重要原因是这些组件不是跨平台的。

如果将 dclsocketsNNN.bpl 包安装到 IDE 中,您仍然可以在设计时使用 ScktComp 组件。大概 Embarcadero 默认不安装这个包,因为它包含不推荐使用的组件。