【问题标题】:Change error message in TIdTCPClient.Connect更改 TIdTCPClient.Connect 中的错误消息
【发布时间】:2020-12-01 06:25:37
【问题描述】:

我正在使用TIdTCPClient。做起来似乎很简单,但是执行tcpClient->Connect();时却找不到改错误信息"Already connected"的方法

所以我设置了HostPortConnectTimeout,然后我调用了Connect()

我尝试使用WriteLn() 更改该错误消息,也许这就是解决方案,但我可能以错误的方式使用它。

我只想向客户端显示(可能在ShowMessage()TLabel 中),不一定向服务器显示。

【问题讨论】:

  • 请发布您遇到问题的代码。

标签: firemonkey c++builder rad-studio


【解决方案1】:

如果客户端已经连接到服务器,则不能调用TIdTCPClient::Connect()TIdTCPClient::Connected() 返回true),您必须先调用TIdTCPClient::Disconnect()

如果您询问如何更改错误消息文本本身,它是一个本地化字符串(IdResourceStringsCore 单元中的RSAlreadyConnected),因此只需 localize your app 根据需要。

否则,您可以简单地使用try..catch 来捕获引发的EIdAlreadyConnected 异常,然后显示您想要的任何文本,例如:

try {
  tcpClient->Connect();;
}
const (const EIdAlreadyConnected &) {
    ShowMessage("Already connected! Please disconnect first.");
}
catch (const Exception &) {
    ShowMessage("Error Connecting!");
}

【讨论】:

  • 不工作...我试图以你写的方式使用它,但没有结果,试图只得到 const 但没有结果,试图覆盖 EIdAlreadyConnected ,但它一直显示消息“已连接”。我只需要修改此消息...您还有其他示例吗?
  • 没问题,我现在知道了,我是通过返回 Connected() 的值来完成的,但是感谢 Remy 的帮助!
  • 如果不更改 Indy 的源代码或本地化您的应用程序(或捕获异常并更改其Message 属性),您将无法修改文本本身。您在调试器中运行应用程序时是否看到错误弹出窗口?如果是这样,那是完全正常的行为,如果需要,您可以将调试器配置为忽略 EIdAlreadyConnected。否则,如果您在调试器之外运行应用程序时看到错误出现,这意味着编译器的异常处理无法正常工作。例如,这是 Android 和 OSX 上的一个已知问题。
  • 好的,非常感谢,我明白了,但我有另一个想法:如果单击,禁用“启用”按钮,反之亦然。我感谢我做了很多,我可以做我需要的。谢谢你的解释,我不知道。
猜你喜欢
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2019-05-27
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多