diff --git a/components/fpspreadsheet/examples/visual/fpsgrid/mainform.lfm b/components/fpspreadsheet/examples/visual/fpsgrid/mainform.lfm index 932650188..70bbacf97 100644 --- a/components/fpspreadsheet/examples/visual/fpsgrid/mainform.lfm +++ b/components/fpspreadsheet/examples/visual/fpsgrid/mainform.lfm @@ -6,8 +6,9 @@ object Form1: TForm1 Caption = 'fpsGrid' ClientHeight = 649 ClientWidth = 894 + OnCreate = FormCreate ShowHint = True - LCLVersion = '1.5' + LCLVersion = '1.7' object Panel1: TPanel Left = 0 Height = 41 @@ -76,16 +77,19 @@ object Form1: TForm1 Height = 572 Top = 36 Width = 894 + AutoCalc = True FrozenCols = 0 FrozenRows = 0 ReadFormulas = False WorkbookSource = WorksheetGrid.internal Align = alClient AutoAdvance = aaDown - ColCount = 27 + ColCount = 10 + DefaultColWidth = 64 + DefaultRowHeight = 22 MouseWheelOption = mwGrid - Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSizing, goColSizing, goEditing, goThumbTracking, goDblClickAutoSize, goSmoothScroll, goHeaderHotTracking, goHeaderPushedLook, goFixedColSizing] - RowCount = 101 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSizing, goColSizing, goEditing, goThumbTracking, goDblClickAutoSize, goSmoothScroll, goHeaderHotTracking, goHeaderPushedLook, goFixedColSizing, goCellHints] + RowCount = 10 TabOrder = 1 TitleStyle = tsNative end @@ -124,11 +128,6 @@ object Form1: TForm1 Text = 'Sheet 1' end end - object sWorkbookSource1: TsWorkbookSource - AutoDetectFormat = False - FileFormat = sfExcel8 - Options = [] - end object OpenDialog: TOpenDialog DefaultExt = '.xls' Filter = 'Excel spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffice/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (pipes) (.wikitable_pipes)|.wikitable_pipes|All files (*.*)|*.*' diff --git a/components/fpspreadsheet/examples/visual/fpsgrid/mainform.pas b/components/fpspreadsheet/examples/visual/fpsgrid/mainform.pas index 7ef0e74be..f2b550e33 100644 --- a/components/fpspreadsheet/examples/visual/fpsgrid/mainform.pas +++ b/components/fpspreadsheet/examples/visual/fpsgrid/mainform.pas @@ -7,7 +7,7 @@ interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Menus, ExtCtrls, ActnList, Spin, Buttons, ButtonPanel, - fpspreadsheetgrid, fpspreadsheet, fpsallformats, fpspreadsheetctrls; + fpspreadsheetgrid, fpsallformats; type @@ -26,12 +26,12 @@ type Panel1: TPanel; Panel2: TPanel; SaveDialog: TSaveDialog; - sWorkbookSource1: TsWorkbookSource; WorksheetGrid: TsWorksheetGrid; procedure BtnNewClick(Sender: TObject); procedure BtnOpenClick(Sender: TObject); procedure BtnSaveClick(Sender: TObject); procedure BtnEnterTextClick(Sender: TObject); + procedure FormCreate(Sender: TObject); procedure SheetsComboSelect(Sender: TObject); private { private declarations } @@ -46,7 +46,7 @@ var implementation uses - fpcanvas, fpsutils, fpsRegFileFormats; + fpcanvas, fpstypes, fpsutils, fpsRegFileFormats, fpspreadsheet; { TForm1 } @@ -147,6 +147,60 @@ begin end; end; +procedure TForm1.FormCreate(Sender: TObject); +const + THICK_BORDER: TsCellBorderStyle = (LineStyle: lsThick; Color: clNavy); + MEDIUM_BORDER: TsCellBorderSTyle = (LineStyle: lsMedium; Color: clRed); + DOTTED_BORDER: TsCellBorderSTyle = (LineStyle: lsDotted; Color: clRed); +begin + // Add some cells and formats + WorksheetGrid.ColWidths[1] := 180; + WorksheetGrid.ColWidths[2] := 100; + + WorksheetGrid.Cells[1,1] := 'This is a demo'; + WorksheetGrid.MergeCells(1,1, 2,1); + WorksheetGrid.HorAlignment[1,1] := haCenter; + WorksheetGrid.CellBorders[1,1, 2,1] := [cbSouth]; + WorksheetGrid.CellBorderStyles[1,1, 2,1, cbSouth] := THICK_BORDER; + WorksheetGrid.BackgroundColors[1,1, 2,1] := RGBToColor(220, 220, 220); + WorksheetGrid.CellFontColor[1,1] := clNavy; + WorksheetGrid.CellFontStyle[1,1] := [fssBold]; + + WorksheetGrid.Cells[1,2] := 'Number:'; + WorksheetGrid.HorAlignment[1,2] := haRight; + WorksheetGrid.CellFontStyle[1,2] := [fssItalic]; + WorksheetGrid.CellFontColor[1,2] := clNavy; + WorksheetGrid.Cells[2,2] := 1.234; + + WorksheetGrid.Cells[1,3] := 'Date:'; + WorksheetGrid.HorAlignment[1,3] := haRight; + WorksheetGrid.CellFontStyle[1,3] := [fssItalic]; + WorksheetGrid.CellFontColor[1,3] := clNavy; + WorksheetGrid.NumberFormat[2,3] := 'mmm dd, yyyy'; + WorksheetGrid.Cells[2,3] := date; + + WorksheetGrid.Cells[1,4] := 'Time:'; + WorksheetGrid.HorAlignment[1,4] := haRight; + WorksheetGrid.CellFontStyle[1,4] := [fssItalic]; + WorksheetGrid.CellFontColor[1,4] := clNavy; + WorksheetGrid.NumberFormat[2,4] := 'hh:nn'; + WorksheetGrid.Cells[2,4] := now(); + + WorksheetGrid.Cells[1,5] := 'Rich text:'; + WorksheetGrid.HorAlignment[1,5] := haRight; + WorksheetGrid.CellFontStyle[1,5] := [fssItalic]; + WorksheetGrid.CellFontColor[1,5] := clNavy; + WorksheetGrid.Cells[2,5] := '100 cm2'; + + WorksheetGrid.Cells[1,6] := 'Formula:'; + WorksheetGrid.HorAlignment[1,6] := haRight; + WorksheetGrid.CellFontStyle[1,6] := [fssItalic]; + WorksheetGrid.CellFontColor[1,6] := clNavy; + WorksheetGrid.Cells[2,6] := '=B2^2*PI()'; + WorksheetGrid.CellComment[2,6] := 'Area of the circle with radius given in cell B2'; + WorksheetGrid.NumberFormat[2,6] := '0.000'; +end; + procedure TForm1.BtnEnterTextClick(Sender: TObject); begin WorksheetGrid.Worksheet.WriteText(109, 27, EdNewCellText.Text); diff --git a/components/fpspreadsheet/fpspreadsheetgrid.pas b/components/fpspreadsheet/fpspreadsheetgrid.pas index cd303cbb6..f610d697b 100644 --- a/components/fpspreadsheet/fpspreadsheetgrid.pas +++ b/components/fpspreadsheet/fpspreadsheetgrid.pas @@ -50,8 +50,8 @@ type // FOwnsWorkbook: Boolean; // FOwnedWorksheet: TsWorksheet; FHeaderCount: Integer; - FInitColCount: Integer; - FInitRowCount: Integer; +// FInitColCount: Integer; +// FInitRowCount: Integer; FFrozenCols: Integer; FFrozenRows: Integer; FEditText: String; @@ -934,14 +934,16 @@ end; -------------------------------------------------------------------------------} constructor TsCustomWorksheetGrid.Create(AOwner: TComponent); begin - FInternalWorkbookSource := TsWorkbookSource.Create(self); //AOwner); + FInternalWorkbookSource := TsWorkbookSource.Create(self); FInternalWorkbookSource.Name := 'internal'; inherited Create(AOwner); AutoAdvance := aaDown; ExtendedSelect := true; FHeaderCount := 1; - FInitColCount := DEFAULT_COL_COUNT; - FInitRowCount := DEFAULT_ROW_COUNT; + ColCount := DEFAULT_COL_COUNT + FHeaderCount; + RowCount := DEFAULT_ROW_COUNT + FHeaderCount; +// FInitColCount := DEFAULT_COL_COUNT; +// FInitRowCount := DEFAULT_ROW_COUNT; FCellFont := TFont.Create; FHyperlinkTimer := TTimer.Create(self); FHyperlinkTimer.Interval := HYPERLINK_TIMER_INTERVAL; @@ -1476,7 +1478,8 @@ end; procedure TsCustomWorksheetGrid.DoOnResize; begin if (csDesigning in ComponentState) and (Worksheet = nil) then - NewWorkbook(FInitColCount, FInitRowCount); + NewWorkbook(ColCount, RowCount); +// NewWorkbook(FInitColCount, FInitRowCount); inherited; end; @@ -3335,9 +3338,11 @@ begin if AGridCol < FHeaderCount then exit; - if LongInt(Worksheet.GetLastColIndex) + 1 + FHeaderCount >= FInitColCount then +// if LongInt(Worksheet.GetLastColIndex) + 1 + FHeaderCount >= ColCount then //FInitColCount then + if GetGridCol(Worksheet.GetLastColIndex + 1) >= ColCount then ColCount := ColCount + 1; - c := AGridCol - FHeaderCount; + c := GetWorksheetCol(AGridCol); +// c := AGridCol - FHeaderCount; Worksheet.InsertCol(c); UpdateColWidths(AGridCol); @@ -3353,9 +3358,11 @@ begin if AGridRow < FHeaderCount then exit; - if LongInt(Worksheet.GetlastRowIndex) + 1 + FHeaderCount >= FInitRowCount then +// if LongInt(Worksheet.GetlastRowIndex) + 1 + FHeaderCount >= FInitRowCount then + if GetGridRow(Worksheet.GetLastRowIndex + 1) >= RowCount then RowCount := RowCount + 1; - r := AGridRow - FHeaderCount; + r := GetWorksheetRow(AGridRow); +// r := AGridRow - FHeaderCount; Worksheet.InsertRow(r); UpdateRowHeights(AGridRow); @@ -3620,7 +3627,6 @@ begin inherited; if FWorkbookSource = nil then Setup; -// NewWorkbook(FInitColCount, FInitRowCount); end; (* {@@ ---------------------------------------------------------------------------- @@ -3701,24 +3707,6 @@ procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string; AWorksheetIndex: Integer); begin GetWorkbookSource.LoadFromSpreadsheetFile(AFileName, AWorksheetIndex); - { - if FOwnsWorkbook then - FreeAndNil(FOwnedWorkbook); - - if FWorkbookSource <> nil then - FWorkbookSource.LoadFromSpreadsheetFile(AFileName, AWorksheetIndex) - else - begin - BeginUpdate; - try - CreateNewWorkbook; - Workbook.ReadFromFile(AFilename); - LoadFromWorksheet(Workbook.GetWorksheetByIndex(AWorksheetIndex)); - finally - EndUpdate; - end; - end; - } end; {@@ ---------------------------------------------------------------------------- @@ -3968,8 +3956,10 @@ end; procedure TsCustomWorksheetGrid.NewWorkbook(AColCount, ARowCount: Integer); begin GetWorkbookSource.CreateNewWorkbook; - FInitColCount := AColCount; - FInitRowCount := ARowCount; + ColCount := AColCount + FHeaderCount; + RowCount := ARowCount + FHeaderCount; +// FInitColCount := AColCount; +// FInitRowCount := ARowCount; Setup; { @@ -4129,8 +4119,8 @@ begin if (Worksheet = nil) or (Worksheet.GetCellCount = 0) then begin if ShowHeaders then begin - ColCount := FInitColCount + 1; //2; - RowCount := FInitRowCount + 1; //2; +// ColCount := FInitColCount + 1; //2; +// RowCount := FInitRowCount + 1; //2; FixedCols := 1; FixedRows := 1; ColWidths[0] := GetDefaultHeaderColWidth; @@ -4138,15 +4128,17 @@ begin end else begin FixedCols := 0; FixedRows := 0; - ColCount := FInitColCount; //0; - RowCount := FInitRowCount; //0; +// ColCount := FInitColCount; //0; +// RowCount := FInitRowCount; //0; end; end else if Worksheet <> nil then begin Convert_sFont_to_Font(Workbook.GetDefaultFont, Font); Canvas.Font.Assign(Font); - ColCount := Max(integer(Worksheet.GetLastColIndex) + 1 + FHeaderCount, FInitColCount); - RowCount := Max(integer(Worksheet.GetLastRowIndex) + 1 + FHeaderCount, FInitRowCount); + ColCount := Max(GetGridCol(Worksheet.GetLastColIndex) + 1, ColCount); + RowCount := Max(GetGridRow(Worksheet.GetLastRowIndex) + 1, RowCount); + //ColCount := Max(integer(Worksheet.GetLastColIndex) + 1 + FHeaderCount, FInitColCount); + //RowCount := Max(integer(Worksheet.GetLastRowIndex) + 1 + FHeaderCount, FInitRowCount); FixedCols := FFrozenCols + FHeaderCount; FixedRows := FFrozenRows + FHeaderCount; if ShowHeaders then begin