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

📄 filtercontroldemomain.pas

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 PAS
字号:
unit FilterControlDemoMain;

interface

{$I ..\..\cxVer.inc}

uses
  Windows, Messages, SysUtils
  {$IFDEF DELPHI6}
  , Variants
  {$ENDIF}
  , Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, cxGridLevel, cxGridCustomTableView, cxGridTableView,
  cxGridDBTableView, cxControls, cxGridCustomView, cxGrid, cxCustomData,
  ExtCtrls, ActnList, ImgList, Menus, ComCtrls, cxGridCustomPopupMenu,
  cxGridPopupMenu, cxStyles, cxGraphics, cxFilter, cxData, cxEdit, DB,
  cxDBData, cxClasses, cxFilterControl, cxLookAndFeelPainters, cxButtons,
  Grids, DBGrids, cxLookAndFeels, cxDBEditRepository, cxDBFilterControl,
  cxDataStorage, cxDBLookupComboBox, cxCalendar, cxTimeEdit, cxCalc,
  cxImageComboBox, cxSpinEdit;

type
  TcxLocate = (ltNone, ltLeft, ltTop);

  TFilterControlDemoMainForm = class(TForm)
    mmMain: TMainMenu;
    miAbout: TMenuItem;
    miFile: TMenuItem;
    miOptions: TMenuItem;
    miExit: TMenuItem;
    miLookFeel: TMenuItem;
    miKind: TMenuItem;
    miFlat: TMenuItem;
    miStandard: TMenuItem;
    miUltraFlat: TMenuItem;
    miNativeStyle: TMenuItem;
    sbMain: TStatusBar;
    lbDescription: TLabel;
    cxGridPopupMenu1: TcxGridPopupMenu;
    N1: TMenuItem;
    miFilterControl: TMenuItem;
    miFilterControlPosition: TMenuItem;
    miFilterControlModal: TMenuItem;
    miFilterControlNone: TMenuItem;
    N2: TMenuItem;
    miFilterControlLeft: TMenuItem;
    miFilterControlTop: TMenuItem;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    PageControl: TPageControl;
    tsGrid4DisplayStyle: TTabSheet;
    tsStandardDisplayStyle: TTabSheet;
    Grid: TcxGrid;
    tvOrders: TcxGridDBTableView;
    tvOrdersPurchaseDate: TcxGridDBColumn;
    tvOrdersTime: TcxGridDBColumn;
    tvOrdersPaymentAmount: TcxGridDBColumn;
    tvOrdersPaymentType: TcxGridDBColumn;
    tvOrdersQuantity: TcxGridDBColumn;
    lvOrders: TcxGridLevel;
    DBGrid: TDBGrid;
    pnlFilterDialog: TPanel;
    cxFilterControl: TcxFilterControl;
    pnlButtons: TPanel;
    btnLoad: TcxButton;
    btnSaveAs: TcxButton;
    btnApply: TcxButton;
    cxDBFilterControl: TcxDBFilterControl;
    Splitter: TSplitter;
    LookAndFeelController: TcxLookAndFeelController;
    PopupMenu: TPopupMenu;
    miShowFilterPanel: TMenuItem;
    miShowFilterBtn: TMenuItem;
    miFilterPnlNever: TMenuItem;
    miFilterPnlNeverNonEmpty: TMenuItem;
    miFilterPnlAlways: TMenuItem;
    btnOK: TcxButton;
    btnCancel: TcxButton;
    cxEditRepository: TcxEditRepository;
    CustomersEditorItem: TcxEditRepositoryLookupComboBoxItem;
    CarsEditorItem: TcxEditRepositoryLookupComboBoxItem;
    tvOrdersCustomerID: TcxGridDBColumn;
    tvOrdersProductID: TcxGridDBColumn;
    Label1: TLabel;
    procedure miAboutClick(Sender: TObject);
    procedure miExitClick(Sender: TObject);
    procedure miNativeStyleClick(Sender: TObject);
    procedure miLookAndFeelKindClick(Sender: TObject);
    procedure miFilterControlPosClick(Sender: TObject);
    procedure miFilterControlModalClick(Sender: TObject);
    procedure tvOrdersFilterControlDialogShow(Sender: TObject);
    procedure btnLoadClick(Sender: TObject);
    procedure btnSaveAsClick(Sender: TObject);
    procedure btnApplyClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure PageControlChange(Sender: TObject);
    procedure cxDBFilterControlApplyFilter(Sender: TObject);
    procedure miShowFilterPnlClick(Sender: TObject);
    procedure miShowFilterBtnClick(Sender: TObject);
    procedure cxFilterControlApplyFilter(Sender: TObject);
    procedure tvOrdersDataControllerFilterChanged(Sender: TObject);
  private
    FFilterControl: TcxCustomFilterControl;
    FFilterText: string;
    FFilterControlAlign: TcxLocate;
    FCloseEvent: TCloseEvent;
    procedure Relocate(ALocate: TcxLocate);
  public
    procedure FilterDialogClose(Sender: TObject; var Action: TCloseAction);
  end;

