古いDelphiプロジェクトソースを新しくマイグレーションする場合
ボタンクリックイベントで重い処理で画面がグレーになり「応答がありません」とか出ます。
そのためにTThreadからの継承クラスを作るのですが
最近のDelphiCreateAnonymousThread()を使って楽にスレッド処理が可能です。

TThread.CreateAnonymousThread();

CreateAnonymousThread引数にコードを書くだけです。

var aThread: TThread;
begin
  aThread := TThread.CreateAnonymousThread(procedure begin
    Sleep(3000);
  end);
end;

これでsleep(3000);のコードがスレッド作成されます。
あとはaThread.Start;すれば実行できます。

CreateAnonymousThread内で、同期したいコードはSynchronize()

CreateAnonymousThreadSynchronizeはIDEのコードテンプレートに入れても良いかと思います。

procedure TForm1.Button1Click(Sender: TObject);
begin
  sw_ActivityIndicator  := True;
  TThread.CreateAnonymousThread(procedure begin
    //即席スレッド(処理)
    //ここに処理したい内容を書く
    //Sleep(3000);
    TThread.Synchronize(TThread.CurrentThread, procedure begin
      //メインとの同期
      //ここは安全にメインのコンポーネントなどを操作可能
      sw_ActivityIndicator  := false;
    end);
  end).Start;
end;

procedure TForm1.setsw_ActivityIndicator(const Value: Boolean);
begin
  Button1.Enabled := not Value;
  ActivityIndicator1.Animate  := Value;
  ActivityIndicator1.Visible  := Value;
end;

0823_0111.gif

bcc32でCreateAnonymousThreadを利用する場合