File: lr_dset.pas

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (157 lines) | stat: -rw-r--r-- 3,327 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157

{*****************************************}
{                                         }
{             FastReport v2.3             }
{             Report dataset              }
{                                         }
{  Copyright (c) 1998-99 by Tzyganenko A. }
{                                         }
{*****************************************}

unit LR_DSet;

interface

{$I LR_Vers.inc}

uses
  SysUtils, Classes;

type
  TRangeBegin = (rbFirst, rbCurrent);
  TRangeEnd = (reLast, reCurrent, reCount);
  TCheckEOFEvent = procedure(Sender: TObject; var Eof: Boolean) of object;

  { TfrDataset }

  TfrDataset = class(TComponent)
  protected
    FRangeBegin: TRangeBegin;
    FRangeEnd: TRangeEnd;
    FRangeEndCount: Integer;
    FOnFirst, FOnNext, FOnLast: TNotifyEvent;
    FOnCheckEOF: TCheckEOFEvent;
    FRecNo: Integer;
    procedure DoCheckEOF(var Eof: Boolean); virtual;
    procedure DoFirst; virtual;
    procedure DoNext; virtual;
  public
    constructor Create(AOwner: TComponent); override;
    procedure Init; virtual;
    procedure Exit; virtual;
    procedure First; virtual;
    procedure Next; virtual;
    procedure Refresh; virtual;

    function GetBookMark : Pointer; virtual;
    procedure GotoBookMark({%H-}BM : Pointer); virtual;
    procedure FreeBookMark({%H-}BM : Pointer); virtual;
    procedure DisableControls; virtual;
    procedure EnableControls; virtual;
    
    function Eof: Boolean; virtual;
    property RangeBegin: TRangeBegin read FRangeBegin write FRangeBegin default rbFirst;
    property RangeEnd: TRangeEnd read FRangeEnd write FRangeEnd default reLast;
    property RangeEndCount: Integer read FRangeEndCount write FRangeEndCount default 0;
    property RecNo: Integer read FRecNo;
    property OnCheckEOF: TCheckEOFEvent read FOnCheckEOF write FOnCheckEOF;
    property OnFirst: TNotifyEvent read FOnFirst write FOnFirst;
    property OnNext: TNotifyEvent read FOnNext write FOnNext;
  end;

  TfrUserDataset = class(TfrDataset)
  published
    property RangeBegin;
    property RangeEnd;
    property RangeEndCount;
    property OnCheckEOF;
    property OnFirst;
    property OnNext;
  end;

implementation

procedure TfrDataset.DoCheckEOF(var Eof: Boolean);
begin
  if Assigned(FOnCheckEOF) then
     FOnCheckEOF(Self, Eof);
end;

procedure TfrDataset.DoFirst;
begin
  if Assigned(FOnFirst) then
    FOnFirst(Self);
end;

procedure TfrDataset.DoNext;
begin
  if Assigned(FOnNext) then
    FOnNext(Self);
end;

constructor TfrDataSet.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  RangeBegin := rbFirst;
  RangeEnd := reLast;
end;

procedure TfrDataSet.Init;
begin
end;

procedure TfrDataSet.Exit;
begin
end;

procedure TfrDataSet.First;
begin
  FRecNo := 0;
  DoFirst;
end;

procedure TfrDataSet.Next;
begin
  Inc(FRecNo);
  DoNext;
end;

procedure TfrDataset.Refresh;
begin
end;

function TfrDataset.GetBookMark: Pointer;
begin
  Result:=nil;
end;

procedure TfrDataset.GotoBookMark(BM: Pointer);
begin

end;

procedure TfrDataset.FreeBookMark(BM: Pointer);
begin

end;

procedure TfrDataset.DisableControls;
begin

end;

procedure TfrDataset.EnableControls;
begin

end;

function TfrDataSet.Eof: Boolean;
begin
  Result := False;
  if (FRangeEnd = reCount) and (FRecNo >= FRangeEndCount) then
    Result := True;
  DoCheckEOF(Result);
end;


end.