クライアントがこのコードと同じように接続したときに、Tabsheet
に動的に追加したい:PageControl
IdCmdTCPServer
procedure TForm1.IdCmdTCPServer1Connect(AContext: TIdContext);
var
ATabSheet: TTabSheet;
begin
ATabSheet := TTabSheet.Create(PageControl1);
ATabSheet.PageControl := PageControl1;
ATabSheet.Caption := 'Hello!';
{...}
end;
問題ありませんが、アプリケーションを閉じると、「システム エラー。コード: 1400。無効なウィンドウ ハンドル」というメッセージが表示された EOSError が表示されます。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;
コマンドのテスト結果:
しかし、言及された問題は、アプリケーションの終了時に発生する鋼です!