Many years ago a certain Malcolm Groves wrote a lovely little class to simplify cursor management in Delphi. I've recently been pulled back to Delphi development and searched for an age to track down that original code. I eventually found it on the wayback machine but thought I'd post my slightly modified code here for your pleasure. It uses the wonders of Delphi interfaces to ensure the cursor will always get returned to its correct state after a long operation.
unit CursorSnapshot;
interface
uses
Controls;
type
ISnapshot = interface
['{D0C5F65A-70B4-4994-97F9-479EE86D20B9}']
procedure Restore;
end;
TCursorSnapshot = class(TInterfacedObject, ISnapshot)
private
FOriginalCursor : TCursor;
public
procedure Restore;
constructor Create;
destructor Destroy; override;
end;
implementation
uses Forms;
constructor TCursorSnapshot.Create;
begin
FOriginalCursor := Screen.cursor;
Screen.Cursor := crAppStart;
end;
destructor TCursorSnapshot.Destroy;
begin
Restore;
inherited;
end;
procedure TCursorSnapshot.Restore;
begin
Screen.Cursor := FOriginalCursor;
end;
end.
Usage is pretty simple, use it like so
procedure TForm1.Button1Click(Sender: TObject); var CursorSnapshot : ISnapshot; begin CursorSnapshot := TCursorSnapShot.Create; // some long winded operation end;