Unabhängig davon könnte man dem TE -da die Frage schon beantwortet wurde- den Tipp geben, hier keine Klasse zu erzeugen, sondern eher einen kleinen UI-Controller, der das übernimmt. Da Delphi das Paradigma 'Wer Dreck macht, muss aufräumen' vorgibt (Create/Free, Begin/EndUpdate usw.) sollte man das
imho hier auch bewusst so umsetzen:
Delphi-Quellcode:
...
UIController.BeginWaitCursor;
Try
DoFoo();
DoBar();
UIController.BeginSQLWaitCursor;
Try
DoDatabaseStuff();
Finally
UIController.EndWaitCursor;
End;
DoEvenMoreStuff();
Finally
UIController.EndWaitCursor;
End;
...
Und wenn Refactor-Man jetzt loslegt, muss er ja die Try-Finally-Blöcke zusammen lassen.
Es dürfte in aktuellen Delphis auch mit Lambda-Ausdrücken gehen...
Delphi-Quellcode:
Procedure WaitCursor (a : Action); // Oder wie das auch immer deklariert wird
begin
oldCursor := Screen.Cursor;
Screen.Cursor := clWait;
try
Action();
finally
Screen.Cursor := oldCursor;
End
End;
Da jetzt gerade ein Interface zu verwenden, erscheint mir etwas unglücklich.