【发布时间】:2013-05-30 17:54:25
【问题描述】:
当客户端连接到我的IdCmdTCPServer 时,我想将Tabsheet 动态添加到PageControl,与此代码相同:
procedure TForm1.IdCmdTCPServer1Connect(AContext: TIdContext);
var
ATabSheet: TTabSheet;
begin
ATabSheet := TTabSheet.Create(PageControl1);
ATabSheet.PageControl := PageControl1;
ATabSheet.Caption := 'Hello!';
{...}
end;
没关系,但是当关闭应用程序时,我会收到 EOSError 消息:“系统错误。代码:1400。无效的窗口句柄”。
我已经在TButton 的OnClick 事件中添加了这个代码块,应用程序将毫无问题地关闭。
有没有更安全的方法来做到这一点?
在David Heffernan的帮助下,我改变了我的方法:
....
type
TMyThrd = class(TThread)
protected
procedure Execute; override;
end;
...
procedure TMyThrd.Execute;
begin
with TTabsheet.Create(Form1.PageControl1) do
PageControl := Form1.PageControl1;
end;
...
procedure TForm1.cmdAddTabCommand(ASender: TIdCommand);
begin
with TMyThrd.Create(True) do
begin
FreeOnTerminate := True;
Resume;
end;
end;
及命令测试结果:
但提到的问题是在应用程序关闭时发生钢铁!
【问题讨论】:
-
@bummi:谢谢你的建议。但我检查了我的 TCP 部分代码,并且在
OnConnect事件中没有此块代码,它们运行完美。只是当我添加这个块时,就会出现问题!
标签: delphi tcpserver tpagecontrol system-error ttabsheet