From 238e1736779f41785ca5f7f3d644d76f1e60eba3 Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Wed, 12 Jun 2013 11:02:02 +0000 Subject: [PATCH] fpspreadsheet: Adds support for RGB colours git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2750 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/fpspreadsheet/fpsopendocument.pas | 2 +- components/fpspreadsheet/fpspreadsheet.pas | 23 ++++++++++++++++---- components/fpspreadsheet/wikitable.pas | 19 +++++++++------- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/components/fpspreadsheet/fpsopendocument.pas b/components/fpspreadsheet/fpsopendocument.pas index a6deebef9..11d224c0c 100755 --- a/components/fpspreadsheet/fpsopendocument.pas +++ b/components/fpspreadsheet/fpsopendocument.pas @@ -541,7 +541,7 @@ begin if (uffBackgroundColor in FFormattingStyles[i].UsedFormattingFields) then begin Result := Result + 'fo:background-color="#' - + FPSColorToHexString(FFormattingStyles[i].BackgroundColor) +'" '; + + FPSColorToHexString(FFormattingStyles[i].BackgroundColor, FFormattingStyles[i].RGBBackgroundColor) +'" '; end; if (uffWordWrap in FFormattingStyles[i].UsedFormattingFields) then diff --git a/components/fpspreadsheet/fpspreadsheet.pas b/components/fpspreadsheet/fpspreadsheet.pas index 6ed4fdf5a..3d948110c 100755 --- a/components/fpspreadsheet/fpspreadsheet.pas +++ b/components/fpspreadsheet/fpspreadsheet.pas @@ -14,7 +14,7 @@ unit fpspreadsheet; interface uses - Classes, SysUtils, AVL_Tree, avglvltree, lconvencoding; + Classes, SysUtils, fpimage, AVL_Tree, avglvltree, lconvencoding; type TsSpreadsheetFormat = (sfExcel2, sfExcel3, sfExcel4, sfExcel5, sfExcel8, @@ -146,7 +146,14 @@ type scGrey, // 808080H // scGrey10pct,// E6E6E6H - scGrey20pct // CCCCCCH + scGrey20pct,// CCCCCCH + scOrange, // ffa500 + scDarkBrown,// a0522d + scBrown, // cd853f + scBeige, // f5f5dc + scWheat, // f5deb3 + // + scRGBCOLOR // Defined via TFPColor ); {@@ Cell structure for TsWorksheet @@ -173,6 +180,7 @@ type TextRotation: TsTextRotation; Border: TsCellBorders; BackgroundColor: TsColor; + RGBBackgroundColor: TFPColor; // only valid if BackgroundColor=scRGBCOLOR end; PCell = ^TCell; @@ -328,7 +336,7 @@ type procedure ListAllFormattingStylesCallback(ACell: PCell; AStream: TStream); procedure ListAllFormattingStyles(AData: TsWorkbook); function ExpandFormula(AFormula: TsFormula): TsExpandedFormula; - function FPSColorToHexString(AColor: TsColor): string; + function FPSColorToHexString(AColor: TsColor; ARGBColor: TFPColor): string; { General writing methods } procedure WriteCellCallback(ACell: PCell; AStream: TStream); procedure WriteCellsToStream(AStream: TStream; ACells: TAVLTree); @@ -1485,7 +1493,7 @@ begin end; end; -function TsCustomSpreadWriter.FPSColorToHexString(AColor: TsColor): string; +function TsCustomSpreadWriter.FPSColorToHexString(AColor: TsColor; ARGBColor: TFPColor): string; begin case AColor of scBlack: Result := '000000'; @@ -1507,6 +1515,13 @@ begin // scGrey10pct:Result := 'E6E6E6'; scGrey20pct:Result := 'CCCCCC'; + scOrange: Result := 'FFA500'; + scDarkBrown:Result := 'a0522d'; + scBrown: Result := 'cd853f'; + scBeige: Result := 'f5f5dc'; + scWheat: Result := 'f5deb3'; + // + scRGBCOLOR: Result := Format('%x%x%x', [ARGBColor.Red div $100, ARGBColor.Green div $100, ARGBColor.Blue div $100]); end; end; diff --git a/components/fpspreadsheet/wikitable.pas b/components/fpspreadsheet/wikitable.pas index 38faf20ab..732dcd8b2 100644 --- a/components/fpspreadsheet/wikitable.pas +++ b/components/fpspreadsheet/wikitable.pas @@ -257,7 +257,9 @@ begin lFormatStr := LowerCase(Trim(lFormatStr)); if lFormatStr = 'color:red' then lCurBackgroundColor := scRED else if lFormatStr = 'color:green' then lCurBackgroundColor := scGREEN - else if lFormatStr = 'color:orange' then lCurBackgroundColor := scYELLOW + else if lFormatStr = 'color:yellow' then lCurBackgroundColor := scYELLOW + // + else if lFormatStr = 'color:orange' then lCurBackgroundColor := scOrange else lCurBackgroundColor := scWHITE; lUseBackgroundColor := True; lFormatStr := ''; @@ -369,12 +371,12 @@ begin begin lCurColor := FWorksheet.ReadBackgroundColor(i, j); case lCurColor of - scBlack: lColorStr := 'black'; - scWhite: lColorStr := 'white'; - scRed: lColorStr := 'red'; - scGREEN: lColorStr := 'green'; - scBLUE: lColorStr := 'blue'; - scYELLOW: lColorStr := 'yellow'; + scBlack: lColorStr := 'style="background-color:black;color:white;"'; + scWhite: lColorStr := 'style="background-color:white;color:black;"'; + scRed: lColorStr := 'style="background-color:red;color:white;"'; + scGREEN: lColorStr := 'style="background-color:green;color:white;"'; + scBLUE: lColorStr := 'style="background-color:blue;color:white;"'; + scYELLOW: lColorStr := 'style="background-color:yellow;color:black;"'; {scMAGENTA, // FF00FFH scCYAN, // 00FFFFH scDarkRed, // 800000H @@ -388,8 +390,9 @@ begin // scGrey10pct,// E6E6E6H scGrey20pct // CCCCCCH } + scOrange: lColorStr := 'style="background-color:orange;color:white;"'; end; - lCurStr := 'style="background-color:'+lColorStr+';color:white;" |' + lCurStr + lCurStr := lColorStr + ' |' + lCurStr; end; if uffBold in lCurUsedFormatting then lCurStr := '!' + lCurStr