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

📄 featuresmain.pas

📁 DevExpress公司出品的Borland Delphi和C++ Builder的控件(包含完整源代码)。 ExpressSpreadSheet:交叉数据表格控件。 一款Delphi
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit FeaturesMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, cxControls, StdCtrls, Buttons, Menus, ExtCtrls, ToolWin, ComCtrls,
  ImgList, cxSSheet, cxSSTypes, cxSSUtils, cxSSRes, cxGraphics,
  cxExcelAccess, StdActns, ActnList;

type
  TStyleValue = (svAlign, svFontName, svSize, svBold, svItalic, svUnderline, svStrikeOut);
  TStyleValueSet = set of TStyleValue;

  TFeaturesMainForm = class(TForm)
    alMain: TActionList;
    actNew: TAction;
    actDeleteCells: TAction;
    actOpenSpreadSheet: TAction;
    actSaveSpeadSheet: TAction;
    actInsertCells: TAction;
    actExit: TAction;
    actAutomaticCalc: TAction;
    actRecalcFormulas: TAction;
    actCut: TAction;
    actCopy: TAction;
    actPaste: TAction;
    actBeveledLookandFeel: TAction;
    actBufferedpaint: TAction;
    actShowcaptions: TAction;
    actShowgrid: TAction;
    actShowheaders: TAction;
    actShowformulas: TAction;
    actR1C1Referencestyle: TAction;
    actCells: TAction;
    actRow: TAction;
    actColumn: TAction;
    actSheet: TAction;
    actWindowClose: TWindowClose;
    actWindowCascade: TWindowCascade;
    actWindowTileHorizontal: TWindowTileHorizontal;
    actWindowTileVertical: TWindowTileVertical;
    actWindowMinimizeAll: TWindowMinimizeAll;
    actWindowArrange: TWindowArrange;
    actCellLeftAlign: TAction;
    actCellRightAlign: TAction;
    actCellCenterAlign: TAction;
    actBold: TAction;
    actItalic: TAction;
    actUnderline: TAction;
    actStrikeOut: TAction;
    actMergeCells: TAction;
    actSplitCells: TAction;
    actSortAscending: TAction;
    actSortDescending: TAction;
    actSum: TAction;
    actFont: TAction;
    actFontSize: TAction;
    actAverage: TAction;
    actCount: TAction;
    actMax: TAction;
    actMin: TAction;
    actFormatCells: TAction;
    actHideCells: TAction;
    actShowCells: TAction;
    actHideCol: TAction;
    actShowCol: TAction;
    actHideRow: TAction;
    actShowRow: TAction;
    mnuMain: TMainMenu;
    mnuFile: TMenuItem;
    miNew: TMenuItem;
    N2: TMenuItem;
    miOpenSpreadSheet: TMenuItem;
    miSaveSpreadSheet: TMenuItem;
    N1: TMenuItem;
    miExit: TMenuItem;
    mnuEdit: TMenuItem;
    miAutomaticcalculation: TMenuItem;
    miRecalcformulas: TMenuItem;
    N3: TMenuItem;
    miCut: TMenuItem;
    miCopy: TMenuItem;
    miPaste: TMenuItem;
    N7: TMenuItem;
    miCells: TMenuItem;
    miFormat: TMenuItem;
    miHide: TMenuItem;
    miShow: TMenuItem;
    miDeletecells: TMenuItem;
    Insertcells1: TMenuItem;
    miColumns: TMenuItem;
    Hide2: TMenuItem;
    Show2: TMenuItem;
    miRows: TMenuItem;
    Hide3: TMenuItem;
    Show3: TMenuItem;
    mnuInsert: TMenuItem;
    miCells1: TMenuItem;
    miRow: TMenuItem;
    miColumn: TMenuItem;
    N12: TMenuItem;
    miSheet: TMenuItem;
    mnuConfig: TMenuItem;
    miBeveledLookandFeel: TMenuItem;
    miBufferedpaint: TMenuItem;
    N4: TMenuItem;
    miShowcaptions: TMenuItem;
    miShowgrid: TMenuItem;
    miShowheaders: TMenuItem;
    miShowformulas: TMenuItem;
    N5: TMenuItem;
    miR1C1Referencestyle: TMenuItem;
    mnuWindow: TMenuItem;
    Arrange1: TMenuItem;
    Cascade1: TMenuItem;
    Close1: TMenuItem;
    MinimizeAll1: TMenuItem;
    TileHorizontally1: TMenuItem;
    TileVertically1: TMenuItem;
    pmSheetPopup: TPopupMenu;
    pmiCut: TMenuItem;
    pmiCopy: TMenuItem;
    pmiPaste: TMenuItem;
    N6: TMenuItem;
    actMerge1: TMenuItem;
    actSplitCells1: TMenuItem;
    N9: TMenuItem;
    pmiDelete: TMenuItem;
    pmiInsert: TMenuItem;
    N10: TMenuItem;
    pmiCols: TMenuItem;
    pmiColsHide: TMenuItem;
    pmiColsShow: TMenuItem;
    pmiRows: TMenuItem;
    pmiRowsHide: TMenuItem;
    pmiRowsShow: TMenuItem;
    Show1: TMenuItem;
    Hide1: TMenuItem;
    pmiFormatCells: TMenuItem;
    pmSummary: TPopupMenu;
    Sum1: TMenuItem;
    Average1: TMenuItem;
    Count1: TMenuItem;
    Max1: TMenuItem;
    Min1: TMenuItem;
    pmBorders: TPopupMenu;
    N11: TMenuItem;
    N21: TMenuItem;
    N31: TMenuItem;
    N41: TMenuItem;
    N51: TMenuItem;
    N61: TMenuItem;
    N71: TMenuItem;
    N81: TMenuItem;
    N91: TMenuItem;
    N101: TMenuItem;
    N111: TMenuItem;
    N121: TMenuItem;
    imgFormatting: TImageList;
    imgBordersImages: TImageList;
    imgStandart: TImageList;
    cbMain: TControlBar;
    tbsFormatting: TToolBar;
    cbxFont: TComboBox;
    cbxSize: TComboBox;
    ToolButton9: TToolButton;
    tbLeftAlign: TToolButton;
    tbCenterAlign: TToolButton;
    tbRightAlign: TToolButton;
    ToolButton10: TToolButton;
    tbBold: TToolButton;
    tbItalic: TToolButton;
    tbUnderline: TToolButton;
    tbStrikeOut: TToolButton;
    ToolButton11: TToolButton;
    tbMerge: TToolButton;
    tgSplit: TToolButton;
    ToolButton16: TToolButton;
    tbSummary: TToolButton;
    tbSortAscending: TToolButton;
    tbSortDescending: TToolButton;
    ToolButton18: TToolButton;
    tbBorderStyle: TToolButton;
    tbsStandart: TToolBar;
    tbsNew: TToolButton;
    tbsOpen: TToolButton;
    tbsSave: TToolButton;
    ToolButton7: TToolButton;
    tbsCut: TToolButton;
    tbsCopy: TToolButton;
    tbsPaste: TToolButton;
    pnCell: TPanel;
    edtCellEdit: TEdit;
    pnCellText: TPanel;
    pnCellRect: TPanel;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    actUndo: TAction;
    actRedo: TAction;
    tlbHistory: TToolBar;
    tbUndo: TToolButton;
    pmRedo: TPopupMenu;
    pmUndo: TPopupMenu;
    ToolButton1: TToolButton;
    imgHistory: TImageList;
    procedure cxSpreadBookSetSelection(Sender: TObject;
      ASheet: TcxSSBookSheet);
    procedure edtCellEditChange(Sender: TObject);
    procedure edtCellEditExit(Sender: TObject);
    procedure edtCellEditKeyPress(Sender: TObject; var Key: Char);
    procedure tbsSummaryClick(Sender: TObject);
    procedure mnuBordersDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
      Selected: Boolean);
    procedure mnuBordersMeasureItem(Sender: TObject; ACanvas: TCanvas;
      var Width, Height: Integer);
    procedure mnuBordersClick(Sender: TObject);
    procedure cbxSizeKeyPress(Sender: TObject; var Key: Char);
    procedure cbxSizeChange(Sender: TObject);
    procedure tbCenterAlignClick(Sender: TObject);
    procedure tbRightAlignClick(Sender: TObject);
    procedure actBoldClick(Sender: TObject);
    procedure actItalicClick(Sender: TObject);
    procedure actUnderlineClick(Sender: TObject);
    procedure actStrikeOutClick(Sender: TObject);
    procedure tbMergeSplitClick(Sender: TObject);
    procedure tbBorderStyleClick(Sender: TObject);
    procedure SummaryItemClick(Sender: TObject);
    procedure cbxFontKeyPress(Sender: TObject; var Key: Char);
    procedure actSheetExecute(Sender: TObject);
    procedure actColumnExecute(Sender: TObject);
    procedure actRowExecute(Sender: TObject);
    procedure actCellsExecute(Sender: TObject);
    procedure actNewExecute(Sender: TObject);
    procedure actOpenSpreadSheetExecute(Sender: TObject);
    procedure actSaveSpeadSheetExecute(Sender: TObject);
    procedure actExitExecute(Sender: TObject);
    procedure AlwaysEnabled(Sender: TObject);
    procedure actPasteExecute(Sender: TObject);
    procedure actCopyExecute(Sender: TObject);
    procedure actCutExecute(Sender: TObject);
    procedure actAutomaticCalcExecute(Sender: TObject);
    procedure actRecalcFormulasExecute(Sender: TObject);
    procedure actBeveledLookandFeelExecute(Sender: TObject);
    procedure actCellLeftAlignExecute(Sender: TObject);
    procedure actCellRightAlignExecute(Sender: TObject);
    procedure actCellCenterAlignExecute(Sender: TObject);
    procedure actFormatCellsExecute(Sender: TObject);
    procedure actHideCellsExecute(Sender: TObject);
    procedure actShowCellsExecute(Sender: TObject);
    procedure actHideColExecute(Sender: TObject);
    procedure actShowColExecute(Sender: TObject);
    procedure actBufferedpaintExecute(Sender: TObject);
    procedure actShowcaptionsExecute(Sender: TObject);
    procedure actShowgridExecute(Sender: TObject);
    procedure actShowheadersExecute(Sender: TObject);
    procedure actShowformulasExecute(Sender: TObject);
    procedure actR1C1ReferencestyleExecute(Sender: TObject);
    procedure actMergeCellsExecute(Sender: TObject);
    procedure actSplitCellsExecute(Sender: TObject);
    procedure actFontExecute(Sender: TObject);
    procedure actFontSizeExecute(Sender: TObject);
    procedure actSumExecute(Sender: TObject);
    procedure actSortExecute(Sender: TObject);
    procedure actHideRowExecute(Sender: TObject);
    procedure actShowRowExecute(Sender: TObject);
    procedure actUndoExecute(Sender: TObject);
    procedure actUndoUpdate(Sender: TObject);
    procedure actRedoUpdate(Sender: TObject);
    procedure actRedoExecute(Sender: TObject);
    procedure pmUndoPopup(Sender: TObject);
    procedure pmRedoPopup(Sender: TObject);
    procedure MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width,
      Height: Integer);
    procedure DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
      Selected: Boolean);
    procedure IsEditorMode(Sender: TObject);
  private
    FIsUpdate: Boolean;
    FSummaryItemHeight: Integer;
    procedure SetTokenStyle(AToolButton: TToolButton; AStyleValue: TStyleValue; AFontStyle: TFontStyle);
    function GetCellText(SelectionRect: TRect; R1C1: Boolean): String;
    procedure RedoItemClick(Sender: TObject);
    procedure UndoItemClick(Sender: TObject);
    procedure DrawUndoRedoItem(PopupMenu: TPopupMenu; Sender: TMenuItem;
      ACanvas: TCanvas; ARect: TRect; Selected: Boolean; InfoStr: String);
  protected
    procedure CalculateSummary(AType: Byte);
    function GetSpreadBook: TcxSpreadSheetBook;
    procedure OpenSpreadSheet;
    procedure SaveSpreadSheet;
    procedure SetCellsStyle(AValuesSet: TStyleValueSet; AAlign: TcxHorzTextAlign;
      AFontSize: Integer; const AFontName: string; AStyles: TFontStyles);
    procedure SetStates;
    property IsUpdate: Boolean read FIsUpdate write FIsUpdate;
  public
    constructor Create(AOwner: TComponent); override;
    procedure NewSheet(const ASheetName: string = '');
    property cxSpreadBook: TcxSpreadSheetBook read GetSpreadBook;
  end;

var
  FeaturesMainForm: TFeaturesMainForm;

implementation

{$R *.dfm}

uses
  FeatureChild, FeatureModify;

type
  TcxSSBookAccess = class(TcxCustomSpreadSheetBook);
  TcxSSBookSheetAccess = class(TcxSSBookSheet);
  TcxSheetAccess = class(TcxSSBookSheet);

constructor TFeaturesMainForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  cbxFont.Items.Assign(Screen.Fonts);
  cbxFont.Text := 'Tahoma';
  cbxSize.Text := '10';
  FSummaryItemHeight := 10;
  {$IFDEF VER140}
  pmRedo.AutoHotkeys := maManual;
  pmUndo.AutoHotkeys := maManual;
  {$ENDIF}
end;

procedure TFeaturesMainForm.NewSheet(const ASheetName: string = '');
begin
  TFeatureChildForm.Create(Self);
  if ASheetName <> '' then
    ActiveMDIChild.Caption :=  ASheetName
  else
    ActiveMDIChild.Caption :=  'WorkBook - ' + IntToStr(Self.MDIChildCount);
  with cxSpreadBook do
    OnSetSelection := cxSpreadBookSetSelection;
end;

procedure TFeaturesMainForm.CalculateSummary(AType: Byte);

  function SelRect(const ARect: TRect): string;
  begin
    Result := cxSpreadBook.CellsNameByRef(cxSpreadBook.ActivePage, ARect, False);
  end;
var
  S: string;
  ARect: TRect;
  ACell: TcxssCellObject;
const
  AFunc: array[0..4] of string = (sxlfSum, sxlfAverage, sxlfCount, sxlfMax, sxlfMin);
begin
  with cxSpreadBook do
  try
    ARect := SelectionRect;
    S := SelRect(ARect);
    ACell := ActiveSheet.GetCellObject(ARect.Right, ARect.Bottom + 1);
    try
      ACell.Text := '=' + AFunc[AType] + '(' + S + ')';
    finally
      ACell.Free;
    end;
  finally
    UpdateControl;
  end;
end;

function TFeaturesMainForm.GetSpreadBook: TcxSpreadSheetBook;
begin
  Result := (ActiveMDIChild as TFeatureChildForm).cxSpreadBook;
end;

procedure TFeaturesMainForm.OpenSpreadSheet;
begin
  if OpenDialog.Execute then
  begin
    NewSheet(OpenDialog.FileName);
    try
      try
        cxSpreadBook.LoadFromFile(OpenDialog.FileName);
      except
        ActiveMDIChild.Close;
        raise ESpreadSheetError.CreateFmt('Invalid data in file %s',
          [OpenDialog.FileName])
      end;
    finally
      actShowGrid.Checked := cxSpreadBook.ShowGrid;
    end;
  end;
end;

⌨️ 快捷键说明

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