cxbandedtablevieweditor.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 361 行

PAS
361
字号
{********************************************************************}
{                                                                    }
{       Developer Express Visual Component Library                   }
{       ExpressQuantumGrid                                           }
{                                                                    }
{       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 EXPRESSQUANTUMGRID 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 cxBandedTableViewEditor;

{$I cxVer.inc}

interface

uses
{$IFDEF DELPHI6}
  Types, Variants,
{$ELSE}
  Windows,
{$ENDIF}
  SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls, StdCtrls, ComCtrls,
  cxGridCustomView, cxGridBandedTableView,
  cxViewEditor, cxCustomTableViewEditor, cxTableViewEditor,
  cxLookAndFeelPainters, cxButtons, cxPC, cxControls;

type
  TcxBandedTableViewEditor = class(TcxTableViewEditor)
    TSBands: TcxTabSheet;
    LBBands: TListBox;
    Panel22: TPanel;
    BAddBand: TcxButton;
    BDeleteBand: TcxButton;
    PMBands: TPopupMenu;
    MIBandsAdd: TMenuItem;
    MIBandsDelete: TMenuItem;
    MenuItem4: TMenuItem;
    MIBandsMoveUp: TMenuItem;
    MenuItem7: TMenuItem;
    MIBandsSelectAll: TMenuItem;
    MIBandsMoveDown: TMenuItem;
    BBandMoveDown: TcxButton;
    BBandMoveUp: TcxButton;
    Panel20: TPanel;
    procedure BAddBandClick(Sender: TObject);
    procedure BDeleteBandClick(Sender: TObject);
    procedure LBBandsClick(Sender: TObject);
    procedure LBBandsStartDrag(Sender: TObject;
      var DragObject: TDragObject);
    procedure LBBandsDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure LBBandsEndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure LBBandsDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure BBandMoveUpClick(Sender: TObject);
    procedure BBandMoveDownClick(Sender: TObject);
    procedure MIBandsSelectAllClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure LBBandsDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure LBColumnsDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
  private
    FBandsPrevDragIndex: Integer;
    function GetBands: TcxGridBands;
    procedure ReindexBandsProc(AList: TList; ANewIndex: Integer);
    procedure UpdateBandList;
  protected
    procedure DrawListBoxItem(AListBox: TWinControl; AIndex: Integer; R: TRect;
      AParentBand: TcxGridBand);
    procedure SelectAllBands;
    procedure UpdateButtons; override;
    procedure UpdateEditor; override;
    procedure UpdateSelection; override;
  public
    class function GetViewByObject(APersistent: TPersistent): TcxCustomGridView; override;
    property Bands: TcxGridBands read GetBands;
  end;

  { TcxGridBandedTableViewStorage }

  TcxGridBandedTableViewStorage = class(TcxCustomGridTableViewStorage)
  private
    function GetOptionsCustomize: TcxGridBandedTableOptionsCustomize;
    function GetOptionsView: TcxGridBandedTableOptionsView;
  protected
    function BandedTableView: TcxGridBandedTableView;
  public
    class function GetViewClass: TcxCustomGridViewClass; override;
  published
    property OptionsCustomize: TcxGridBandedTableOptionsCustomize read GetOptionsCustomize;
    property OptionsView: TcxGridBandedTableOptionsView read GetOptionsView;
  end;

  { TcxGridBandedTableViewMenuProvider }

  TcxGridBandedTableViewMenuProvider = class(TcxCustomGridTableViewMenuProvider)
  private
    function GetGridView: TcxGridBandedTableView;
  protected
    procedure CreateBand(Sender: TcxGridViewMenuItem);
    procedure InitStructureCreationItems; override;
  public
    property GridView: TcxGridBandedTableView read GetGridView;
  end;

implementation

uses
  cxDesignWindows;

{$R *.dfm}

{ TcxGridBandedTableViewStorage }

function TcxGridBandedTableViewStorage.GetOptionsCustomize: TcxGridBandedTableOptionsCustomize;
begin
  Result := BandedTableView.OptionsCustomize;
end;

function TcxGridBandedTableViewStorage.GetOptionsView: TcxGridBandedTableOptionsView;
begin
  Result := BandedTableView.OptionsView;
end;

function TcxGridBandedTableViewStorage.BandedTableView: TcxGridBandedTableView;
begin
  Result := inherited View as TcxGridBandedTableView;
end;

class function TcxGridBandedTableViewStorage.GetViewClass: TcxCustomGridViewClass;
begin
  Result := TcxGridBandedTableView;
end;

{ TcxBandedTableViewEditor }

class function TcxBandedTableViewEditor.GetViewByObject(APersistent: TPersistent): TcxCustomGridView;
begin
  if APersistent is TcxGridBand then
    Result := (APersistent as TcxGridBand).Bands.GridView
  else
    if APersistent is TcxGridBands then
      Result := (APersistent as TcxGridBands).GridView
    else
      Result := inherited GetViewByObject(APersistent);
end;

procedure TcxBandedTableViewEditor.DrawListBoxItem(AListBox: TWinControl;
  AIndex: Integer; R: TRect; AParentBand: TcxGridBand);

  function GetParentBandInfoOffset: Integer;
  var
    I, W: Integer;
  begin
    Result := 0;
    with AListBox as TListBox, Items do
      for I := 0 to Count - 1 do
      begin
        W := Canvas.TextWidth(Items[I]);
        if W > Result then Result := W;
      end;
    Inc(Result, 30);
  end;

  function GetParentBandInfoText: string;
  begin
    Result := '[ParentBand: ' + IntToStr(AParentBand.Index);
    if AParentBand.Caption <> '' then
      Result := Result + ' - ' + AParentBand.Caption;
    Result := Result + ']';
  end;

begin
  inherited DrawListBoxItem(AListBox, AIndex, R);
  with AListBox as TListBox, Canvas do
    if AParentBand <> nil then
    begin
      Inc(R.Left, GetParentBandInfoOffset);
      TextOut(R.Left, R.Top, GetParentBandInfoText);
    end;
end;

procedure TcxBandedTableViewEditor.SelectAllBands;
begin
  ListBoxSelectAll(LBBands);
end;

procedure TcxBandedTableViewEditor.UpdateButtons;
begin
  inherited;
  BDeleteBand.Enabled := CanDeleteComponent(nil) and (LBBands.SelCount > 0);
  BBandMoveUp.Enabled := LBBands.SelCount > 0;
  BBandMoveDown.Enabled := LBBands.SelCount > 0;

  MIBandsMoveUp.Enabled := BBandMoveUp.Enabled;
  MIBandsMoveDown.Enabled := BBandMoveDown.Enabled;
  MIBandsSelectAll.Enabled := LBBands.SelCount < LBBands.Items.Count;
end;

procedure TcxBandedTableViewEditor.UpdateEditor;
begin
  inherited;
  UpdateBandList;
end;

procedure TcxBandedTableViewEditor.UpdateSelection;
begin
  FormEditor.ListBoxSynchronizeSelection(LBBands);
  inherited;
end;

function TcxBandedTableViewEditor.GetBands: TcxGridBands;
begin
  Result := (View as TcxGridBandedTableView).Bands;
end;

procedure TcxBandedTableViewEditor.ReindexBandsProc(AList: TList; ANewIndex: Integer);
var
  I: Integer;
begin
  for I := 0 to AList.Count - 1 do
    TcxGridBand(AList[I]).Index := ANewIndex;
  UpdateDesigner;
end;

procedure TcxBandedTableViewEditor.UpdateBandList;
begin
  ListBoxLoadCollection(LBBands, Bands);
end;

procedure TcxBandedTableViewEditor.BAddBandClick(Sender: TObject);
begin
  CollectionItemsAdd(LBBands, Bands);
end;

procedure TcxBandedTableViewEditor.BDeleteBandClick(Sender: TObject);
begin
  CollectionItemsDelete(LBBands, Bands);
end;

procedure TcxBandedTableViewEditor.LBBandsClick(Sender: TObject);
begin
  FormEditor.ListBoxApplySelection(LBBands, Bands);
end;

procedure TcxBandedTableViewEditor.BBandMoveUpClick(Sender: TObject);
begin
  ListBoxMoveUpItems(LBBands, FBandsPrevDragIndex, ReindexBandsProc);
end;

procedure TcxBandedTableViewEditor.BBandMoveDownClick(Sender: TObject);
begin
  ListBoxMoveDownItems(LBBands, FBandsPrevDragIndex, ReindexBandsProc);
end;

procedure TcxBandedTableViewEditor.MIBandsSelectAllClick(Sender: TObject);
begin
  SelectAllBands;
  LBBandsClick(nil);
end;

// Drag Drop Bands

procedure TcxBandedTableViewEditor.LBBandsStartDrag(Sender: TObject;
  var DragObject: TDragObject);
begin
  FBandsPrevDragIndex := -1;
end;

procedure TcxBandedTableViewEditor.LBBandsDragOver(Sender, Source: TObject;
  X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  ListBoxDragOver(LBBands, Sender, Source, X, Y, State, Accept, FBandsPrevDragIndex);
end;

procedure TcxBandedTableViewEditor.LBBandsEndDrag(Sender, Target: TObject;
  X, Y: Integer);
begin
  ListBoxEndDrag(LBBands, Sender, Target, X, Y, FBandsPrevDragIndex);
end;

procedure TcxBandedTableViewEditor.LBBandsDragDrop(Sender, Source: TObject;
  X, Y: Integer);
begin
  ListBoxDragDrop(LBBands, Sender, Source, X, Y, FBandsPrevDragIndex, ReindexBandsProc);
end;

procedure TcxBandedTableViewEditor.FormCreate(Sender: TObject);
begin
  inherited;
  CalculateListBoxItemHeight(LBBands);
end;

procedure TcxBandedTableViewEditor.LBBandsDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  DrawListBoxItem(Control, Index, Rect, Bands[Index].ParentBand);
end;

procedure TcxBandedTableViewEditor.LBColumnsDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  DrawListBoxItem(Control, Index, Rect, TcxGridBandedColumn(View.Items[Index]).Position.Band);
end;

{ TcxGridBandedTableViewMenuProvider }

function TcxGridBandedTableViewMenuProvider.GetGridView: TcxGridBandedTableView;
begin
  Result := TcxGridBandedTableView(inherited GridView);
end;

procedure TcxGridBandedTableViewMenuProvider.CreateBand(Sender: TcxGridViewMenuItem);
begin
  ObjectCreated(GridView.Bands.Add);
end;

procedure TcxGridBandedTableViewMenuProvider.InitStructureCreationItems;
begin
  inherited;
  Items.AddItem('Create Band', CreateBand);
end;

initialization
  RegisterViewEditorClass(TcxGridBandedTableView, TcxBandedTableViewEditor);
  RegisterDefaultViewStorage(TcxGridBandedTableViewStorage);
  RegisterViewMenuProviderClass(TcxGridBandedTableView, TcxGridBandedTableViewMenuProvider);

finalization
  UnregisterViewMenuProviderClass(TcxGridBandedTableView, TcxGridBandedTableViewMenuProvider);
  UnregisterDefaultViewStorage(TcxGridBandedTableViewStorage);
  UnregisterViewEditorClass(TcxGridBandedTableView, TcxBandedTableViewEditor);

end.

⌨️ 快捷键说明

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