📄 featuresmain.pas
字号:
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 + -