Advertisement
Guest User

Untitled

a guest
Mar 24th, 2015
1,003
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.78 KB | None | 0 0
  1. {$IF CompilerVersion >= 23.0}
  2. uses
  3.   System.Generics.Collections;
  4.  
  5. type
  6.   TScreencursorChanger = class(TObject)
  7.   private
  8.     class var FScreencursorBackup: TDictionary<TCommonCustomForm, TCursor>;
  9.   public
  10.     class procedure SetScreenCursor(ACursor: TCursor);
  11.     class procedure RollbackScreenCursor;
  12.   end;
  13.  
  14. { TScreencursorChanger }
  15.  
  16. class procedure TScreencursorChanger.RollbackScreenCursor;
  17. var
  18.   frm: TCommonCustomForm;
  19. begin
  20.   if not Assigned(FScreencursorBackup) then Exit;
  21.  
  22.   for frm in FScreencursorBackup.Keys do
  23.   begin
  24.     frm.Cursor := FScreencursorBackup.Items[frm];
  25.   end;
  26. end;
  27.  
  28. class procedure TScreencursorChanger.SetScreenCursor(ACursor: TCursor);
  29. var
  30.   i: integer;
  31.   frm: TCommonCustomForm;
  32. begin
  33.   if not Assigned(FScreencursorBackup) then
  34.   begin
  35.     FScreencursorBackup := TDictionary<TCommonCustomForm, TCursor>.Create;
  36.   end
  37.   else
  38.   begin
  39.     FScreencursorBackup.Clear;
  40.   end;
  41.  
  42.   for i := 0 to Screen.FormCount-1 do
  43.   begin
  44.     frm := Screen.Forms[i];
  45.     FScreencursorBackup.Add(frm, frm.Cursor);
  46.     frm.Cursor := ACursor;
  47.   end;
  48. end;
  49. {$ELSE}
  50. type
  51.   TScreencursorChanger = class(TObject)
  52.   public
  53.     class procedure SetScreenCursor(ACursor: TCursor);
  54.     class procedure RollbackScreenCursor;
  55.   end;
  56.  
  57. var
  58.   FScreencursorBackup: TCursor;
  59.  
  60. class procedure TScreencursorChanger.RollbackScreenCursor;
  61. begin
  62.   Screen.Cursor := FScreencursorBackup;
  63. end;
  64.  
  65. class procedure TScreencursorChanger.SetScreenCursor(ACursor: TCursor);
  66. begin
  67.   FScreencursorBackup := Screen.Cursor;
  68.   Screen.Cursor := ACursor;
  69. end;
  70. {$IFEND}
  71.  
  72. procedure TForm1.Button1Click(Sender: TObject);
  73. begin
  74.   TScreencursorChanger.SetScreenCursor(crHourglass);
  75.   try
  76.     Sleep(2000);
  77.   finally
  78.     TScreencursorChanger.RollbackScreenCursor;
  79.   end;
  80. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement