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

📄 celllevelmultiselectdemomain.pas

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

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

interface

uses
  Windows, Forms, Messages, SysUtils, Classes, ActnList, ImgList, Controls, Menus,
  StdCtrls, cxButtons, cxCheckBox, cxContainer, cxEdit, cxTextEdit,
  cxMaskEdit, cxSpinEdit, ExtCtrls, cxGridLevel, cxGridCustomTableView,
  cxGridCardView, cxGridDBCardView, cxClasses, cxControls,
  cxGridCustomView, cxGrid, ComCtrls, cxStyles, cxCustomData, cxGraphics,
  cxFilter, cxData, DB, cxDBData, cxDataStorage, cxLookAndFeelPainters,
  cxLookAndFeels, cxHyperLinkEdit, cxImageComboBox, cxDBLookupComboBox,
  cxMemo, cxGridTableView;

type
  TCellLevelMultiselectDemoMainForm = class(TForm)
    mmMain: TMainMenu;
    miAbout: TMenuItem;
    miFile: TMenuItem;
    miExit: TMenuItem;
    sbMain: TStatusBar;
    lbDescrip: TLabel;
    LookAndFeelController: TcxLookAndFeelController;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    lblSelectedRows: TLabel;
    lblSelectedColumns: TLabel;
    lblSelectedCells: TLabel;
    lblSelectedSummary: TLabel;
    cxStyleRepository1: TcxStyleRepository;
    styleSelected: TcxStyle;
    styleNormal: TcxStyle;
    Grid: TcxGrid;
    TableView: TcxGridTableView;
    Level: TcxGridLevel;
    procedure miAboutClick(Sender: TObject);
    procedure miExitClick(Sender: TObject);
    procedure TableViewSelectionChanged(Sender: TcxCustomGridTableView);
    procedure TableViewCustomDrawIndicatorCell(Sender: TcxGridTableView;
      ACanvas: TcxCanvas; AViewInfo: TcxCustomGridIndicatorItemViewInfo;
      var ADone: Boolean);
    procedure TableViewStylesGetHeaderStyle(Sender: TcxGridTableView;
      AColumn: TcxGridColumn; out AStyle: TcxStyle);
    procedure TableViewMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    FAnchorLinkedAreaLastColumn: TcxGridColumn;
    procedure CreateSpreadSheet;
    procedure CreateColumns;
    procedure CreateRows;
    function GetColumnCaption(Index: Integer): string;
    procedure SetColumnsSelected(AFromColumn, AToColumn: TcxGridColumn;
      ASelected: Boolean);
  public
    constructor Create(AOwner: TComponent); override;
  end;

var
  CellLevelMultiselectDemoMainForm: TCellLevelMultiselectDemoMainForm;

implementation

{$R *.dfm}

uses
{$IFDEF DELPHI6}
  Variants,
{$ENDIF}
  Dialogs, AboutDemoForm, cxVariants;

const
  RecordCount = 500;
  ColumnCount = 256;
  
constructor TCellLevelMultiselectDemoMainForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  CreateSpreadSheet;
  TableView.Controller.SelectCells(
    TableView.Columns[1], TableView.Columns[5], 2, 12);
end;

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

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

procedure TCellLevelMultiselectDemoMainForm.TableViewSelectionChanged(
  Sender: TcxCustomGridTableView);

  function SelectedRowCount: Integer;
  begin
    Result := TableView.Controller.SelectedRowCount;
  end;

  function SelectedColumnCount: Integer;
  begin
    Result := TableView.Controller.SelectedColumnCount;
  end;

  function GetSummOfSelection: Integer;
  var
    I, J: Integer;
    val: Variant;
  begin
    Result := 0;
    for I := 0 to SelectedRowCount - 1 do
      for J := 0 to SelectedColumnCount - 1 do
      begin
        val := TableView.DataController.GetValue(
          TableView.Controller.SelectedRows[I].RecordIndex,
          TableView.Controller.SelectedColumns[J].Index);
        if not VarIsNull(val) then
          Inc(Result,  Integer(val));
      end;
  end;

begin
  lblSelectedRows.Caption :=
    FloatToStrF(SelectedRowCount, ffNumber, 15, 0);
  lblSelectedColumns.Caption  :=
    FloatToStrF(SelectedColumnCount, ffNumber, 15, 0);
  lblSelectedCells.Caption  :=
    FloatToStrF(SelectedRowCount * SelectedColumnCount, ffNumber, 15, 0);
  lblSelectedSummary.Caption := FloatToStrF(GetSummOfSelection, ffNumber, 15, 0);
end;

