cxfilter.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 2,243 行 · 第 1/5 页
PAS
2,243 行
begin
Result := VarCompare(AValue1, AValue2) = 0;
end;
function TcxFilterEqualOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorEqual);
end;
function TcxFilterEqualOperator.FilterText: string;
begin
Result := '=';
end;
function TcxFilterEqualOperator.IsExpression: Boolean;
begin
Result := VarIsArray(CriteriaItem.Value);
end;
function TcxFilterEqualOperator.GetExpressionFilterText(const AValue: Variant): string;
function ExtractFieldName(const Fields: string; var Pos: Integer): string;
var
I: Integer;
begin
I := Pos;
while (I <= Length(Fields)) and (Fields[I] <> ';') do Inc(I);
Result := Trim(Copy(Fields, Pos, I - Pos));
if (I <= Length(Fields)) and (Fields[I] = ';') then Inc(I);
Pos := I;
end;
var
AFieldNames: string;
I, APos: Integer;
begin
AFieldNames := CriteriaItem.GetFieldName;
APos := 1;
Result := '(' + ExtractFieldName(AFieldNames, APos) + ' = ' + GetExpressionValue(AValue[0]) + ')';
for I := VarArrayLowBound(AValue, 1) + 1 to VarArrayHighBound(AValue, 1) do
Result := Result + ' AND ' +
'(' + ExtractFieldName(AFieldNames, APos) + ' = ' + GetExpressionValue(AValue[I]) + ')';
end;
{ TcxFilterNotEqualOperator }
function TcxFilterNotEqualOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
Result := not inherited CompareValues(AValue1, AValue2);
end;
function TcxFilterNotEqualOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorNotEqual);
end;
function TcxFilterNotEqualOperator.FilterText: string;
begin
Result := '<>';
end;
function TcxFilterNotEqualOperator.GetExpressionFilterText(const AValue: Variant): string;
begin
Result := 'NOT (' + inherited GetExpressionFilterText(AValue) + ')';
end;
{ TcxFilterLessOperator }
function TcxFilterLessOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
{$IFNDEF DELPHI6}
Result := (AValue1 < AValue2);
{$ELSE}
Result := VarCompare(AValue1, AValue2) < 0;
{$ENDIF}
end;
function TcxFilterLessOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorLess);
end;
function TcxFilterLessOperator.FilterText: string;
begin
Result := '<';
end;
{ TcxFilterLessEqualOperator }
function TcxFilterLessEqualOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
{$IFNDEF DELPHI6}
Result := (AValue1 <= AValue2);
{$ELSE}
Result := VarCompare(AValue1, AValue2) <= 0;
{$ENDIF}
end;
function TcxFilterLessEqualOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorLessEqual);
end;
function TcxFilterLessEqualOperator.FilterText: string;
begin
Result := '<=';
end;
{ TcxFilterGreaterOperator }
function TcxFilterGreaterOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
{$IFNDEF DELPHI6}
Result := (AValue1 > AValue2);
{$ELSE}
Result := VarCompare(AValue1, AValue2) > 0;
{$ENDIF}
end;
function TcxFilterGreaterOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorGreater);
end;
function TcxFilterGreaterOperator.FilterText: string;
begin
Result := '>';
end;
{ TcxFilterGreaterEqualOperator }
function TcxFilterGreaterEqualOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
{$IFNDEF DELPHI6}
Result := (AValue1 >= AValue2);
{$ELSE}
Result := VarCompare(AValue1, AValue2) >= 0;
{$ENDIF}
end;
function TcxFilterGreaterEqualOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorGreaterEqual);
end;
function TcxFilterGreaterEqualOperator.FilterText: string;
begin
Result := '>=';
end;
{ TcxFilterLikeOperator }
function TcxFilterLikeOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
Result := LikeStr(VarToStr(AValue1), AValue2,
CriteriaItem.Criteria.PercentWildcard, CriteriaItem.Criteria.UnderscoreWildcard);
end;
function TcxFilterLikeOperator.DisplayText: string;
var
S: string;
begin
S := CriteriaItem.Value;
case LikeOperatorByPattern(S, CriteriaItem.Criteria.PercentWildcard) of
floBeginsWith:
Result := cxSFilterString(@cxSFilterOperatorBeginsWith);
floEndsWith:
Result := cxSFilterString(@cxSFilterOperatorEndsWith);
floContains:
Result := cxSFilterString(@cxSFilterOperatorContains);
else
Result := cxSFilterString(@cxSFilterOperatorLike);
end;
end;
function TcxFilterLikeOperator.FilterText: string;
begin
Result := 'LIKE';
end;
procedure TcxFilterLikeOperator.PrepareDisplayValue(var DisplayValue: string);
begin
if fcoShowOperatorDescription in CriteriaItem.Criteria.Options then
LikeOperatorByPattern(DisplayValue, CriteriaItem.Criteria.PercentWildcard);
end;
{ TcxFilterNotLikeOperator }
function TcxFilterNotLikeOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
Result := not inherited CompareValues(AValue1, AValue2);
end;
function TcxFilterNotLikeOperator.DisplayText: string;
var
S: string;
begin
S := CriteriaItem.Value;
case LikeOperatorByPattern(S, CriteriaItem.Criteria.PercentWildcard) of
floBeginsWith:
Result := cxSFilterString(@cxSFilterOperatorDoesNotBeginWith);
floEndsWith:
Result := cxSFilterString(@cxSFilterOperatorDoesNotEndWith);
floContains:
Result := cxSFilterString(@cxSFilterOperatorDoesNotContain);
else
Result := cxSFilterString(@cxSFilterOperatorNotLike);
end;
end;
function TcxFilterNotLikeOperator.FilterText: string;
begin
Result := 'NOT LIKE';
end;
function TcxFilterNotLikeOperator.IsExpression: Boolean;
begin
Result := CriteriaItem.Criteria.TranslateLike;
end;
function TcxFilterNotLikeOperator.GetExpressionFilterText(const AValue: Variant): string;
begin
Result := ' NOT (' + CriteriaItem.GetFieldName + ' LIKE ' + GetExpressionValue(AValue) + ')';
end;
{ TcxFilterBetweenOperator }
function TcxFilterBetweenOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
{$IFNDEF DELPHI6}
Result := (AValue2[0] <= AValue1) and (AValue1 <= AValue2[1]);
{$ELSE}
Result := (VarCompare(AValue2[0], AValue1) <= 0) and (VarCompare(AValue1, AValue2[1]) <= 0);
{$ENDIF}
end;
function TcxFilterBetweenOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorBetween);
end;
function TcxFilterBetweenOperator.FilterText: string;
begin
Result := 'BETWEEN';
end;
function TcxFilterBetweenOperator.IsDescription: Boolean;
begin
Result := True;
end;
function TcxFilterBetweenOperator.IsExpression: Boolean;
begin
Result := CriteriaItem.Criteria.TranslateBetween;
end;
function TcxFilterBetweenOperator.GetExpressionFilterText(const AValue: Variant): string;
var
AFieldName: string;
begin
AFieldName := CriteriaItem.GetFieldName;
Result := '(' + AFieldName + ' >= ' + GetExpressionValue(AValue[0]) + ') AND (' +
AFieldName + ' <= ' + GetExpressionValue(AValue[1]) + ')';
end;
procedure TcxFilterBetweenOperator.PrepareDisplayValue(var DisplayValue: string);
var
S: string;
begin
S := DisplayValue;
DisplayValue := VarBetweenArrayToStr(StrToVarBetweenArray(S));
end;
function TcxFilterBetweenOperator.PrepareExpressionValue(const AValue: Variant;
var DisplayValue: string): Boolean;
begin
Result := VarIsArray(AValue);
if Result then
DisplayValue := GetExpressionValue(AValue[0]) + ' AND ' + GetExpressionValue(AValue[1]);
end;
{ TcxFilterNotBetweenOperator }
function TcxFilterNotBetweenOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
Result := not inherited CompareValues(AValue1, AValue2);
end;
function TcxFilterNotBetweenOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorNotBetween);
end;
function TcxFilterNotBetweenOperator.FilterText: string;
begin
Result := 'NOT BETWEEN';
end;
function TcxFilterNotBetweenOperator.GetExpressionFilterText(const AValue: Variant): string;
begin
Result := 'NOT (' + inherited GetExpressionFilterText(AValue) + ')';
end;
{ TcxFilterInListOperator }
function TcxFilterInListOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
var
I: Integer;
begin
Result := False;
for I := VarArrayLowBound(AValue2, 1) to VarArrayHighBound(AValue2, 1) do
if AValue1 = AValue2[I] then
begin
Result := True;
Break;
end;
end;
function TcxFilterInListOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorInList);
end;
function TcxFilterInListOperator.FilterText: string;
begin
Result := 'IN';
end;
function TcxFilterInListOperator.IsDescription: Boolean;
begin
Result := True;
end;
function TcxFilterInListOperator.IsExpression: Boolean;
begin
Result := CriteriaItem.Criteria.TranslateIn;
end;
function TcxFilterInListOperator.GetExpressionFilterText(const AValue: Variant): string;
var
AFieldName: string;
I: Integer;
begin
AFieldName := CriteriaItem.GetFieldName;
Result := '(' + AFieldName + ' = ' + GetExpressionValue(AValue[0]) + ')';
for I := VarArrayLowBound(AValue, 1) + 1 to VarArrayHighBound(AValue, 1) do
Result := Result + ' OR ' + '(' + AFieldName + ' = ' + GetExpressionValue(AValue[I]) + ')';
end;
procedure TcxFilterInListOperator.PrepareDisplayValue(var DisplayValue: string);
var
S: string;
begin
S := DisplayValue;
DisplayValue := VarListArrayToStr(StrToVarListArray(S));
end;
function TcxFilterInListOperator.PrepareExpressionValue(const AValue: Variant;
var DisplayValue: string): Boolean;
var
I: Integer;
begin
Result := VarIsArray(AValue);
if Result then
begin
DisplayValue := '(' + GetExpressionValue(AValue[0]);
for I := VarArrayLowBound(AValue, 1) + 1 to VarArrayHighBound(AValue, 1) do
DisplayValue := DisplayValue + ', ' + GetExpressionValue(AValue[I]);
DisplayValue := DisplayValue + ')';
end;
end;
{ TcxFilterNotInListOperator }
function TcxFilterNotInListOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
Result := not inherited CompareValues(AValue1, AValue2);
end;
function TcxFilterNotInListOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorNotInList);
end;
function TcxFilterNotInListOperator.FilterText: string;
begin
Result := 'NOT IN';
end;
function TcxFilterNotInListOperator.GetExpressionFilterText(const AValue: Variant): string;
begin
Result := 'NOT (' + inherited GetExpressionFilterText(AValue) + ')';
end;
{ TcxFilterNullOperator }
function TcxFilterNullOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
Result := CriteriaItem.ValueIsNull(AValue1);
end;
function TcxFilterNullOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorIsNull);
end;
function TcxFilterNullOperator.IsNullOperator: Boolean;
begin
Result := True;
end;
procedure TcxFilterNullOperator.PrepareDisplayValue(var DisplayValue: string);
begin
if fcoShowOperatorDescription in CriteriaItem.Criteria.Options then
DisplayValue := '';
end;
{ TcxFilterNotNullOperator }
function TcxFilterNotNullOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
Result := not inherited CompareValues(AValue1, AValue2);
end;
function TcxFilterNotNullOperator.DisplayText: string;
begin
Result := cxSFilterString(@cxSFilterOperatorIsNotNull);
end;
function TcxFilterNotNullOperator.FilterText: string;
begin
Result := '<>';
end;
{ TcxFilterDateOperator }
function TcxFilterDateOperator.CompareValues(const AValue1, AValue2: Variant): Boolean;
begin
if CriteriaItem.ValueIsNull(AValue1) then
Result := False
else
Result :=
((Date1 = cxFilterNullDate) or (Date1 <= AValue1)) and
((Date2 = cxFilterNullDate) or (AValue1 < Date2));
end;
function TcxFilterDateOperator.FilterText: string;
begin
Result := DisplayText;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?