⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxgrfdlg.pas

📁 Componente para delphi 7 traducao de mensagens
💻 PAS
字号:

{*******************************************************************}
{                                                                   }
{       Developer Express Visual Component Library                  }
{       ExpressQuantumGrid filter custom dialog                     }
{                                                                   }
{       Copyright (c) 1998-2001 Developer Express Inc.              }
{       ALL RIGHTS RESERVED                                         }
{                                                                   }
{   The entire contents of this file is protected by U.S. and       }
{   International Copyright Laws. Unauthorized reproduction,        }
{   reverse-engineering, and distribution of all or any portion of  }
{   the code contained in this file is strictly prohibited and may  }
{   result in severe civil and criminal penalties and will be       }
{   prosecuted to the maximum extent possible under the law.        }
{                                                                   }
{   RESTRICTIONS                                                    }
{                                                                   }
{   THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES           }
{   (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE    }
{   SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS   }
{   LICENSED TO DISTRIBUTE THE EXPRESSGRID AND ALL ACCOMPANYING VCL }
{   CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY.                 }
{                                                                   }
{   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED      }
{   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE        }
{   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE       }
{   AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT  }
{   AND PERMISSION FROM DEVELOPER EXPRESS INC.                      }
{                                                                   }
{   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON       }
{   ADDITIONAL RESTRICTIONS.                                        }
{                                                                   }
{*******************************************************************}

unit dxGrFDlg;

interface

{$I dxTLVer.inc}

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, dxFilter, dxGrFltr, dxDBGrid, dxGrFCmn, dxDBCtrl,
  dxCntner, dxExEdtr, DB{$IFDEF DELPHI6}, Variants{$ENDIF};

type
  TdxFilterDialogComboEdit = class(TdxInplaceImageEdit)
  public
    class function IsInplace: Boolean; override;
  end;

  TfmCustomDialog = class(TForm)
    rbAnd: TRadioButton;
    rbOr: TRadioButton;
    lblTitle: TLabel;
    LColumnName: TLabel;
    bvlLine: TBevel;
    lblSingle: TLabel;
    lblSeries: TLabel;
    btnOK: TButton;
    btnCancel: TButton;
    Edit1: TLabel;
    Edit2: TLabel;
    cbOperator1: TLabel;
    cbOperator2: TLabel;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    FColumn: TdxDBTreeListColumn;
    FComboEditFirst: TdxFilterDialogComboEdit;
    FComboEditSecond: TdxFilterDialogComboEdit;
    FEditFirst: TdxInplaceEdit;
    FEditSecond: TdxInplaceEdit;
    // Values
    FFirstValue: Variant;
    FFirstDisplayValue: string;
    FSecondValue: Variant;
    FSecondDisplayValue: string;
  end;

function CustomDialog(AColumn: TdxDBTreeListColumn; ACriteria: TdxDBGridCriteria): Boolean;

implementation

{$R *.DFM}

const
  OperatorStrList: array [TdxDBGridOperatorType] of string = (dxSFilterOperatorEqual,
    dxSFilterOperatorNotEqual, dxSFilterOperatorGreater, dxSFilterOperatorGreaterEqual,
    dxSFilterOperatorLess, dxSFilterOperatorLessEqual, dxSFilterOperatorBlanks,
    dxSFilterOperatorNonBlanks);

type
  TControlWrapper = class(TControl);
  TdxColumnWrapper = class(TdxDBTreeListColumn);

class function TdxFilterDialogComboEdit.IsInplace: Boolean;
begin
  Result := False;
end;

function CustomDialog(AColumn: TdxDBTreeListColumn; ACriteria: TdxDBGridCriteria): Boolean;
var
  ASupportedOperators: TdxDBGridOperatorTypes;

  procedure LoadComboEdit(AComboEdit: TdxFilterDialogComboEdit);
  var
    I: TdxDBGridOperatorType;
  begin
    with AComboEdit do
    begin
      for I := Low(TdxDBGridOperatorType) to High(TdxDBGridOperatorType) do
        if I in ASupportedOperators then 
        begin
          Values.Add(IntToStr(Integer(I)));
          Descriptions.Add(OperatorStrList[I]);
        end;
    end;
  end;

  procedure InitEdits(AComboEdit: TdxFilterDialogComboEdit; AEdit: TdxInplaceEdit;
    AItem: TdxCriteriaItem);
  const
    AOperators: array [TdxOperatorType] of TdxDBGridOperatorType = (gotBlank,
      gotEqual, gotGreater, gotLess, gotGreaterEqual, gotLessEqual);
  var
    ADBGridOperatorType: TdxDBGridOperatorType;
  begin
    ADBGridOperatorType := AOperators[AItem.Operator];
    if AItem.IsNot then
      case ADBGridOperatorType of
        gotBlank:
          ADBGridOperatorType := gotNonBlank;
        gotEqual:
          ADBGridOperatorType := gotNotEqual;
      end;
    AComboEdit.Text := IntToStr(Integer(ADBGridOperatorType));
    TdxColumnWrapper(AColumn).SetFilterEditValue(AEdit, AItem.Value);
  end;

  procedure AddItem(AParent: TdxCriteriaItemList; AComboEdit: TdxFilterDialogComboEdit;
    AValue: Variant; ADisplayValue: string);
  const
    ADBOperators: array [TdxDBGridOperatorType] of TdxOperatorType = (otEqual,
      otEqual, otGreater, otGreaterEqual, otLess, otLessEqual, otIsNull, otIsNull);
  var
    ADBGridOperatorType: TdxDBGridOperatorType;
  var
    AOperator: TdxOperatorType;
    AIsNot: Boolean;
    I: Integer;
  begin
    I := StrToInt(AComboEdit.Text);
    if I <> -1 then
    begin
      ADBGridOperatorType := TdxDBGridOperatorType(I);
      AOperator := ADBOperators[ADBGridOperatorType];
      if AValue = Null then AOperator := otIsNull;
      AIsNot := ADBGridOperatorType in [gotNotEqual, gotNonBlank];
      if ADBGridOperatorType in [gotBlank, gotNonBlank] then
      begin
        AValue := Null;
        ADisplayValue := '';
      end;
      ACriteria.AddItem(AParent, AColumn, AOperator, AValue, ADisplayValue, AIsNot);
    end;
  end;

var
  AForm: TfmCustomDialog;
  AItem: TdxCriteriaItem;
  AItemList: TdxCriteriaItemList;
begin
  AForm := TfmCustomDialog.Create(Application);
  try
    with AForm do
    begin
      FColumn := AColumn;
      Font.Name := TControlWrapper(AColumn.ATreeList).Font.Name;
      Font.Charset := TControlWrapper(AColumn.ATreeList).Font.Charset;
      LColumnName.Caption := AColumn.Caption + ' ';
      // Combos
      ASupportedOperators := TdxColumnWrapper(AColumn).GetFilterOperators;
      FComboEditFirst := TdxFilterDialogComboEdit.Create(AForm);
      with FComboEditFirst do
      begin
        BoundsRect := cbOperator1.BoundsRect;
        Parent := AForm;
        LoadComboEdit(FComboEditFirst);
        DropDownRows := Values.Count;
        Text := '0';
        TabOrder := 0;
      end;
      FComboEditSecond := TdxFilterDialogComboEdit.Create(AForm);
      with FComboEditSecond do
      begin
        BoundsRect := cbOperator2.BoundsRect;
        Parent := AForm;
        Values.Add('-1');
        Descriptions.Add('');
        LoadComboEdit(FComboEditSecond);
        DropDownRows := Values.Count;
        Text := '-1';
        TabOrder := rbOr.TabOrder + 1;
      end;
      // Edits
      FEditFirst := TdxColumnWrapper(AColumn).GetFilterEdit(AForm);
      with FEditFirst do
      begin
        BoundsRect := Edit1.BoundsRect;
        Parent := AForm;
        TabOrder := FComboEditFirst.TabOrder + 1;
      end;
      FEditSecond := TdxColumnWrapper(AColumn).GetFilterEdit(AForm);
      with FEditSecond do
      begin
        BoundsRect := Edit2.BoundsRect;
        Parent := AForm;
        TabOrder := FComboEditSecond.TabOrder + 1;
      end;
      AItem := ACriteria.FindItemByColumn(AColumn);
      if AItem <> nil then
      begin
        InitEdits(FComboEditFirst, FEditFirst, AItem);
        if (AItem.Parent <> ACriteria.Root) and (AItem.Parent.Items[1] <> nil) then
        begin
          if AItem.Parent.BoolOperator = boOr then
            rbOr.Checked := True
          else
            rbAnd.Checked := True;     
          AItem := TdxCriteriaItem(AItem.Parent.Items[1]);
          InitEdits(FComboEditSecond, FEditSecond, AItem);
        end;
      end;
      Result := ShowModal = mrOK;
      if Result then
      begin
        ACriteria.RemoveItemsByColumn(AColumn);
        if FComboEditSecond.Text <> '-1' then
        begin
          AItemList := ACriteria.Root.AddList(TdxBoolOperator(rbOr.Checked));
          AddItem(AItemList, FComboEditFirst, FFirstValue, FFirstDisplayValue);
          AddItem(AItemList, FComboEditSecond, FSecondValue, FSecondDisplayValue);
        end
        else
          AddItem(nil, FComboEditFirst, FFirstValue, FFirstDisplayValue);
      end;
    end;
  finally
    AForm.Free;
  end;
end;

procedure ValidateValue(AColumn: TdxDBTreeListColumn; AEdit: TdxInplaceEdit; var AValue: Variant);
var
  ATempValue: Variant;
  AVarType: Integer;
begin
  if not {VarEqualNull}VarIsNull(AValue) then
  begin
    AVarType := AColumn.VariantType;
    try
      if AVarType <> varUnknown then
      begin
        VarCast(ATempValue, AValue, AVarType);
        AValue := ATempValue;
      end;
    except
      on EVariantError do
      begin
        AEdit.SetFocus;
        raise Exception.Create(dxSFilterInvalidValue);
      end;
    end;
  end;
end;

procedure TfmCustomDialog.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if ModalResult = mrOK then
  begin
    FEditFirst.ValidateEdit;
    FEditSecond.ValidateEdit;
    FFirstValue := Null;
    FFirstDisplayValue := '';
    TdxColumnWrapper(FColumn).GetFilterEditValues(FEditFirst, FFirstValue, FFirstDisplayValue);
    ValidateValue(FColumn, FEditFirst, FFirstValue);
    FSecondValue := Null;
    FSecondDisplayValue := '';
    if FComboEditSecond.Text <> '-1' then
      TdxColumnWrapper(FColumn).GetFilterEditValues(FEditSecond, FSecondValue, FSecondDisplayValue);
    ValidateValue(FColumn, FEditSecond, FSecondValue);
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -