fpspreadsheet: Massive reconstruction: remove formatting attributes of TCell record and collect in TCellFormatList. TCell only has index into this list. Introduce record helpers to keep the old syntax. Reduction of memory consumption per cell by 50%.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3894 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2015-01-23 21:54:23 +00:00
parent 7793cf2063
commit 133bf09eb4
43 changed files with 3491 additions and 1437 deletions

View File

@@ -42,6 +42,7 @@
<Unit0>
<Filename Value="demo_write_formatting.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="demo_write_formatting"/>
</Unit0>
</Units>
</ProjectOptions>

View File

@@ -12,7 +12,8 @@ program demo_write_formatting;
{$mode delphi}{$H+}
uses
Classes, SysUtils, fpsTypes, fpspreadsheet, xlsbiff8, fpsopendocument;
Classes, SysUtils,
fpsTypes, fpspreadsheet, xlsbiff8, fpsopendocument, fpscell;
var
MyWorkbook: TsWorkbook;
@@ -30,83 +31,67 @@ begin
MyWorksheet.WriteUTF8Text(1, 1, '[]'); // B2
MyCell := MyWorksheet.GetCell(1, 1);
MyCell^.Border := [];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(1, 3, '[N]');// D2
MyCell := MyWorksheet.GetCell(1, 3);
MyCell^.Border := [cbNorth];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(1, 5, '[W]');// F2
MyCell := MyWorksheet.GetCell(1, 5);
MyCell^.Border := [cbWest];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(1, 7, '[E]');// H2
MyCell := MyWorksheet.GetCell(1, 7);
MyCell^.Border := [cbEast];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(1, 9, '[S]');// J2
MyCell := MyWorksheet.GetCell(1, 9);
MyCell^.Border := [cbSouth];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(3, 1, '[N,W]');// B4
MyCell := MyWorksheet.GetCell(3, 1);
MyCell^.Border := [cbNorth, cbWest];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(3, 3, '[N,E]');// D4
MyCell := MyWorksheet.GetCell(3, 3);
MyCell^.Border := [cbNorth, cbEast];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(3, 5, '[N,S]');// F4
MyCell := MyWorksheet.GetCell(3, 5);
MyCell^.Border := [cbNorth, cbSouth];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(3, 7, '[W,E]');// H4
MyCell := MyWorksheet.GetCell(3, 7);
MyCell^.Border := [cbWest, cbEast];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(3, 9, '[W,S]');// J4
MyCell := MyWorksheet.GetCell(3, 9);
MyCell^.Border := [cbWest, cbSouth];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(3, 11, '[E,S]');// L4
MyCell := MyWorksheet.GetCell(3, 11);
MyCell^.Border := [cbEast, cbSouth];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(5, 1, '[N,W,E]');// B6
MyCell := MyWorksheet.GetCell(5, 1);
MyCell^.Border := [cbNorth, cbWest, cbEast];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(5, 3, '[N,W,S]');// D6
MyCell := MyWorksheet.GetCell(5, 3);
MyCell^.Border := [cbNorth, cbWest, cbSouth];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(5, 5, '[N,E,S]');// F6
MyCell := MyWorksheet.GetCell(5, 5);
MyCell^.Border := [cbNorth, cbEast, cbSouth];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(5, 7, '[W,E,S]');// H6
MyCell := MyWorksheet.GetCell(5, 7);
MyCell^.Border := [cbWest, cbEast, cbSouth];
MyCell^.UsedFormattingFields := [uffBorder];
MyWorksheet.WriteUTF8Text(5, 9, '[N,W,E,S]');// J6
MyCell := MyWorksheet.GetCell(5, 9);
MyCell^.Border := [cbNorth, cbWest, cbEast, cbSouth];
MyCell^.BackgroundColor := scGreen;
MyCell^.UsedFormattingFields := [uffBorder, uffBold, uffBackgroundColor];
end;
procedure WriteSecondWorksheet();
@@ -121,13 +106,11 @@ begin
MyCell := MyWorksheet.GetCell(1, 1);
MyCell^.Border := [cbNorth, cbWest, cbSouth];
MyCell^.BackgroundColor := scGrey20pct;
MyCell^.UsedFormattingFields := [uffBorder, uffBackgroundColor, uffBold];
MyWorksheet.WriteUTF8Text(1, 2, ' ');
MyCell := MyWorksheet.GetCell(1, 2);
MyCell^.Border := [cbNorth, cbEast, cbSouth];
MyCell^.BackgroundColor := scGrey20pct;
MyCell^.UsedFormattingFields := [uffBorder, uffBackgroundColor];
// Line 2
@@ -135,13 +118,11 @@ begin
MyCell := MyWorksheet.GetCell(2, 1);
MyCell^.Border := [cbWest];
MyCell^.BackgroundColor := scGrey10pct;
MyCell^.UsedFormattingFields := [uffBorder, uffBackgroundColor];
MyWorksheet.WriteUTF8Text(2, 2, 'R$ 20');
MyCell := MyWorksheet.GetCell(2, 2);
MyCell^.Border := [cbEast];
MyCell^.BackgroundColor := scGrey10pct;
MyCell^.UsedFormattingFields := [uffBorder, uffBackgroundColor];
// Line 3
@@ -149,13 +130,11 @@ begin
MyCell := MyWorksheet.GetCell(3, 1);
MyCell^.Border := [cbWest, cbSouth];
MyCell^.BackgroundColor := scGrey10pct;
MyCell^.UsedFormattingFields := [uffBorder, uffBackgroundColor];
MyWorksheet.WriteUTF8Text(3, 2, 'R$ 20');
MyCell := MyWorksheet.GetCell(3, 2);
MyCell^.Border := [cbEast, cbSouth];
MyCell^.BackgroundColor := scGrey10pct;
MyCell^.UsedFormattingFields := [uffBorder, uffBackgroundColor];
end;
const
@@ -171,7 +150,6 @@ begin
MyWorkbook := TsWorkbook.Create;
WriteFirstWorksheet();
WriteSecondWorksheet();
// Save the spreadsheet to a file