/Source/FR_DSET.PAS

http://github.com/FastReports/FreeReport · Pascal · 96 lines · 70 code · 17 blank · 9 comment · 4 complexity · 75380c730b89a68c84c0082ecf009df3 MD5 · raw file

  1. {*****************************************}
  2. { }
  3. { FastReport v2.3 }
  4. { Report dataset }
  5. { }
  6. { Copyright (c) 1998-99 by Tzyganenko A. }
  7. { }
  8. {*****************************************}
  9. unit FR_DSet;
  10. interface
  11. {$I FR.inc}
  12. uses
  13. SysUtils, Windows, Messages, Classes;
  14. type
  15. TRangeBegin = (rbFirst, rbCurrent);
  16. TRangeEnd = (reLast, reCurrent, reCount);
  17. TCheckEOFEvent = procedure(Sender: TObject; var Eof: Boolean) of object;
  18. TfrDataset = class(TComponent)
  19. protected
  20. FRangeBegin: TRangeBegin;
  21. FRangeEnd: TRangeEnd;
  22. FRangeEndCount: Integer;
  23. FOnFirst, FOnNext, FOnLast: TNotifyEvent;
  24. FOnCheckEOF: TCheckEOFEvent;
  25. FRecNo: Integer;
  26. public
  27. constructor Create(AOwner: TComponent); override;
  28. procedure Init; virtual;
  29. procedure Exit; virtual;
  30. procedure First; virtual;
  31. procedure Next; virtual;
  32. function Eof: Boolean; virtual;
  33. property RangeBegin: TRangeBegin read FRangeBegin write FRangeBegin default rbFirst;
  34. property RangeEnd: TRangeEnd read FRangeEnd write FRangeEnd default reLast;
  35. property RangeEndCount: Integer read FRangeEndCount write FRangeEndCount default 0;
  36. property RecNo: Integer read FRecNo;
  37. property OnCheckEOF: TCheckEOFEvent read FOnCheckEOF write FOnCheckEOF;
  38. property OnFirst: TNotifyEvent read FOnFirst write FOnFirst;
  39. property OnNext: TNotifyEvent read FOnNext write FOnNext;
  40. end;
  41. TfrUserDataset = class(TfrDataset)
  42. published
  43. property RangeBegin;
  44. property RangeEnd;
  45. property RangeEndCount;
  46. property OnCheckEOF;
  47. property OnFirst;
  48. property OnNext;
  49. end;
  50. implementation
  51. constructor TfrDataSet.Create(AOwner: TComponent);
  52. begin
  53. inherited Create(AOwner);
  54. RangeBegin := rbFirst;
  55. RangeEnd := reLast;
  56. end;
  57. procedure TfrDataSet.Init;
  58. begin
  59. end;
  60. procedure TfrDataSet.Exit;
  61. begin
  62. end;
  63. procedure TfrDataSet.First;
  64. begin
  65. FRecNo := 0;
  66. if Assigned(FOnFirst) then FOnFirst(Self);
  67. end;
  68. procedure TfrDataSet.Next;
  69. begin
  70. Inc(FRecNo);
  71. if Assigned(FOnNext) then FOnNext(Self);
  72. end;
  73. function TfrDataSet.Eof: Boolean;
  74. begin
  75. Result := False;
  76. if (FRangeEnd = reCount) and (FRecNo >= FRangeEndCount) then Result := True;
  77. if Assigned(FOnCheckEOF) then FOnCheckEOF(Self, Result);
  78. end;
  79. end.