1
0
Files
aarre
applications
bindings
components
ZVDateTimeCtrls
aboutcomponent
acs
beepfp
chelper
cmdline
cmdlinecfg
colorpalette
csvdocument
epiktimer
fpsound
fpspreadsheet
docs
examples
db_import_export
fpsspeedtest
other
read_write
visual
fpschart
fpsctrls
demo_ctrls.ico
demo_ctrls.lpi
demo_ctrls.lpr
main.lfm
main.pas
readme.txt
fpsctrls_no_install
fpsgrid
fpsgrid_no_install
shared
spready
wikitablemaker
images
languages
reference
tests
fpolebasic.pas
fpolestorage.pas
fps.inc
fpsactions.pas
fpsallformats.pas
fpscell.pas
fpsclasses.pas
fpscsv.pas
fpscsvdocument.pas
fpscurrency.pas
fpsexport.pas
fpsexportreg.pas
fpsexprparser.pas
fpsfunc.pas
fpsheaderfooterparser.pas
fpshtml.pas
fpshtmlutils.pas
fpsimages.pas
fpsnumformat.pas
fpsnumformatparser.pas
fpsopendocument.pas
fpspagelayout.pas
fpspalette.pas
fpspatches.pas
fpspreadsheet.pas
fpspreadsheetchart.pas
fpspreadsheetctrls.lrs
fpspreadsheetctrls.pas
fpspreadsheetgrid.pas
fpsreaderwriter.pas
fpsregfileformats.pas
fpsrpn.pas
fpssearch.pas
fpsstreams.pas
fpsstrings.pas
fpstypes.pas
fpsutils.pas
fpsvisualutils.pas
fpsxmlcommon.pas
fpszipper.pp
laz_fpspreadsheet.lpk
laz_fpspreadsheet.pas
laz_fpspreadsheet_visual.lpk
laz_fpspreadsheet_visual.pas
laz_fpspreadsheetexport_visual.lpk
laz_fpspreadsheetexport_visual.pas
readme.txt
uvirtuallayer.pas
uvirtuallayer_ole.pas
uvirtuallayer_ole_helpers.pas
uvirtuallayer_ole_types.pas
uvirtuallayer_stream.pas
uvirtuallayer_types.pas
wikitable.pas
xlsbiff2.pas
xlsbiff5.pas
xlsbiff8.pas
xlscommon.pas
xlsconst.pas
xlsescher.pas
xlsxml.pas
xlsxooxml.pas
fractions
freetypepascal
geckoport
gradcontrols
iosdesigner
iphonelazext
jujiboutils
jvcllaz
kcontrols
lazbarcodes
lclextensions
longtimer
manualdock
mplayer
multithreadprocs
nvidia-widgets
onguard
orpheus
playsoundpackage
poweredby
powerpdf
rgbgraphics
richmemo
richview
rtfview
rx
scrolltext
smnetgradient
spktoolbar
svn
tdi
thtmlport
tparadoxdataset
tvplanit
virtualtreeview
virtualtreeview-new
xdev_toolkit
zlibar
examples
lclbindings
wst
lazarus-ccr/components/fpspreadsheet/examples/visual/fpsctrls/main.pas

850 lines
25 KiB
ObjectPascal
Raw Normal View History

