cxdbnavigator.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 542 行 · 第 1/2 页

PAS
542
字号

{********************************************************************}
{                                                                    }
{       Developer Express Visual Component Library                   }
{       ExpressEditors                                               }
{                                                                    }
{       Copyright (c) 1998-2008 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 EXPRESSEDITORS 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 cxDBNavigator;

{$I cxVer.inc}

interface

uses
  Classes, DB, cxDBFilterControl, cxNavigator;

type
  TcxCustomDBNavigator = class;

  TcxDBNavigatorDataLink = class(TDataLink)
  private
    FNavigator: TcxCustomDBNavigator;
  protected
    procedure EditingChanged; override;
    procedure DataSetChanged; override;
    procedure ActiveChanged; override;
  public
    constructor Create(ANavigator: TcxCustomDBNavigator);
    destructor Destroy; override;
  end;

  TcxDBNavigatorButtonsFilterEvent = procedure(Sender: TObject;
    AFilterControl: TcxDBFilterControl) of object;
  TcxDBNavigatorButtonsGetDataLink = function: TDataLink of object;

  TcxDBNavigatorButtons = class(TcxCustomNavigatorButtons)
  private
    FBookmark: TBookmark;
    FFilterCriteria: TMemoryStream;
    FFilterSetting: Boolean;
    FPageSize: Integer;
    FOnApplyFilter: TcxDBNavigatorButtonsFilterEvent;
    FOnGetDataLink: TcxDBNavigatorButtonsGetDataLink;
    FOnShowFilterDialog: TcxDBNavigatorButtonsFilterEvent;

    procedure DoApplyFilter(Sender: TObject);
    procedure DoShowFilterDialog(Sender: TObject);
    function GetDataLink: TDataLink;
    function GetDataSet: TDataSet;
    function GetInternalPageSize: Integer;
    procedure SetBookmark(Value: TBookmark);
    procedure SetPageSize(Value: Integer);
    procedure ShowFilter;
  protected
    procedure DoButtonClick(ADefaultIndex: Integer); override;
    function GetButtonEnabled(ADefaultIndex: Integer): Boolean; override;
    procedure CheckBookmark;
    procedure ClearFilterCriteria;
    property Bookmark: TBookmark read FBookmark write SetBookmark;
    property DataLink: TDataLink read GetDataLink;
    property DataSet: TDataSet read GetDataSet;
    property InternalPageSize: Integer read GetInternalPageSize;
    property OnGetDataLink: TcxDBNavigatorButtonsGetDataLink
      read FOnGetDataLink write FOnGetDataLink;
  public
    constructor Create(ANavigator: IcxNavigatorOwner); override;
    destructor Destroy; override;
    procedure Assign(Source: TPersistent); override;
    procedure ReleaseBookmark; override;
  published
    property ConfirmDelete;
    property Images;
    property PageSize: Integer read FPageSize write SetPageSize default 0;
    property OnShowFilterDialog: TcxDBNavigatorButtonsFilterEvent
      read FOnShowFilterDialog write FOnShowFilterDialog;
    property OnApplyFilter: TcxDBNavigatorButtonsFilterEvent
      read FOnApplyFilter write FOnApplyFilter;
    property First;
    property PriorPage;
    property Prior;
    property Next;
    property NextPage;
    property Last;
    property Insert;
    property Append;
    property Delete;
    property Edit;
    property Post;
    property Cancel;
    property Refresh;
    property SaveBookmark;
    property GotoBookmark;
    property Filter;
  end;

  TcxDBNavigatorFilterEvent = procedure(ANavigator: TcxCustomDBNavigator;
    AFilterControl: TcxDBFilterControl) of object;

  TcxCustomDBNavigator = class(TcxCustomNavigator)
  private
    FDataLink: TcxDBNavigatorDataLink;
    FOnApplyFilter: TcxDBNavigatorFilterEvent;
    FOnShowFilterDialog: TcxDBNavigatorFilterEvent;

    procedure DoApplyFilter(Sender: TObject; AFilterControl: TcxDBFilterControl);
    procedure DoShowFilterDialog(Sender: TObject; AFilterControl: TcxDBFilterControl);
    function GetButtons: TcxDBNavigatorButtons;
    function GetDataLink: TDataLink;
    function GetDataSource: TDataSource;
    function GetDataSet: TDataSet;
    procedure SetButtons(Value: TcxDBNavigatorButtons);
    procedure SetDataSource(Value: TDataSource);
    procedure SetOnApplyFilter(Value: TcxDBNavigatorFilterEvent);
    procedure SetOnShowFilterDialog(Value: TcxDBNavigatorFilterEvent);
  protected
    function CreateButtons: TcxCustomNavigatorButtons; override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;

    procedure DataSetActiveChanged; virtual;
    procedure DataSetDataChanged; virtual;

    property Buttons: TcxDBNavigatorButtons read GetButtons write SetButtons;
    property DataLink: TcxDBNavigatorDataLink read FDataLink;
    property DataSource: TDataSource read GetDataSource write SetDataSource;
    property OnApplyFilter: TcxDBNavigatorFilterEvent read FOnApplyFilter
      write SetOnApplyFilter;
    property OnShowFilterDialog: TcxDBNavigatorFilterEvent read FOnShowFilterDialog
      write SetOnShowFilterDialog;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property DataSet: TDataSet read GetDataSet;
  end;

  TcxDBNavigator = class(TcxCustomDBNavigator)
  published
    property Buttons;
    property DataSource;
    property LookAndFeel;
    property OnApplyFilter;
    property OnShowFilterDialog;
    property Align;
    property Anchors;
    property Constraints;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property Ctl3D;
    property ParentCtl3D;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property Visible;
{$IFDEF DELPHI5}
    property OnContextPopup;
{$ENDIF}
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnResize;
    property OnStartDock;
    property OnStartDrag;
  end;

implementation

uses
  Windows, SysUtils, Controls, DBCtrls, Dialogs, cxClasses,
  cxFilterControlDialog, cxEditConsts;

type
  TDataSetAccess = class(TDataSet);

{ TcxDBNavigatorDataLink }

constructor TcxDBNavigatorDataLink.Create(ANavigator: TcxCustomDBNavigator);
begin
  inherited Create;
  FNavigator := ANavigator;
  VisualControl := True;
end;

destructor TcxDBNavigatorDataLink.Destroy;
begin
  FNavigator := nil;
  inherited Destroy;
end;

procedure TcxDBNavigatorDataLink.EditingChanged;
begin
  if FNavigator <> nil then
    FNavigator.NavigatorButtonsStateChanged;
end;

procedure TcxDBNavigatorDataLink.DataSetChanged;
begin
  if FNavigator <> nil then
  begin
    FNavigator.DataSetDataChanged;
    FNavigator.NavigatorButtonsStateChanged;
  end;
end;

procedure TcxDBNavigatorDataLink.ActiveChanged;
begin
  if FNavigator <> nil then
  begin
    FNavigator.DataSetActiveChanged;
    FNavigator.NavigatorButtonsStateChanged;
  end;
end;

{ TcxDBNavigatorButtons }

constructor TcxDBNavigatorButtons.Create(ANavigator: IcxNavigatorOwner);
begin
  inherited Create(ANavigator);
  FPageSize := 0;
  FFilterCriteria := TMemoryStream.Create;
end;

destructor TcxDBNavigatorButtons.Destroy;
begin
  FreeAndNil(FFilterCriteria);
  inherited Destroy;
end;

procedure TcxDBNavigatorButtons.Assign(Source: TPersistent);
begin
  if Source is TcxDBNavigatorButtons then
    with TcxDBNavigatorButtons(Source) do
    begin
      Self.PageSize := PageSize;
      Self.OnApplyFilter := OnApplyFilter;
      Self.OnShowFilterDialog := OnShowFilterDialog;
    end
  else

⌨️ 快捷键说明

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