var
  FilterControlDemoMainForm: TFilterControlDemoMainForm;

implementation

{$R *.dfm}

uses
  FilterControlDemoData,
  FilterControlDemoFilterDialog, cxFilterControlDialog, AboutDemoForm;

procedure TFilterControlDemoMainForm.miAboutClick(Sender: TObject);
begin
  ShowAboutDemoForm;
end;

procedure TFilterControlDemoMainForm.miExitClick(Sender: TObject);
begin
  Close;
end;

procedure TFilterControlDemoMainForm.miNativeStyleClick(Sender: TObject);
begin
  with LookAndFeelController do
  begin
    NativeStyle := not NativeStyle;
    (Sender as TMenuItem).Checked := NativeStyle;
  end;  
end;

procedure TFilterControlDemoMainForm.miLookAndFeelKindClick(Sender: TObject);
begin
  LookAndFeelController.Kind := TcxLookAndFeelKind(TMenuItem(Sender).MenuIndex);
  (Sender as TMenuItem).Checked := True;
end;

procedure TFilterControlDemoMainForm.miFilterControlPosClick(
  Sender: TObject);
begin
  if not TMenuItem(Sender).Checked then
  begin
    TMenuItem(Sender).Checked := True;
    FFilterControlAlign := TcxLocate((TMenuItem(Sender).Tag));
    Relocate(FFilterControlAlign);
  end;
end;

procedure TFilterControlDemoMainForm.miFilterControlModalClick(
  Sender: TObject);
  procedure ShowButtons(AShow: Boolean);
  begin
    btnOK.Visible := AShow;
    btnCancel.Visible := AShow;
  end;
var
  AHeight, AWidth: Integer;
  AAlign: TAlign;
begin
  if PageControl.ActivePage = tsGrid4DisplayStyle then
   tvOrders.Filtering.RunCustomizeDialog
  else
  begin
    miFilterControlPosClick(miFilterControlNone);
    AHeight := pnlFilterDialog.Height;
    AWidth := pnlFilterDialog.Width;
    AAlign := pnlFilterDialog.Align;
    ShowButtons(True);
    pnlFilterDialog.Parent := FilterControlDemoFilterDialogForm;
    pnlFilterDialog.Align := alClient;
    pnlFilterDialog.Visible := True;
    FilterControlDemoFilterDialogForm.ShowModal;
    pnlFilterDialog.Align := AAlign;
    ShowButtons(False);
    pnlFilterDialog.Visible := False;
    pnlFilterDialog.Parent := Self;
    pnlFilterDialog.Height := AHeight;
    pnlFilterDialog.Width := AWidth;
  end;
end;

procedure TFilterControlDemoMainForm.tvOrdersFilterControlDialogShow(
  Sender: TObject);
begin
  FCloseEvent := TfmFilterControlDialog(Sender).OnClose;
  TfmFilterControlDialog(Sender).OnClose := FilterDialogClose;
  Relocate(ltNone);
end;

procedure TFilterControlDemoMainForm.tvOrdersDataControllerFilterChanged(
  Sender: TObject);
begin
  cxFilterControl.UpdateFilter;
end;

procedure TFilterControlDemoMainForm.btnLoadClick(Sender: TObject);
begin
 if PageControl.ActivePage = tsGrid4DisplayStyle then
   OpenDialog.Filter := 'Grid Filters(*.flt)|*.flt|All files|*.*'
 else
   OpenDialog.Filter := 'Standard Filters(*.sft)|*.sft|All files|*.*';
 if OpenDialog.Execute then
   FFilterControl.LoadFromFile(OpenDialog.FileName);
