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 + -
显示快捷键?