Componentes.Terceros.DevExp.../internal/x.36/1/ExpressPrinting System/Demos/Delphi/SpreadSheetRL/SpreadSheetRLMain.pas
2008-09-04 11:31:51 +00:00

729 lines
28 KiB
ObjectPascal

unit SpreadSheetRLMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, ToolWin, DB, DBTables, Menus, ImgList,
cxControls, cxSSheet, cxSSUtils, cxSSTypes, cxSSHeaders, cxSSStyles,
StdActns, ActnList, dxPSCore, dxPSBaseGridLnk, dxPScxSSLnk, dxPSGlbl,
dxPSUtl, dxPSEngn, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider,
dxPSFillPatterns, dxPSEdgePatterns;
type
TSpreadSheetRLForm = class(TForm)
edtCellEdit: TEdit;
imgStandart : TImageList;
pnCellsRect: TPanel;
Panel2 : TPanel;
Query: TQuery;
SaveDialog: TSaveDialog;
ToolBar1 : TToolBar;
ToolBar2 : TToolBar;
alMain: TActionList;
actDeleteCells: TAction;
actSaveSpeadSheet: TAction;
actInsertCells: TAction;
actExit: TAction;
actCut: TAction;
actCopy: TAction;
actPaste: TAction;
actFormatCells: TAction;
actHideCells: TAction;
actShowCells: TAction;
actHideCol: TAction;
actShowCol: TAction;
actHideRow: TAction;
actShowRow: TAction;
pmSheetPopup: TPopupMenu;
pmiCut: TMenuItem;
pmiCopy: TMenuItem;
pmiPaste: TMenuItem;
N6: TMenuItem;
pmiDelete: TMenuItem;
pmiInsert: TMenuItem;
MenuItem2: TMenuItem;
pmiCols: TMenuItem;
pmiColsHide: TMenuItem;
pmiColsShow: TMenuItem;
pmiRows: TMenuItem;
pmiRowsHide: TMenuItem;
pmiRowsShow: TMenuItem;
MenuItem3: TMenuItem;
MenuItem4: TMenuItem;
pmiFormatCells: TMenuItem;
ToolBar3: TToolBar;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
mnuMain: TMainMenu;
mnuFile: TMenuItem;
miSaveSpreadSheet: TMenuItem;
MenuItem6: TMenuItem;
miExit: TMenuItem;
mnuEdit: TMenuItem;
miCut: TMenuItem;
miCopy: TMenuItem;
miPaste: TMenuItem;
N7: TMenuItem;
miCells: TMenuItem;
miFormat: TMenuItem;
miHide: TMenuItem;
miShow: TMenuItem;
miDeletecells: TMenuItem;
Insertcells1: TMenuItem;
miColumns: TMenuItem;
MenuItem7: TMenuItem;
MenuItem8: TMenuItem;
miRows: TMenuItem;
Hide3: TMenuItem;
Show3: TMenuItem;
mnuConfig: TMenuItem;
actApplyFormatting: TAction;
actLoadData: TAction;
ApplyFormatting1: TMenuItem;
LoadData1: TMenuItem;
cxSpreadBook: TcxSpreadSheetBook;
Panel3: TPanel;
Button1: TButton;
Button2: TButton;
Button4: TButton;
Button3: TButton;
actPreview: TAction;
actPrint: TAction;
actSetPrintArea: TAction;
actClearPrintArea: TAction;
dxComponentPrinter: TdxComponentPrinter;
ToolButton1: TToolButton;
tbPreview: TToolButton;
actPrintSetup: TAction;
Preview1: TMenuItem;
Print1: TMenuItem;
PrintSetup1: TMenuItem;
PrintArea1: TMenuItem;
SetPrintArea1: TMenuItem;
ClearPrintArea1: TMenuItem;
N1: TMenuItem;
dxComponentPrinterLink1: TdxSpreadSheetBookReportLink;
procedure FormShow(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure cxSpreadBookSetSelection(Sender: TObject;
ASheet: TcxSSBookSheet);
procedure cxSpreadBookSheetPopupMenu(Sender: TObject; X,
Y: Integer);
procedure edtCellEditKeyPress(Sender: TObject; var Key: Char);
procedure actCellsExecute(Sender: TObject);
procedure actFormatCellsExecute(Sender: TObject);
procedure actHideCellsExecute(Sender: TObject);
procedure actShowCellsExecute(Sender: TObject);
procedure actHideColExecute(Sender: TObject);
procedure actShowColExecute(Sender: TObject);
procedure actHideRowExecute(Sender: TObject);
procedure actShowRowExecute(Sender: TObject);
procedure actCutExecute(Sender: TObject);
procedure actCopyExecute(Sender: TObject);
procedure actPasteExecute(Sender: TObject);
procedure actSaveSpeadSheetExecute(Sender: TObject);
procedure actExitExecute(Sender: TObject);
procedure actApplyFormattingUpdate(Sender: TObject);
procedure actSaveSpeadSheetUpdate(Sender: TObject);
procedure actLoadDataExecute(Sender: TObject);
procedure AlwaysEnabled(Sender: TObject);
procedure edtCellEditChange(Sender: TObject);
procedure edtCellEditExit(Sender: TObject);
procedure actApplyFormattingExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure actPreviewExecute(Sender: TObject);
procedure actPrintExecute(Sender: TObject);
procedure actSetPrintAreaExecute(Sender: TObject);
procedure actClearPrintAreaExecute(Sender: TObject);
procedure actPrintSetupExecute(Sender: TObject);
procedure cxSpreadBookActiveSheetChanging(
Sender: TcxCustomSpreadSheetBook; const ActiveSheet: Integer;
var CanSelect: Boolean);
private
CurRow : Integer;
FIsUpdate: Boolean;
FIsApplyFormatting: Boolean;
FSaveSpreadSheet: Boolean;
procedure SetCellText(ACol, ARow : Integer; AText : String);
procedure SetCellDate(ACol, ARow : Integer; ADate : TDateTime);
procedure SetCellFont(ALeftCol, ATopRow, ARightCol, ABottomRow : Integer;
AStyle : TFontStyles; ASize : Integer);
procedure SetCellPattern(ALeftCol, ATopRow, ARightCol, ABottomRow,
ABackground, AForeGround : Integer; AFillStyle : TcxSSFillStyle);
procedure SetCellFormat(ALeftCol, ATopRow, ARightCol, ABottomRow,
AFormat : Integer);
procedure SetCellAlignment(ALeftCol, ATopRow, ARightCol, ABottomRow : Integer;
AHorzAlign : TcxHorzTextAlign; AVertAlign : TcxVertTextAlign);
procedure SetCellBorders(ALeftCol, ATopRow, ARightCol, ABottomRow : Integer;
AEdge: integer; AStyle: TcxSSEdgeLineStyle);
procedure SaveSpreadSheet;
function GetCellText(SelectionRect: TRect; R1C1: Boolean): String;
end;
var
SpreadSheetRLForm: TSpreadSheetRLForm;
implementation
uses SpreadSheetRLModify;
resourcestring
sdxInvalidPrintArea = 'You''ve selected a single cell for print area.' + #13#10#13#10 +
'If this is correct, click OK.' + #13#10 +
'If you selected single cell by mistake, click Cancel, select the cell you want to include, and then click Set Print Area again.';
{$R *.dfm}
procedure TSpreadSheetRLForm.FormShow(Sender: TObject);
begin
with cxSpreadBook do
begin
BeginUpdate;
Try
AutoRecalc := False;
ActiveSheet.Caption := 'Current'; // set the page caption for the first page
AddSheetPage('HiLo'); // add a second page and set it's caption
ActivePage := 0; // turn our attention to the first page
SetCellText(0,0,'Current Stockholding Valuations'); // set a title in the first column, first row cell
SetCellText(0,2,'Company'); // Col A - Set column titles
SetCellText(1,2,'Holding'); // B
SetCellText(2,2,'Purchased'); // C
SetCellText(3,2,'Price'); // D
SetCellText(4,2,'Cost'); // E = B * D
SetCellText(5,2,'Value'); // F
SetCellText(6,2,'Worth'); // G = B * F
SetCellText(7,2,'Gain'); // H = G - E
SetCellText(8,2,'%age Gain'); // I = H / E
ActivePage := 1; // switch to the second page
SetCellText(0,0,'High, Low and Current Stock Prices');
SetCellText(0,2,'Company'); // Col A
SetCellText(1,2,'Price'); // B
SetCellText(2,2,'High'); // C
SetCellText(3,2,'Low'); // D
SetCellText(4,2,'Average'); // E
AutoRecalc := True;
ActivePage := 0; // back to the first page
cxSpreadBookSetSelection(Nil,ActiveSheet); // call to set the current cell and cell contents display
Finally
EndUpdate;
end;
end;
end;
procedure TSpreadSheetRLForm.ToolButton1Click(Sender: TObject);
begin
with SaveDialog do // using the standard save dialog
if Execute then // if executed,
cxSpreadBook.SaveToFile(FileName); // then save the spreadsheet
end;
procedure TSpreadSheetRLForm.Button4Click(Sender: TObject);
begin
Close;
end;
procedure TSpreadSheetRLForm.cxSpreadBookSetSelection(Sender: TObject;
ASheet: TcxSSBookSheet);
var
CellObject: TcxSSCellObject;
begin
CellObject := cxSpreadBook.ActiveSheet.GetCellObject(ASheet.SelectionRect.Left, ASheet.SelectionRect.Top);
try
FIsUpdate := True;
edtCellEdit.Text := CellObject.Text;
pnCellsRect.Caption := GetCellText(ASheet.SelectionRect, cxSpreadBook.R1C1ReferenceStyle);
finally
CellObject.Free;
FIsUpdate := False;
end;
end;
procedure TSpreadSheetRLForm.cxSpreadBookSheetPopupMenu(Sender: TObject; X,
Y: Integer);
begin
pmSheetPopup.Popup(X, Y); // popup our menu where clicked
end;
procedure TSpreadSheetRLForm.edtCellEditKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then // pressing RETURN in our edit box
Windows.SetFocus(cxSpreadBook.Handle); // set focus back to the spreadsheet
end;
procedure TSpreadSheetRLForm.SetCellText(ACol, ARow : Integer; AText : String);
begin
// get a cell object for the request col and row
with cxSpreadBook.ActiveSheet.GetCellObject(ACol,ARow) do
begin
try
Text := AText;
finally
Free; // and free it (important!)
end;
end;
end;
procedure TSpreadSheetRLForm.SetCellDate(ACol, ARow : Integer; ADate : TDateTime);
begin
// get a cell object for the request col and row
with cxSpreadBook.ActiveSheet.GetCellObject(ACol,ARow) do
begin
try
DateTime := ADate;
finally
Free; // free it
end;
end;
end;
procedure TSpreadSheetRLForm.SetCellFont(ALeftCol, ATopRow, ARightCol, ABottomRow : Integer; AStyle : TFontStyles; ASize : Integer);
var
I, J : Integer;
begin
with cxSpreadBook.ActiveSheet do // using our active page
for I := ALeftCol to ARightCol do // for each column specified
for J := ATopRow to ABottomRow do // for each row specified
with GetCellObject(I,J) do // get the cell
try
Style.Font.Style := AStyle;
Style.Font.Size := ASize;
finally
Free; // free it
end;
end;
procedure TSpreadSheetRLForm.SetCellPattern(ALeftCol, ATopRow, ARightCol, ABottomRow, ABackground, AForeGround : Integer; AFillStyle : TcxSSFillStyle);
var
I, J : Integer;
begin
with cxSpreadBook.ActiveSheet do // using our active page
for I := ALeftCol to ARightCol do // for each column specified
for J := ATopRow to ABottomRow do // for each row specified
with GetCellObject(I,J) do // get the cell
try
Style.Brush.BackgroundColor := ABackground;
Style.Brush.ForegroundColor := AForeground;
Style.Brush.Style := AFillStyle;
finally
Free;
end;
end;
procedure TSpreadSheetRLForm.SetCellFormat(ALeftCol, ATopRow, ARightCol, ABottomRow, AFormat : Integer);
var
I, J : Integer;
begin
with cxSpreadBook.ActiveSheet do // using our active page
for I := ALeftCol to ARightCol do // for each column specified
for J := ATopRow to ABottomRow do // for each row specified
with GetCellObject(I,J) do // get the cell
try
Style.Format := AFormat;
finally
Free; // free it
end;
end;
procedure TSpreadSheetRLForm.SetCellAlignment(ALeftCol, ATopRow, ARightCol, ABottomRow : Integer;
AHorzAlign : TcxHorzTextAlign; AVertAlign : TcxVertTextAlign);
var
I, J : Integer;
begin
with cxSpreadBook.ActiveSheet do // using our active page
for I := ALeftCol to ARightCol do // for each column specified
for J := ATopRow to ABottomRow do // for each row specified
with GetCellObject(I,J) do // get the cell
try
Style.HorzTextAlign := AHorzAlign;
Style.VertTextAlign := AVertAlign;
finally
Free; // free it
end;
end;
procedure TSpreadSheetRLForm.SetCellBorders(ALeftCol, ATopRow, ARightCol, ABottomRow : Integer;
AEdge: Integer; AStyle: TcxSSEdgeLineStyle);
var
I, J : Integer;
begin
with cxSpreadBook.ActiveSheet do // using our active page
for I := ALeftCol to ARightCol do // for each column specified
for J := ATopRow to ABottomRow do // for each row specified
with GetCellObject(I,J) do // get the cell
try
Case AEdge of // depending on which edge has been requested
0: Style.Borders.Left.Style := AStyle; // set to the specified style
1: Style.Borders.Top.Style := AStyle;
2: Style.Borders.Right.Style := AStyle;
3: Style.Borders.Bottom.Style := AStyle;
end;
finally
Free; // free it
end;
end;
procedure TSpreadSheetRLForm.actCellsExecute(Sender: TObject);
var
AForm :TSpreadSheetRLModifyForm;
const
AFormType: array[Boolean] of TcxSSModifyType = (mtDelete, mtInsert);
begin
if FIsUpdate then Exit;
AForm := TSpreadSheetRLModifyForm.Create(Self);
AForm.Top := (Top + Height) shr 1;
AForm.Left := (Left + Width) shr 1;
try
if AForm.Execute(AFormType[TCustomAction(Sender).Tag = 1]) then
with cxSpreadBook.ActiveSheet do
case TCustomAction(Sender).Tag of
0:
DeleteCells(SelectionRect, AForm.Modify);
1:
InsertCells(SelectionRect, AForm.Modify);
end;
finally
AForm.Free;
end;
end;
procedure TSpreadSheetRLForm.actFormatCellsExecute(Sender: TObject);
begin
with cxSpreadBook.ActiveSheet do
FormatCells(SelectionRect);
end;
procedure TSpreadSheetRLForm.actHideCellsExecute(Sender: TObject);
begin
if FIsUpdate then Exit;
with cxSpreadBook.ActiveSheet do
SetVisibleState(SelectionRect, True, True, False);
end;
procedure TSpreadSheetRLForm.actShowCellsExecute(Sender: TObject);
begin
if FIsUpdate then Exit;
with cxSpreadBook.ActiveSheet do
SetVisibleState(SelectionRect, True, True, True);
end;
procedure TSpreadSheetRLForm.actHideColExecute(Sender: TObject);
begin
if FIsUpdate then Exit;
with cxSpreadBook.ActiveSheet do
SetVisibleState(SelectionRect, True, False, False);
end;
procedure TSpreadSheetRLForm.actShowColExecute(Sender: TObject);
begin
if FIsUpdate then Exit;
with cxSpreadBook.ActiveSheet do
SetVisibleState(SelectionRect, True, False, True);
end;
procedure TSpreadSheetRLForm.actHideRowExecute(Sender: TObject);
begin
if FIsUpdate then Exit;
with cxSpreadBook.ActiveSheet do
SetVisibleState(SelectionRect, False, True, False);
end;
procedure TSpreadSheetRLForm.actShowRowExecute(Sender: TObject);
begin
if FIsUpdate then Exit;
with cxSpreadBook.ActiveSheet do
SetVisibleState(SelectionRect, False, True, True);
end;
procedure TSpreadSheetRLForm.actCutExecute(Sender: TObject);
begin
with cxSpreadBook.ActiveSheet do
Copy(SelectionRect, True);
end;
procedure TSpreadSheetRLForm.actCopyExecute(Sender: TObject);
begin
with cxSpreadBook.ActiveSheet do
Copy(SelectionRect, False);
end;
procedure TSpreadSheetRLForm.actPasteExecute(Sender: TObject);
begin
with cxSpreadBook.ActiveSheet do
Paste(SelectionRect.TopLeft);
end;
procedure TSpreadSheetRLForm.actSaveSpeadSheetExecute(Sender: TObject);
begin
SaveSpreadSheet;
end;
procedure TSpreadSheetRLForm.SaveSpreadSheet;
var
AFileName: string;
begin
if SaveDialog.Execute then
begin
AFileName := ChangeFileExt(SaveDialog.FileName, '.xls');
cxSpreadBook.SaveToFile(AFileName );
ActiveMDIChild.Caption := AFileName;
end;
end;
procedure TSpreadSheetRLForm.actExitExecute(Sender: TObject);
begin
Close;
end;
procedure TSpreadSheetRLForm.actApplyFormattingUpdate(Sender: TObject);
begin
TCustomAction(Sender).Enabled := FIsApplyFormatting;
end;
procedure TSpreadSheetRLForm.actSaveSpeadSheetUpdate(Sender: TObject);
begin
TCustomAction(Sender).Enabled := FSaveSpreadSheet;
end;
procedure TSpreadSheetRLForm.actLoadDataExecute(Sender: TObject);
var
CurCursor : TCursor;
begin
CurCursor := Screen.Cursor; // preserve the current cursor
Screen.Cursor := crHourGlass;
Try
cxSpreadBook.BeginUpdate;
cxSpreadBook.ActivePage := 0; // ensure we are looking at the right page
CurRow := 3; // set the starting current row
With Query do // and using our database query
begin
Open; // open the data
While NOT EOF do // and for every record
begin
SetCellText(0,CurRow, // set the company name
FieldByName('CO_NAME').AsString);
SetCellText(1,CurRow, // the number of shares
FieldByName('SHARES').AsString);
SetCellDate(2,CurRow, // the purchase date
FieldByName('PUR_DATE').AsDateTime);
SetCellText(3,CurRow, // the purchase price
FieldByName('PUR_PRICE').AsString);
SetCellText(4,CurRow, // calculate the purchase cost = number of shares * purchase price
Format('=B%d*D%d/100',[CurRow+1,CurRow+1]));
SetCellText(5,CurRow, // the current price
FieldByName('CUR_PRICE').AsString);
SetCellText(6,CurRow, // calculate the current valuation = number of shares * current price
Format('=B%d*F%d/100',[CurRow+1,CurRow+1]));
SetCellText(7,CurRow, // calculate the gain/loss = current valuation - purchase cost
Format('=G%d-E%d',[CurRow+1,CurRow+1]));
SetCellText(8,CurRow, // calculate the % gain/loss
Format('=H%d/E%d',[CurRow+1,CurRow+1]));
Next;
Inc(CurRow); // bump the row number
end;
Inc(CurRow);
SetCellText(4,CurRow, // set the formula for the total purchase cost
Format('=SUM(E3:E%d)',[CurRow-1]));
SetCellText(6,CurRow, // total current valuation
Format('=SUM(G3:G%d)',[CurRow-1]));
SetCellText(7,CurRow, // total gain/loss
Format('=SUM(H3:H%d)',[CurRow-1]));
SetCellText(8,CurRow, // and overall percentage
Format('=H%d/E%d',[CurRow+1,CurRow+1]));
First; // back to the first record
cxSpreadBook.ActivePage := 1; // and move to the second page
// and repeat the process to setup the data
CurRow := 3;
While NOT EOF do
begin
SetCellText(0,CurRow, // company name
FieldByName('CO_NAME').AsString);
SetCellText(1,CurRow, // current price
FieldByName('CUR_PRICE').AsString);
SetCellText(2,CurRow, // year high
FieldByName('YRL_HIGH').AsString);
SetCellText(3,CurRow, // year low
FieldByName('YRL_LOW').AsString);
SetCellText(4,CurRow, // average of Hi/Lo prices
Format('=(C%d+D%d)/2',[CurRow+1,CurRow+1]));
Next;
Inc(CurRow);
end;
Inc(CurRow);
Close;
FIsApplyFormatting := True;
end;
Finally
cxSpreadBook.EndUpdate;
cxSpreadBook.Recalc;
cxSpreadBook.ActivePage := 0; // back to first page
Screen.Cursor := CurCursor; // restore original cursor
end;
end;
function TSpreadSheetRLForm.GetCellText(SelectionRect: TRect; R1C1: Boolean): String;
begin
with TcxSSUtils do
begin
Result := ColumnNameByIndex(SelectionRect.Left, R1C1) +
RowNameByIndex(SelectionRect.Top, R1C1);
if (SelectionRect.Left <> SelectionRect.Right) or (SelectionRect.Top <> SelectionRect.Bottom) then
Result := Result + ' x ' + ColumnNameByIndex(SelectionRect.Right, R1C1) +
RowNameByIndex(SelectionRect.Bottom, R1C1);
end;
end;
procedure TSpreadSheetRLForm.AlwaysEnabled(Sender: TObject);
begin
TCustomAction(Sender).Enabled := True;
end;
procedure TSpreadSheetRLForm.edtCellEditChange(Sender: TObject);
begin
if FIsUpdate then Exit;
with cxSpreadBook do
begin
with ActiveSheet.GetCellObject(ActiveSheet.SelectionRect.Left, ActiveSheet.SelectionRect.Top) do
SetCellText((Sender as TEdit).Text);
UpdateControl;
end;
end;
procedure TSpreadSheetRLForm.edtCellEditExit(Sender: TObject);
begin
with cxSpreadBook do
begin
with ActiveSheet.GetCellObject(ActiveSheet.SelectionRect.Left, ActiveSheet.SelectionRect.Top) do
begin
Text := Text;
Free;
end;
UpdateControl;
SetFocus;
end;
cxSpreadBookSetSelection(Self, cxSpreadBook.ActiveSheet);
end;
procedure TSpreadSheetRLForm.actApplyFormattingExecute(Sender: TObject);
var
CHeader, RHeader : TcxSSHeader;
I : Integer;
CurCursor : TCursor;
begin
CurCursor := Screen.Cursor; // preserve the current cursor
Screen.Cursor := crHourGlass;
FSaveSpreadSheet := False;
cxSpreadBook.BeginUpdate;
try
cxSpreadBook.ActivePage := 0; // ensure we are looking at the first page
// First set the column widths
CHeader := cxSpreadBook.ActiveSheet.Cols;
CHeader.Size[0] := 140;
for I := 1 to 8 do CHeader.Size[I] := 80;
// and then the Row heights for the title and column descriptors
RHeader := cxSpreadBook.ActiveSheet.Rows;
RHeader.Size[0] := 30;
RHeader.Size[2] := 30;
// and do some cell formatting
SetCellFont(0,0,0,0,[fsBold, fsUnderline],12); // set the title and column header fonts
SetCellPattern(0,0,8,1,16,1,fsSolid); // and add some cell shading for the sheet title
SetCellPattern(0,2,8,2,23,1,fsSolid); // and for the column headers
SetCellPattern(0,2,0,CurRow-2,23,1,fsSolid); // and the company names
// and now some number formatting
SetCellFormat(1,3,1,CurRow-1, 3); // Holding Column #,##0
SetCellFormat(2,3,2,CurRow-1,15); // Date Purchased d-mmm-yy
SetCellFormat(3,3,6,CurRow-1, 4); // Price/Cost/Value & Worth Column #,##0.00
SetCellFormat(7,3,7,CurRow-1, 8); // Gain/(Loss) value (#,##0.00_);[Red](#,##0.00)
SetCellFormat(8,3,8,CurRow-1,10); // Gain/(Loss) percentage 0.00%
// and now for the totals
SetCellFormat(4,CurRow,4,CurRow, 8); // Total Purchase Cost ($#,##0.00_);[Red]($#,##0.00)
SetCellFormat(6,CurRow,7,CurRow, 8); // Total Current Valuation ($#,##0.00_);[Red]($#,##0.00)
SetCellFormat(8,CurRow,8,CurRow,10); // Total Gain/(Loss) percentage 0.00%
// now align all the data
SetCellAlignment(1,3,8,CurRow,haRight,vaCenter); // Right Align all the numeric fields
// set borders for the totals
SetCellBorders(4,CurRow,4,CurRow, 1, lsThin); // thin single line at the top of the cell
SetCellBorders(6,CurRow,6,CurRow, 1, lsThin);
SetCellBorders(7,CurRow,7,CurRow, 1, lsThin);
SetCellBorders(4,CurRow,4,CurRow, 3, lsDouble); // double line at the bottom of the cell
SetCellBorders(6,CurRow,6,CurRow, 3, lsDouble); // ditto
SetCellBorders(7,CurRow,7,CurRow, 3, lsDouble); // ditto
// and now a similar process for the Hi/Lo valuations page
cxSpreadBook.ActivePage := 1; // ensure we are looking at the second page
// First set the column widths
CHeader := cxSpreadBook.ActiveSheet.Cols;
CHeader.Size[0] := 140;
for I := 1 to 4 do CHeader.Size[I] := 80;
// and then the Row heights for the title and column descriptors
RHeader := cxSpreadBook.ActiveSheet.Rows;
RHeader.Size[0] := 30;
RHeader.Size[2] := 30;
SetCellFont(0,0,0,0,[fsBold, fsUnderline],12);
// and now adding some cell shading
SetCellPattern(0,0,4,1,16,1,fsSolid); // for the sheet title
SetCellPattern(0,2,4,2,23,1,fsSolid); // for the column headers
SetCellPattern(0,2,0,CurRow-2,23,1,fsSolid); // and the company names
SetCellFormat(1,3,4,CurRow-1, 4); // Current, Hi, Lo and Average #,##0.00
SetCellAlignment(1,3,4,CurRow,haRight,vaCenter); // Right Align all the numeric fields
finally
FSaveSpreadSheet := True; // enable the save spreadsheet button
cxSpreadBook.ActivePage := 0; // return to the first page
cxSpreadBook.EndUpdate;
Screen.Cursor := CurCursor;
end;
end;
procedure TSpreadSheetRLForm.FormCreate(Sender: TObject);
begin
FSaveSpreadSheet := False;
FIsApplyFormatting := False;
end;
procedure TSpreadSheetRLForm.actPreviewExecute(Sender: TObject);
begin
dxComponentPrinter.ReportLink[0].Preview;
end;
procedure TSpreadSheetRLForm.actPrintExecute(Sender: TObject);
begin
dxComponentPrinter.ReportLink[0].Print(True, nil);
end;
procedure TSpreadSheetRLForm.actSetPrintAreaExecute(Sender: TObject);
var
R: TRect;
begin
R := cxSpreadBook.ActiveSheet.SelectionRect;
if (R.Right <> R.Left) or (R.Bottom <> R.Top) or (MessageDlg(sdxInvalidPrintArea, mtWarning, [mbOK, mbCancel], 0) = mrOK) then
TCustomdxSpreadSheetReportLink(dxComponentPrinter.ReportLink[0]).PrintArea := R;
end;
procedure TSpreadSheetRLForm.actClearPrintAreaExecute(Sender: TObject);
begin
TCustomdxSpreadSheetReportLink(dxComponentPrinter.ReportLink[0]).ClearPrintArea;
end;
procedure TSpreadSheetRLForm.actPrintSetupExecute(Sender: TObject);
begin
dxComponentPrinter.ReportLink[0].PageSetup;
end;
procedure TSpreadSheetRLForm.cxSpreadBookActiveSheetChanging(
Sender: TcxCustomSpreadSheetBook; const ActiveSheet: Integer;
var CanSelect: Boolean);
begin
if CanSelect then TCustomdxSpreadSheetReportLink(dxComponentPrinter.ReportLink[0]).ClearPrintArea;
end;
end.