procedure TCellLevelMultiselectDemoMainForm.TableViewCustomDrawIndicatorCell(
  Sender: TcxGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
var
  AIndicatorViewInfo: TcxGridIndicatorRowItemViewInfo;
  ATextRect: TRect;
  AStyle: TcxStyle;
begin
  if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
    Exit;
  ATextRect := AViewInfo.ContentBounds;
  AIndicatorViewInfo := AViewInfo as TcxGridIndicatorRowItemViewInfo;
  InflateRect(ATextRect, -2, -1);
  if AIndicatorViewInfo.GridRecord.Selected then
    AStyle := styleSelected
  else
    AStyle := styleNormal;
  Sender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.ContentBounds,
    ATextRect, [], cxBordersAll, cxbsNormal, taCenter, vaCenter,
    False, False, IntToStr(AIndicatorViewInfo.GridRecord.Index + 1),
    AStyle.Font, AStyle.TextColor, AStyle.Color);
  ADone := True;
end;

procedure TCellLevelMultiselectDemoMainForm.TableViewStylesGetHeaderStyle(
  Sender: TcxGridTableView; AColumn: TcxGridColumn; out AStyle: TcxStyle);
begin
  if AColumn = nil
    then exit;
  if AColumn.Selected then
    AStyle := styleSelected
  else
    AStyle := styleNormal;
end;

procedure TCellLevelMultiselectDemoMainForm.CreateSpreadSheet;
begin
  TableView.BeginUpdate;
  try
    CreateColumns;
    CreateRows;
  finally
    TableView.EndUpdate;
  end;
end;

procedure TCellLevelMultiselectDemoMainForm.CreateColumns;
var
  I: Integer;
  AColumn: TcxGridColumn;
begin
  for I := 0 to ColumnCount - 1 do
  begin
    AColumn := TableView.CreateColumn;
    AColumn.Caption := GetColumnCaption(I);
    AColumn.HeaderAlignmentHorz := taCenter;
    AColumn.DataBinding.ValueType := 'Integer';
  end;
end;

procedure TCellLevelMultiselectDemoMainForm.CreateRows;
var
  I, J: Integer;
begin
  TableView.DataController.RecordCount := RecordCount;
  Randomize;
  for I := 0 to RecordCount - 1 do
    for J := 0 to ColumnCount - 1 do
      TableView.DataController.SetValue(I, J, Random(100));
end;

function TCellLevelMultiselectDemoMainForm.GetColumnCaption(Index: Integer): string;
const
  AlphabetSymbolCount = Integer('Z') - Integer('A') + 1;
begin
  if Index div AlphabetSymbolCount > 0 then
     Result := GetColumnCaption(Index div AlphabetSymbolCount - 1)
  else Result := '';
  Result := Result + char(Integer('A') + Index mod AlphabetSymbolCount);
end;

procedure TCellLevelMultiselectDemoMainForm.SetColumnsSelected(
  AFromColumn, AToColumn: TcxGridColumn; ASelected: Boolean);
var
  I: Integer;
  AFromColIndex, AToColIndex: Integer;
begin
  AFromColIndex := AFromColumn.VisibleIndex;
  AToColIndex := AToColumn.VisibleIndex;
  if AFromColIndex > AToColIndex then
  begin
    I := AToColIndex;
    AToColIndex := AFromColIndex;
    AFromColIndex := I;
  end;
  TableView.BeginUpdate;
  try
    for I := AFromColIndex to AToColIndex do
      TableView.VisibleColumns[I].Selected := ASelected;
  finally
    TableView.EndUpdate;
  end;
end;

procedure TCellLevelMultiselectDemoMainForm.TableViewMouseDown(
  Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
var
  AHitTest: TcxCustomGridHitTest;
  AColumn: TcxGridColumn;
begin
  AHitTest := TableView.GetHitTest(X, Y);
  if not (AHitTest is TcxGridColumnHeaderHitTest) then
    Exit;
  AColumn := (AHitTest as TcxGridColumnHeaderHitTest).Column;
  TableView.BeginUpdate;
  try
    if ssShift in Shift then
    begin
      SetColumnsSelected(TableView.Controller.CellSelectionAnchor,
        FAnchorLinkedAreaLastColumn, False);
      SetColumnsSelected(TableView.Controller.CellSelectionAnchor, AColumn, True);
    end
    else
    begin
      if ssCtrl in Shift then
        AColumn.Selected := True
      else
        TableView.Controller.SelectColumns(AColumn, AColumn);
      AColumn.Focused := True;
      TableView.Controller.CellSelectionAnchor := AColumn;
    end;
    TableView.DataController.SelectAll;
    FAnchorLinkedAreaLastColumn := AColumn;
  finally
    TableView.EndUpdate;
  end;
end;

end.

⌨️ 快捷键说明

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