end;

procedure TFilterControlDemoMainForm.btnSaveAsClick(Sender: TObject);
begin
  if PageControl.ActivePage = tsGrid4DisplayStyle then
    SaveDialog.Filter := 'Grid Filters(*.flt)|*.flt'
  else
    SaveDialog.Filter := 'Standard Filters(*.sft)|*.sft';
  if SaveDialog.Execute then
    FFilterControl.SaveToFile(SaveDialog.FileName);
end;

procedure TFilterControlDemoMainForm.btnApplyClick(Sender: TObject);
begin
  FFilterControl.ApplyFilter;
end;

procedure TFilterControlDemoMainForm.FormCreate(Sender: TObject);
begin
  OpenDialog.InitialDir := ExtractFileDir(Application.ExeName);
  SaveDialog.InitialDir := OpenDialog.InitialDir;

  FFilterText := '';
  cxFilterControl.Align := alClient;
  cxDBFilterControl.Align := alClient;
  pnlFilterDialog.Width := 240;
  FFilterControl := cxFilterControl;
  FFilterControlAlign := ltLeft;
  PageControl.ActivePage := tsGrid4DisplayStyle;
  PageControlChange(PageControl);

  cxFilterControl.LoadFromFile('ExtendedFilter.flt');
  cxFilterControl.ApplyFilter;
  cxDBFilterControl.LoadFromFile('StandardFilter.sft');
  cxDBFilterControl.ApplyFilter;
end;

procedure TFilterControlDemoMainForm.PageControlChange(Sender: TObject);
begin
  FFilterControl.Visible := False;
  if TPageControl(Sender).ActivePage = tsStandardDisplayStyle then
    FFilterControl := cxDBFilterControl
  else
    FFilterControl := cxFilterControl;
  FFilterControl.Visible := True;
end;

procedure TFilterControlDemoMainForm.cxDBFilterControlApplyFilter(
  Sender: TObject);
var
  ADataSet: TDataSet;
begin
  ADataSet := TcxDBFilterControl(Sender).DataSet;
  try
    ADataSet.DisableControls;
    ADataSet.Filtered := False;
    ADataSet.Filter :=
      TcxDBFilterControl(Sender).FilterText;
    ADataSet.Filtered := True;
  finally
    ADataSet.EnableControls;
  end;
end;

procedure TFilterControlDemoMainForm.miShowFilterPnlClick(
  Sender: TObject);
begin
  TMenuItem(Sender).Checked := True;
  tvOrders.Filtering.Visible := TcxGridFilterVisible(Byte(TMenuItem(Sender).Tag));
end;

procedure TFilterControlDemoMainForm.miShowFilterBtnClick(Sender: TObject);
begin
  TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
  tvOrders.Filtering.CustomizeDialog := TMenuItem(Sender).Checked;
end;

procedure TFilterControlDemoMainForm.Relocate(ALocate: TcxLocate);
var
  AAlign: TAlign;
begin
   Splitter.Visible := False;
   pnlFilterDialog.Visible := False;
   if ALocate = ltNone then Exit;
   if ALocate = ltTop then AAlign := alTop
   else AAlign := alLeft;
   if ALocate = ltLeft then
     Splitter.Align := AAlign;
   pnlFilterDialog.Align := AAlign;
   if ALocate = ltTop then
     Splitter.Align := AAlign;
   Splitter.Visible := True;
   pnlFilterDialog.Visible := True;
   lbDescription.Top := 0;
end;

procedure TFilterControlDemoMainForm.cxFilterControlApplyFilter(
  Sender: TObject);
var
  AView: TcxGridDBTableView;
begin
  AView := TcxFilterControl(Sender).LinkComponent as TcxGridDBTableView;
  AView.DataController.Filter.Active := True;
end;

procedure TFilterControlDemoMainForm.FilterDialogClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Relocate(FFilterControlAlign);
  if Assigned(FCloseEvent) then
    FCloseEvent(Sender, Action);
  TForm(Sender).OnClose := FCloseEvent;
end;

end.

⌨️ 快捷键说明

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