Я хочу добавить Tabsheet
динамически в PageControl
, когда клиент подключается к моей IdCmdTCPServer
же, как этот код:Как безопасно добавить таблицу в файл PageControl в событии OnConnect TIdCmdTCPServer?
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 «s помощи, я изменил свой Methode так:
....
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;
И тест команды Результат:
но указанная проблема является сталь происходит по заявке закрыть!
может быть, это будет способствовать http://stackoverflow.com/q/9139940/1699210 – bummi
@bummi: спасибо за ваше предложение. но я проверил свои части кода TCP, и они отлично работают без этого блочного кода в событии OnConnect. просто когда я добавлю этот блок, проблема появится! –