unit main;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
ComCtrls, ActnList, Menus, StdActns, Buttons,
fpstypes, fpspreadsheet, fpspreadsheetctrls, fpspreadsheetgrid, fpsActions,
fpsRegFileFormats, fpsSYLK, xlsxml;
type
{ TMainForm }
TMainForm = class(TForm)
AcRowDelete: TAction;
AcColDelete: TAction;
AcRowAdd: TAction;
AcColAdd: TAction;
AcSettingsCSVParams: TAction;
AcSettingsCurrency: TAction;
AcSettingsFormatSettings: TAction;
AcSearch: TAction;
AcShowGridLines: TAction;
AcShowHeaders: TAction;
AcFrozenRows: TAction;
AcFrozenCols: TAction;
AcWorksheetRTL: TAction;
AcViewInspector: TAction;
ActionList: TActionList;
AcFileExit: TFileExit;
AcFileOpen: TFileOpen;
AcFileSaveAs: TFileSaveAs;
ImageList: TImageList;
MainMenu: TMainMenu;
MenuItem1: TMenuItem;
MenuItem10: TMenuItem;
MenuItem100: TMenuItem;
MenuItem101: TMenuItem;
MenuItem102: TMenuItem;
MenuItem103: TMenuItem;
MenuItem104: TMenuItem;
MenuItem105: TMenuItem;
MenuItem106: TMenuItem;
MenuItem107: TMenuItem;
MenuItem108: TMenuItem;
MenuItem109: TMenuItem;
MenuItem110: TMenuItem;
MenuItem111: TMenuItem;
MenuItem112: TMenuItem;
MenuItem113: TMenuItem;
MenuItem114: TMenuItem;
MenuItem115: TMenuItem;
MenuItem116: TMenuItem;
MenuItem117: TMenuItem;
MenuItem118: TMenuItem;
MenuItem119: TMenuItem;
MenuItem120: TMenuItem;
MenuItem121: TMenuItem;
MenuItem122: TMenuItem;
MenuItem123: TMenuItem;
MenuItem124: TMenuItem;
MenuItem125: TMenuItem;
MenuItem126: TMenuItem;
MenuItem127: TMenuItem;
MenuItem128: TMenuItem;
MenuItem129: TMenuItem;
MenuItem130: TMenuItem;
MenuItem131: TMenuItem;
MenuItem132: TMenuItem;
MenuItem133: TMenuItem;
MenuItem134: TMenuItem;
MenuItem135: TMenuItem;
MenuItem136: TMenuItem;
MenuItem137: TMenuItem;
MenuItem138: TMenuItem;
MenuItem139: TMenuItem;
MenuItem140: TMenuItem;
MenuItem141: TMenuItem;
MenuItem142: TMenuItem;
MenuItem143: TMenuItem;
MenuItem144: TMenuItem;
MenuItem145: TMenuItem;
MnuSettings: TMenuItem;
MenuItem11: TMenuItem;
MenuItem12: TMenuItem;
MenuItem13: TMenuItem;
MenuItem14: TMenuItem;
MenuItem15: TMenuItem;
MenuItem16: TMenuItem;
MenuItem17: TMenuItem;
MenuItem18: TMenuItem;
MenuItem19: TMenuItem;
MenuItem2: TMenuItem;
MenuItem20: TMenuItem;
MenuItem21: TMenuItem;
MenuItem22: TMenuItem;
MenuItem23: TMenuItem;
MenuItem24: TMenuItem;
MenuItem25: TMenuItem;
MenuItem26: TMenuItem;
MenuItem27: TMenuItem;
MenuItem28: TMenuItem;
MenuItem29: TMenuItem;
MenuItem3: TMenuItem;
MenuItem30: TMenuItem;
MenuItem31: TMenuItem;
MenuItem32: TMenuItem;
MenuItem33: TMenuItem;
MenuItem34: TMenuItem;
MenuItem35: TMenuItem;
MenuItem36: TMenuItem;
MenuItem37: TMenuItem;
MenuItem38: TMenuItem;
MenuItem39: TMenuItem;
MenuItem4: TMenuItem;
MenuItem40: TMenuItem;
MenuItem41: TMenuItem;
MenuItem42: TMenuItem;
MenuItem43: TMenuItem;
MenuItem44: TMenuItem;
MenuItem45: TMenuItem;
MenuItem46: TMenuItem;
MenuItem47: TMenuItem;
MenuItem48: TMenuItem;
MenuItem49: TMenuItem;
MenuItem5: TMenuItem;
MenuItem50: TMenuItem;
MenuItem51: TMenuItem;
MenuItem52: TMenuItem;
MenuItem53: TMenuItem;
MenuItem54: TMenuItem;
MenuItem55: TMenuItem;
MenuItem56: TMenuItem;
MenuItem57: TMenuItem;
MenuItem58: TMenuItem;
MenuItem59: TMenuItem;
MenuItem60: TMenuItem;
MenuItem61: TMenuItem;
MenuItem62: TMenuItem;
MenuItem63: TMenuItem;
MenuItem64: TMenuItem;
MenuItem65: TMenuItem;
MenuItem66: TMenuItem;
MenuItem67: TMenuItem;
MenuItem68: TMenuItem;
MenuItem69: TMenuItem;
MenuItem70: TMenuItem;
MenuItem71: TMenuItem;
MenuItem72: TMenuItem;
MenuItem73: TMenuItem;
MenuItem74: TMenuItem;
MenuItem75: TMenuItem;
MenuItem76: TMenuItem;
MenuItem77: TMenuItem;
MenuItem78: TMenuItem;
MenuItem79: TMenuItem;
MenuItem80: TMenuItem;
MenuItem81: TMenuItem;
MenuItem82: TMenuItem;
MenuItem83: TMenuItem;
MenuItem84: TMenuItem;
MenuItem85: TMenuItem;
MenuItem86: TMenuItem;
MenuItem87: TMenuItem;
MenuItem88: TMenuItem;
MenuItem89: TMenuItem;
MenuItem9: TMenuItem;
MenuItem90: TMenuItem;
MenuItem91: TMenuItem;
MenuItem95: TMenuItem;
MenuItem96: TMenuItem;
MenuItem97: TMenuItem;
MenuItem98: TMenuItem;
MenuItem99: TMenuItem;
MnuColumn: TMenuItem;
MenuItem93: TMenuItem;
MenuItem94: TMenuItem;
MnuAddWorksheet: TMenuItem;
MnuRow: TMenuItem;
MenuItem92: TMenuItem;
MnuView: TMenuItem;
MenuItem6: TMenuItem;
MenuItem7: TMenuItem;
MenuItem8: TMenuItem;
MnuFormat: TMenuItem;
MnuFile: TMenuItem;
MnuWorksheet: TMenuItem;
MnuAddSheet: TMenuItem;
MnuEdit: TMenuItem;
OpenDialog: TOpenDialog;
OpenDialog1: TOpenDialog;
CellEdit: TsCellEdit;
CellIndicator: TsCellIndicator;
AcFontBold: TsFontStyleAction;
AcFontItalic: TsFontStyleAction;
AcVertAlignTop: TsVertAlignmentAction;
AcVertAlignCenter: TsVertAlignmentAction;
AcVertAlignBottom: TsVertAlignmentAction;
AcHorAlignLeft: TsHorAlignmentAction;
AcHorAlignCenter: TsHorAlignmentAction;
AcHorAlignRight: TsHorAlignmentAction;
AcTextRotHor: TsTextRotationAction;
AcTextRot90CW: TsTextRotationAction;
AcTextRot90CCW: TsTextRotationAction;
AcTextRotStacked: TsTextRotationAction;
AcWordWrap: TsWordwrapAction;
AcNumFormatFixed: TsNumberFormatAction;
AcNumFormatFixedTh: TsNumberFormatAction;
AcNumFormatPercentage: TsNumberFormatAction;
AcNumFormatCurrency: TsNumberFormatAction;
AcNumFormatCurrencyRed: TsNumberFormatAction;
Panel2: TPanel;
PuPaste: TPopupMenu;
PuBorders: TPopupMenu;
PuTimeFormat: TPopupMenu;
PuDateFormat: TPopupMenu;
PuCurrencyFormat: TPopupMenu;
PuNumFormat: TPopupMenu;
AcNumFormatGeneral: TsNumberFormatAction;
AcNumFormatExp: TsNumberFormatAction;
AcNumFormatDateTime: TsNumberFormatAction;
AcNumFormatLongDate: TsNumberFormatAction;
AcNumFormatShortDate: TsNumberFormatAction;
AcNumFormatLongTime: TsNumberFormatAction;
AcNumFormatShortTime: TsNumberFormatAction;
AcNumFormatLongTimeAM: TsNumberFormatAction;
AcNumFormatShortTimeAM: TsNumberFormatAction;
AcNumFormatTimeInterval: TsNumberFormatAction;
AcIncDecimals: TsDecimalsAction;
AcDecDecimals: TsDecimalsAction;
AcCellFontDialog: TsFontDialogAction;
AcBackgroundColorDialog: TsBackgroundColorDialogAction;
AcCellBorderTop: TsCellBorderAction;
AcCellBorderBottom: TsCellBorderAction;
AcCellBorderLeft: TsCellBorderAction;
AcCellBorderRight: TsCellBorderAction;
AcCellBorderInnerHor: TsCellBorderAction;
AcCellBorderInnerVert: TsCellBorderAction;
AcCellBorderAllHor: TsCellBorderAction;
AcCellBorderBottomThick: TsCellBorderAction;
AcCellBorderBottomDbl: TsCellBorderAction;
AcCellBorderAllOuter: TsCellBorderAction;
AcCellBorderNone: TsNoCellBordersAction;
AcCellBorderAllOuterThick: TsCellBorderAction;
AcCellBorderTopBottomThick: TsCellBorderAction;
AcCellBorderTopBottomDbl: TsCellBorderAction;
AcCellBorderAll: TsCellBorderAction;
AcCellBorderAllVert: TsCellBorderAction;
AcCopyFormat: TsCopyAction;
FontColorCombobox: TsCellCombobox;
BackgroundColorCombobox: TsCellCombobox;
FontnameCombo: TsCellCombobox;
FontsizeCombo: TsCellCombobox;
AcMergeCells: TsMergeAction;
AcCopyToClipboard: TsCopyAction;
AcCutToClipboard: TsCopyAction;
AcPasteAllFromClipboard: TsCopyAction;
AcPasteValueFromClipboard: TsCopyAction;
AcPasteFormatFromClipboard: TsCopyAction;
AcPasteFormulaFromClipboard: TsCopyAction;
AcCommentNew: TsCellCommentAction;
AcCommentEdit: TsCellCommentAction;
AcCommentDelete: TsCellCommentAction;
AcHyperlinkNew: TsCellHyperlinkAction;
AcHyperlinkEdit: TsCellHyperlinkAction;
AcHyperlinkDelete: TsCellHyperlinkAction;
AcNumFormatFraction2: TsNumberFormatAction;
AcNumFormatFraction1: TsNumberFormatAction;
AcNumFormatFraction3: TsNumberFormatAction;
AcNumFormatDayMonth: TsNumberFormatAction;
AcNumFormatMonthYear: TsNumberFormatAction;
AcNumFormatCustom: TsNumberFormatAction;
AcCellBorderDiagUp: TsCellBorderAction;
AcCellBorderDiagDown: TsCellBorderAction;
AcNumFormatText: TsNumberFormatAction;
Splitter2: TSplitter;
Splitter3: TSplitter;
ToolBar2: TToolBar;
ToolBar3: TToolBar;
ToolButton1: TToolButton;
ToolButton11: TToolButton;
ToolButton12: TToolButton;
ToolButton13: TToolButton;
ToolButton14: TToolButton;
ToolButton15: TToolButton;
ToolButton16: TToolButton;
ToolButton17: TToolButton;
ToolButton18: TToolButton;
ToolButton19: TToolButton;
AcFontUnderline: TsFontStyleAction;
AcFontStrikeout: TsFontStyleAction;
InspectorSplitter: TSplitter;
Inspector: TsSpreadsheetInspector;
InspectorTabControl: TTabControl;
AcAddWorksheet: TsWorksheetAddAction;
AcDeleteWorksheet: TsWorksheetDeleteAction;
acRenameWorksheet: TsWorksheetRenameAction;
ToolBar1: TToolBar;
ToolButton10: TToolButton;
ToolButton2: TToolButton;
ToolButton20: TToolButton;
ToolButton21: TToolButton;
ToolButton22: TToolButton;
ToolButton23: TToolButton;
ToolButton24: TToolButton;
ToolButton25: TToolButton;
ToolButton26: TToolButton;
ToolButton27: TToolButton;
ToolButton28: TToolButton;
ToolButton29: TToolButton;
ToolButton3: TToolButton;
ToolButton30: TToolButton;
ToolButton31: TToolButton;
TbBorders: TToolButton;
ToolButton32: TToolButton;
ToolButton33: TToolButton;
ToolButton34: TToolButton;
ToolButton35: TToolButton;
ToolButton36: TToolButton;
ToolButton37: TToolButton;
ToolButton38: TToolButton;
ToolButton39: TToolButton;
TbCommentAdd: TToolButton;
ToolButton4: TToolButton;
ToolButton40: TToolButton;
ToolButton41: TToolButton;
ToolButton42: TToolButton;
ToolButton43: TToolButton;
ToolButton44: TToolButton;
ToolButton45: TToolButton;
ToolButton46: TToolButton;
ToolButton47: TToolButton;
ToolButton48: TToolButton;
ToolButton49: TToolButton;
ToolButton5: TToolButton;
TbCommentDelete: TToolButton;
TbCommentEdit: TToolButton;
ToolButton50: TToolButton;
ToolButton51: TToolButton;
ToolButton52: TToolButton;
ToolButton53: TToolButton;
ToolButton54: TToolButton;
ToolButton55: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
WorkbookSource: TsWorkbookSource;
WorkbookTabControl: TsWorkbookTabControl;
WorksheetGrid: TsWorksheetGrid;
procedure AcColAddExecute(Sender: TObject);
procedure AcColDeleteExecute(Sender: TObject);
procedure AcFileOpenAccept(Sender: TObject);
procedure AcFileSaveAsAccept(Sender: TObject);
procedure AcFileSaveAsBeforeExecute(Sender: TObject);
procedure AcFrozenColsExecute(Sender: TObject);
procedure AcFrozenColsUpdate(Sender: TObject);
procedure AcFrozenRowsExecute(Sender: TObject);
procedure AcFrozenRowsUpdate(Sender: TObject);
procedure AcNumFormatCustomGetNumberFormatString(Sender: TObject;
AWorkbook: TsWorkbook; var ANumFormatStr: String);
procedure AcRowAddExecute(Sender: TObject);
procedure AcRowDeleteExecute(Sender: TObject);
procedure AcWorksheetRTLExecute(Sender: TObject);
procedure AcWorksheetRTLUpdate(Sender: TObject);
procedure AcSearchExecute(Sender: TObject);
procedure AcSettingsCSVParamsExecute(Sender: TObject);
procedure AcSettingsCurrencyExecute(Sender: TObject);
procedure AcSettingsFormatSettingsExecute(Sender: TObject);
procedure AcShowGridLinesExecute(Sender: TObject);
procedure AcShowGridLinesUpdate(Sender: TObject);
procedure AcShowHeadersExecute(Sender: TObject);
procedure AcShowHeadersUpdate(Sender: TObject);
procedure AcViewInspectorExecute(Sender: TObject);
procedure EditCut1Execute(Sender: TObject);
procedure ColorComboboxAddColors(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure HyperlinkHandler(Sender: TObject; ACaption: String;
var AHyperlink: TsHyperlink);
procedure InspectorTabControlChange(Sender: TObject);
procedure WorksheetGridClickHyperlink(Sender: TObject;
const AHyperlink: TsHyperlink);
private
{ private declarations }
FOpenFormats: TsSpreadFormatIDArray;
FSaveFormats: TsSpreadFormatIDArray;
procedure SearchClose(Sender: TObject; var CloseAction: TCloseAction);
procedure SearchFound(Sender: TObject; AFound: Boolean;
AWorksheet: TsWorksheet; ARow, ACol: Cardinal);
procedure UpdateCaption;
protected
procedure ReadFromIni;
procedure WriteToIni;
public
{ public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.lfm}
uses
LCLIntf, inifiles, uriparser, Grids,
fpsUtils, fpsCSV,
sCSVParamsForm, sCurrencyForm, sFormatSettingsForm, sSortParamsForm,
sHyperlinkForm, sNumFormatForm, sSearchForm;
var
SEARCH_DLG_POS: TPoint = (X: -1; Y: -1);
function CreateIni: TCustomIniFile;
begin
Result := TMemIniFile.Create(GetAppConfigFile(false));
end;
{ TMainForm }
{ Adds a column before the active cell }
procedure TMainForm.AcColAddExecute(Sender: TObject);
begin
WorksheetGrid.InsertCol(WorksheetGrid.Col);
WorksheetGrid.Col := WorksheetGrid.Col + 1;
end;
{ Deletes the column with the active cell }
procedure TMainForm.AcColDeleteExecute(Sender: TObject);
var
c: Integer;
begin
c := WorksheetGrid.Col;
WorksheetGrid.DeleteCol(c);
WorksheetGrid.Col := c;
end;
{ Loads the spreadsheet file selected by the AcFileOpen action }
procedure TMainForm.AcFileOpenAccept(Sender: TObject);
var
crs: TCursor;
begin
crs := Screen.Cursor;
Screen.Cursor := crHourglass;
try
WorkbookSource.AutodetectFormat := false;
case AcFileOpen.Dialog.FilterIndex of
1: WorkbookSource.AutoDetectFormat := true; // All spreadsheet files
2: WorkbookSource.AutoDetectFormat := true; // All Excel files
else WorkbookSource.FileFormatID := FOpenFormats[AcFileOpen.Dialog.FilterIndex - 3];
// -3 because FilterIndex is 1-based and there are 2 add'l items at the top.
end;
WorkbookSource.FileName := UTF8ToAnsi(AcFileOpen.Dialog.FileName); // this loads the file
UpdateCaption;
finally
Screen.Cursor := crs;
end;
end;
{ Saves the spreadsheet to the file selected by the AcFileSaveAs action }
procedure TMainForm.AcFileSaveAsAccept(Sender: TObject);
var
fmt: TsSpreadFormatID;
begin
Screen.Cursor := crHourglass;
try
fmt := FSaveFormats[AcFileSaveAs.Dialog.FilterIndex-1];
WorkbookSource.SaveToSpreadsheetFile(UTF8ToAnsi(AcFileSaveAs.Dialog.FileName), fmt);
UpdateCaption;
finally
Screen.Cursor := crDefault;
end;
end;
procedure TMainForm.AcFileSaveAsBeforeExecute(Sender: TObject);
begin
if WorkbookSource.FileName = '' then
exit;
AcFileSaveAs.Dialog.InitialDir := ExtractFileDir(WorkbookSource.FileName);
AcFileSaveAs.Dialog.FileName := ExtractFileName(WorkbookSource.FileName);
end;
procedure TMainForm.AcFrozenColsExecute(Sender: TObject);
begin
WorksheetGrid.FrozenCols := WorksheetGrid.GetWorksheetCol(WorksheetGrid.Col);
end;
procedure TMainForm.AcFrozenColsUpdate(Sender: TObject);
begin
AcFrozenCols.Checked := WorksheetGrid.FrozenCols > 0;
end;
procedure TMainForm.AcFrozenRowsExecute(Sender: TObject);
begin
WorksheetGrid.FrozenRows := WorksheetGrid.GetWorksheetRow(WorksheetGrid.Row);
end;
procedure TMainForm.AcFrozenRowsUpdate(Sender: TObject);
begin
AcFrozenRows.Checked := WorksheetGrid.FrozenRows > 0;
end;
procedure TMainForm.AcNumFormatCustomGetNumberFormatString(Sender: TObject;
AWorkbook: TsWorkbook; var ANumFormatStr: String);
var
F: TNumFormatForm;
sample: Double;
begin
Unused(AWorkbook);
F := TNumFormatForm.Create(nil);
try
F.Position := poMainFormCenter;
with WorkbookSource.Worksheet do
sample := ReadAsNumber(ActiveCellRow, ActiveCellCol);
F.SetData(ANumFormatStr, WorkbookSource.Workbook, sample);
if F.ShowModal = mrOK then
ANumFormatStr := F.NumFormatStr;
finally
F.Free;
end;
end;
{ Adds a row before the active cell }
procedure TMainForm.AcRowAddExecute(Sender: TObject);
begin
WorksheetGrid.InsertRow(WorksheetGrid.Row);
WorksheetGrid.Row := WorksheetGrid.Row + 1;
end;
{ Deletes the row with the active cell }
procedure TMainForm.AcRowDeleteExecute(Sender: TObject);
var
r: Integer;
begin
r := WorksheetGrid.Row;
WorksheetGrid.DeleteRow(r);
WorksheetGrid.Row := r;
end;
procedure TMainForm.AcWorksheetRTLExecute(Sender: TObject);
begin
if AcWorksheetRTL.Checked then
begin
if WorksheetGrid.IsRightToLeft then
WorksheetGrid.Worksheet.BiDiMode := bdLTR else
WorksheetGrid.Worksheet.BiDiMode := bdRTL;
end else
WorksheetGrid.Worksheet.BiDiMode := bdDefault;
end;
procedure TMainForm.AcWorksheetRTLUpdate(Sender: TObject);
begin
AcWorksheetRTL.Checked := WorksheetGrid.Worksheet.BiDiMode <> bdDefault;
end;
procedure TMainForm.AcSearchExecute(Sender: TObject);
begin
if SearchForm = nil then
SearchForm := TSearchForm.Create(self)
else
if not SearchForm.Showing then
begin
SearchForm.Position := poDesigned;
SearchForm.Left := SEARCH_DLG_POS.X;
SearchForm.Top := SEARCH_DLG_POS.Y;
end else
SearchForm.BringToFront;
SearchForm.OnFound := @SearchFound;
SearchForm.OnClose := @SearchClose;
SearchForm.SearchParams := DefaultSearchParams;
SearchForm.ReplaceParams := DefaultReplaceParams;
SearchForm.Execute(WorkbookSource.Workbook);
end;
procedure TMainForm.AcSettingsCSVParamsExecute(Sender: TObject);
var
F: TCSVParamsForm;
begin
F := TCSVParamsForm.Create(nil);
try
F.SetParams(fpscsv.CSVParams);
if F.ShowModal = mrOK then
F.GetParams(fpscsv.CSVParams);
finally
F.Free;
end;
end;
procedure TMainForm.AcSettingsCurrencyExecute(Sender: TObject);
var
F: TCurrencyForm;
begin
F := TCurrencyForm.Create(nil);
try
F.ShowModal;
finally
F.Free;
end;
end;
procedure TMainForm.AcSettingsFormatSettingsExecute(Sender: TObject);
var
F: TFormatSettingsForm;
begin
if WorksheetGrid.Workbook = nil then
exit;
F := TFormatSettingsForm.Create(nil);
try
F.FormatSettings := WorksheetGrid.Workbook.FormatSettings;
if F.ShowModal = mrOK then
begin
WorksheetGrid.Workbook.FormatSettings := F.FormatSettings;
WorksheetGrid.Invalidate;
end;
finally
F.Free;
end;
end;
procedure TMainForm.AcShowGridLinesExecute(Sender: TObject);
begin
WorksheetGrid.ShowGridLines := AcShowGridLines.Checked;
end;
procedure TMainForm.AcShowGridLinesUpdate(Sender: TObject);
begin
AcShowGridLines.Checked := WorksheetGrid.ShowGridLines;
end;
procedure TMainForm.AcShowHeadersExecute(Sender: TObject);
begin
WorksheetGrid.ShowHeaders := AcShowHeaders.Checked;
end;
procedure TMainForm.AcShowHeadersUpdate(Sender: TObject);
begin
AcShowHeaders.Checked := WorksheetGrid.ShowHeaders;
end;
{ Toggles the spreadsheet inspector on and off }
procedure TMainForm.AcViewInspectorExecute(Sender: TObject);
begin
InspectorTabControl.Visible := AcViewInspector.Checked;
InspectorSplitter.Visible := AcViewInspector.Checked;
InspectorSplitter.Left := 0; // Make sure that the splitter is always at the left of the inspector
end;
procedure TMainForm.ColorComboboxAddColors(Sender: TObject);
begin
with TsCellCombobox(Sender) do begin
// These are the Excel-8 palette colors, a bit rearranged and without the
// duplicates.
AddColor($000000, 'black');
AddColor($333333, 'gray 80%');
AddColor($808080, 'gray 50%');
AddColor($969696, 'gray 40%');
AddColor($C0C0C0, 'silver');
AddColor($FFFFFF, 'white');
AddColor($FF0000, 'red');
AddColor($00FF00, 'green');
AddColor($0000FF, 'blue');
AddColor($FFFF00, 'yellow');
AddColor($FF00FF, 'magenta');
AddColor($00FFFF, 'cyan');
AddColor($800000, 'dark red');
AddColor($008000, 'dark green');
AddColor($000080, 'dark blue');
AddColor($808000, 'olive');
AddColor($800080, 'purple');
AddColor($008080, 'teal');
AddColor($9999FF, 'periwinkle');
AddColor($993366, 'plum');
AddColor($FFFFCC, 'ivory');
AddColor($CCFFFF, 'light turquoise');
AddColor($660066, 'dark purple');
AddColor($FF8080, 'coral');
AddColor($0066CC, 'ocean blue');
AddColor($CCCCFF, 'ice blue');
AddColor($00CCFF, 'sky blue');
AddColor($CCFFCC, 'light green');
AddColor($FFFF99, 'light yellow');
AddColor($99CCFF, 'pale blue');
AddColor($FF99CC, 'rose');
AddColor($CC99FF, 'lavander');
AddColor($FFCC99, 'tan');
AddColor($3366FF, 'light blue');
AddColor($33CCCC, 'aqua');
AddColor($99CC00, 'lime');
AddColor($FFCC00, 'gold');
AddColor($FF9900, 'light orange');
AddColor($FF6600, 'orange');
AddColor($666699, 'blue gray');
AddColor($003366, 'dark teal');
AddColor($339966, 'sea green');
AddColor($003300, 'very dark green');
AddColor($333300, 'olive green');
AddColor($993300, 'brown');
AddColor($333399, 'indigo');
end;
end;
procedure TMainForm.EditCut1Execute(Sender: TObject);
begin
//
end;
procedure TMainForm.FormCreate(Sender: TObject);
var
priorityFormats: Array[0..8] of TsSpreadFormatID;
begin
priorityFormats[0] := ord(sfOOXML);
priorityFormats[1] := ord(sfExcel8);
priorityFormats[2] := ord(sfExcel5);
priorityFormats[3] := ord(sfExcel2);
priorityFormats[4] := ord(sfExcelXML);
priorityFormats[5] := ord(sfOpenDocument);
priorityFormats[6] := ord(sfCSV);
priorityFormats[7] := sfidSYLK;
priorityFormats[8] := ord(sfHTML);
AcFileOpen.Dialog.Filter := GetFileFormatFilter('|', ';', faRead, priorityFormats, true, true);
FOpenFormats := GetSpreadFormats(faRead, priorityFormats);
AcFileSaveAs.Dialog.Filter := GetFileFormatFilter('|', ';', faWrite, priorityFormats);
FSaveFormats := GetSpreadFormats(faWrite, priorityFormats);
{$IFDEF WINDOWS}
if Win32MajorVersion >= 10 then
WorksheetGrid.TitleStyle := tsLazarus;
{$ENDIF}
end;
{ Event handler for hyperlinks: it only has to provide the hyperlink data
which are applied to the active cell by the TsCellHyperlinkAction.
Is called by the "new hyperlink" and "edit hyperlink" actions.
Here we open the HyperlinkForm which is similar to the one used by
Open/LibreOffice.
Caption .... Caption of the form in which the hyperlink can be specified
Hyperlink .. Data record (target, tooltip) for/from the the hyperlink form. }
procedure TMainForm.HyperlinkHandler(Sender: TObject; ACaption: String;
var AHyperlink: TsHyperlink);
begin
if HyperlinkForm = nil then
HyperlinkForm := THyperlinkForm.Create(self);
HyperlinkForm.Caption := ACaption;
HyperlinkForm.SetHyperlink(WorkbookSource.Worksheet, AHyperlink);
if HyperlinkForm.ShowModal = mrOK then
HyperlinkForm.GetHyperlink(AHyperlink);
end;
{ Event handler to synchronize the mode of the spreadsheet inspector with the
selected tab of the TabControl }
procedure TMainForm.InspectorTabControlChange(Sender: TObject);
begin
Inspector.Mode := TsInspectorMode(InspectorTabControl.TabIndex);
end;
procedure TMainForm.ReadFromIni;
var
ini: TCustomIniFile;
begin
ini := CreateIni;
try
//...
finally
ini.Free;
end;
end;
procedure TMainForm.SearchClose(Sender: TObject; var CloseAction: TCloseAction);
begin
Unused(CloseAction);
DefaultSearchParams := TSearchForm(Sender).SearchParams;
DefaultReplaceParams := TSearchForm(Sender).ReplaceParams;
SEARCH_DLG_POS.X := SearchForm.Left;
SEARCH_DLG_POS.Y := SearchForm.Top;
end;
procedure TMainForm.SearchFound(Sender: TObject; AFound: Boolean;
AWorksheet: TsWorksheet; ARow, ACol: Cardinal);
begin
Unused(AWorksheet, ARow, ACol);
if AFound then
begin
//
end
else
begin
DefaultSearchParams := TSearchForm(Sender).SearchParams;
MessageDlg(
Format('The search text "%s" could not be found.', [DefaultSearchParams.SearchText]),
mtInformation,
[mbOK], 0
);
end;
end;
procedure TMainForm.UpdateCaption;
begin
if WorkbookSource = nil then
Caption := 'demo_ctrls'
else
Caption := Format('demo_ctrls - "%s" [%s]', [
AnsiToUTF8(WorkbookSource.Filename),
GetSpreadTechnicalName(WorkbookSource.Workbook.FileFormatID)
]);
end;
procedure TMainForm.WriteToIni;
var
ini: TCustomIniFile;
begin
ini := CreateIni;
try
// ...
finally
ini.Free;
end;
end;
{ Event handler if an external hyperlink in a cell is activated. Usually the
linked documents/web sites etc. are opened. }
procedure TMainForm.WorksheetGridClickHyperlink(Sender: TObject;
const AHyperlink: TsHyperlink);
var
u: TUri;
begin
u := ParseURI(AHyperlink.Target);
case Lowercase(u.Protocol) of
'http', 'https', 'ftp', 'mailto', 'file':
OpenUrl(AHyperlink.Target);
else
ShowMessage('Hyperlink ' + AHyperlink.Target + ' clicked');
end;
end;
end.