Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {$IF CompilerVersion >= 23.0}
- uses
- System.Generics.Collections;
- type
- TScreencursorChanger = class(TObject)
- private
- class var FScreencursorBackup: TDictionary<TCommonCustomForm, TCursor>;
- public
- class procedure SetScreenCursor(ACursor: TCursor);
- class procedure RollbackScreenCursor;
- end;
- { TScreencursorChanger }
- class procedure TScreencursorChanger.RollbackScreenCursor;
- var
- frm: TCommonCustomForm;
- begin
- if not Assigned(FScreencursorBackup) then Exit;
- for frm in FScreencursorBackup.Keys do
- begin
- frm.Cursor := FScreencursorBackup.Items[frm];
- end;
- end;
- class procedure TScreencursorChanger.SetScreenCursor(ACursor: TCursor);
- var
- i: integer;
- frm: TCommonCustomForm;
- begin
- if not Assigned(FScreencursorBackup) then
- begin
- FScreencursorBackup := TDictionary<TCommonCustomForm, TCursor>.Create;
- end
- else
- begin
- FScreencursorBackup.Clear;
- end;
- for i := 0 to Screen.FormCount-1 do
- begin
- frm := Screen.Forms[i];
- FScreencursorBackup.Add(frm, frm.Cursor);
- frm.Cursor := ACursor;
- end;
- end;
- {$ELSE}
- type
- TScreencursorChanger = class(TObject)
- public
- class procedure SetScreenCursor(ACursor: TCursor);
- class procedure RollbackScreenCursor;
- end;
- var
- FScreencursorBackup: TCursor;
- class procedure TScreencursorChanger.RollbackScreenCursor;
- begin
- Screen.Cursor := FScreencursorBackup;
- end;
- class procedure TScreencursorChanger.SetScreenCursor(ACursor: TCursor);
- begin
- FScreencursorBackup := Screen.Cursor;
- Screen.Cursor := ACursor;
- end;
- {$IFEND}
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- TScreencursorChanger.SetScreenCursor(crHourglass);
- try
- Sleep(2000);
- finally
- TScreencursorChanger.RollbackScreenCursor;
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement