イベントの再入防止

どこかにTipsとかでありそうなネタだけど。
イベントに入ってきた所で最初にイベントに対してnilを代入する。
処理が終わったらイベントにメソッドを設定し直す。

procedure TForm1.Button1Click(Sender: TObject);
begin
  TControl(Sender).OnClick := Nil;
  // なにか処理
  //
  TControl(Sender).OnClick := Button1Click;
end;

同じような感じで、起動時に一回だけ処理を実行したいとかの場合。
FormのOnCreateだと具合が悪い時は、OnShowイベントかOnActivateイベントを使ってイベントの中でNilを設定する。

procedure TForm1.FormShow(Sender: TObject);
begin
  Self.OnShow := Nil;
  // 何か処理
end;