fpspreadsheet: Adds support for RGB colours

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2750 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat 2013-06-12 11:02:02 +00:00
parent be328215cd
commit 238e173677
3 changed files with 31 additions and 13 deletions

View File

@ -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

View File

@ -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;

View File

@ -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