documentation, filter in RxMemDataSet

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1152 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
alexs75
2010-02-02 20:31:21 +00:00
parent 3d1414df44
commit 2b71476e7d
4 changed files with 96 additions and 3 deletions

View File

@@ -28,7 +28,9 @@ type
TRxMemoryData = class(TDataSet)
private
{$IFDEF FIX_TRxMemoryData_Filter}
FOnFilterRecordEx: TFilterRecordEvent;
{$ENDIF}
FRecordPos: Integer;
FRecordSize: Integer;
FBookmarkOfs: Integer;
@@ -43,11 +45,13 @@ type
FCaseInsensitiveSort: Boolean;
FDescendingSort: Boolean;
function AddRecord: TMemoryRecord;
function GetOnFilterRecordEx: TFilterRecordEvent;
function InsertRecord(Index: Integer): TMemoryRecord;
function FindRecordID(ID: Integer): TMemoryRecord;
procedure CreateIndexList(const FieldNames: string);
procedure FreeIndexList;
procedure QuickSort(L, R: Integer; Compare: TCompareRecords);
procedure SetOnFilterRecordEx(const AValue: TFilterRecordEvent);
procedure Sort;
function CalcRecordSize: Integer;
function FindFieldData(Buffer: Pointer; Field: TField): Pointer;
@@ -151,7 +155,7 @@ type
property OnDeleteError;
property OnEditError;
property OnFilterRecord;
property OnFilterRecordEx: TFilterRecordEvent read FOnFilterRecordEx write FOnFilterRecordEx;
property OnFilterRecordEx: TFilterRecordEvent read GetOnFilterRecordEx write SetOnFilterRecordEx;
property OnNewRecord;
property OnPostError;
end;
@@ -462,6 +466,15 @@ begin
Result := TMemoryRecord.Create(Self);
end;
function TRxMemoryData.GetOnFilterRecordEx: TFilterRecordEvent;
begin
{$IFDEF FIX_TRxMemoryData_Filter}
Result:=FOnFilterRecordEx;
{$ELSE}
Result:=OnFilterRecord;
{$ENDIF}
end;
function TRxMemoryData.FindRecordID(ID: Integer): TMemoryRecord;
var
I: Integer;
@@ -882,20 +895,29 @@ var
SaveState: TDataSetState;
begin
Result := True;
{$IFDEF FIX_TRxMemoryData_Filter}
if Assigned(OnFilterRecordEx) then
{$ELSE}
if Assigned(OnFilterRecord) then
{$ENDIF}
begin
if (FRecordPos >= 0) and (FRecordPos < RecordCount) then
begin
SaveState := SetTempState(dsFilter);
try
RecordToBuffer(Records[FRecordPos], TempBuffer);
{$IFDEF FIX_TRxMemoryData_Filter}
OnFilterRecordEx(Self, Result);
{$ELSE}
OnFilterRecord(Self, Result);
{$ENDIF}
except
Application.HandleException(Self);
end;
RestoreState(SaveState);
end
else Result := False;
else
Result := False;
end;
end;
@@ -1418,6 +1440,16 @@ begin
until I >= R;
end;
procedure TRxMemoryData.SetOnFilterRecordEx(const AValue: TFilterRecordEvent);
begin
{$IFDEF FIX_TRxMemoryData_Filter}
CheckBiDirectional;
FOnFilterRecordEx:=AValue;
{$ELSE}
OnFilterRecord:=AValue;
{$ENDIF}
end;
function TRxMemoryData.CompareRecords(Item1, Item2: TMemoryRecord): Integer;
var
Data1, Data2: PChar;