Можно, только синхронно. Используй TThread.Synchronize. Код пишется с листа, не уверен, что действующий.
procedure TMyThread.SyncCreateMemo;
begin
Memo:=TMemo.Create(Form6);
Memo.Parent:=Form6;
Memo.Left:=50;
Memo.Top:=50;
Memo.Width:=250;
Memo.Height:=100;
Memo.Text:='Мама я родился!';
end;
procedure TMyThread.Execute;
begin
Synchronize(SyncCreateMemo);
end;
Второй способ, более сложный и опасный — PostMessage. Здесь никаких задержек поток испытывать не будет. Но будьте осторожны — форма создаст компонент когда угодно и нельзя его заполнять сразу же.
procedure TForm6.WmCreateMemo; // message WM_CREATEMEMO = WM_USER + 1
begin
Memo:=TMemo.Create(Form6);
Memo.Parent:=Self;
Memo.Left:=50;
Memo.Top:=50;
Memo.Width:=250;
Memo.Height:=100;
Memo.Text:='Мама я родился!';
end;
procedure TMyThread.Execute;
begin
PostMessage(Form6.Handle, WM_CREATEMEMO, 0, 0);
end;
Заполнять наш редактор тоже можно путём PostMessage, но тут тоже будьте осторожны: сообщения-то выполнятся по порядку, но никто не знает, до окончания потока или нет. Бывает и такое, что два сообщения ушли в очередь, но ещё не обработались. В общем, будьте предельно осторожны с временем жизни объекта.