mProgressFrm.pas 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. {*******************************************************************************
  2. 单元名称: mProgressFrm.pas
  3. 单元说明: 简单的进度提示窗。
  4. 作者时间: Chenshilong, 2011-08-25
  5. *******************************************************************************}
  6. unit mProgressFrm;
  7. interface
  8. uses
  9. Windows, Messages, SysUtils, Variants, Classes, StdCtrls, Controls,
  10. ExtCtrls, Forms, ComCtrls, GifAnimator;
  11. type
  12. TmProgress = class(TForm)
  13. shpProgress: TShape;
  14. lblMessage: TLabel;
  15. gaProgress: TGifAnimator;
  16. procedure shpProgressMouseDown(Sender: TObject; Button: TMouseButton;
  17. Shift: TShiftState; X, Y: Integer);
  18. private
  19. { Private declarations }
  20. public
  21. { Public declarations }
  22. end;
  23. procedure CreateProgress(AText: string);
  24. procedure RefreshProgress(AText: string);
  25. procedure CloseProgress;
  26. implementation
  27. uses ScUtils;
  28. var
  29. mProgress: TmProgress = nil;
  30. const
  31. sc_DragMove = $F012;
  32. {$R *.dfm}
  33. procedure Delay(Ams: Longint);
  34. var
  35. Time1, Time2: Longint;
  36. begin
  37. Time1 := GetTickCount();
  38. repeat
  39. Application.ProcessMessages;
  40. Time2 := GetTickCount();
  41. until (Time2 - Time1 >= Ams) or (Time2 < Time1);
  42. end;
  43. procedure CreateProgress(AText: string);
  44. begin
  45. Screen.Cursor := crHourGlass;
  46. if mProgress = nil then
  47. mProgress := TmProgress.Create(nil);
  48. mProgress.lblMessage.Caption := AText;
  49. mProgress.Show;
  50. mProgress.Update;
  51. mProgress.gaProgress.Animate := True;
  52. end;
  53. procedure RefreshProgress(AText: string);
  54. begin
  55. if mProgress = nil then Exit;
  56. mProgress.lblMessage.Caption := AText;
  57. mProgress.Update;
  58. end;
  59. procedure CloseProgress;
  60. begin
  61. if Assigned(mProgress) then
  62. begin
  63. Delay(300);
  64. if mProgress <> nil then
  65. mProgress.gaProgress.Animate := False;
  66. FreeAndNil(mProgress);
  67. end;
  68. Screen.Cursor := crDefault;
  69. end;
  70. procedure TmProgress.shpProgressMouseDown(Sender: TObject;
  71. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  72. begin
  73. ReleaseCapture;
  74. (mProgress as TWinControl).PerForm(wm_SysCommand, sc_DragMove, 0);
  75. end;
  76. end.