You've already forked lazarus-ccr
fpspreadsheet: Facilitate using cell borders and cell border styles.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7544 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -274,6 +274,15 @@ begin
|
||||
fmtIdx := wb.AddCellFormat(fmt);
|
||||
sh.WriteConditionalCellFormat(Range(row, 2, row, 2), cfcExpression, '=ISNUMBER($E$5)', fmtIdx);
|
||||
|
||||
// conditional format: expression
|
||||
inc(row);
|
||||
sh.WriteText(row, 0, 'expression: ISNUMBER(E5)');
|
||||
sh.WriteText(row, 1, 'background blue');
|
||||
InitFormatRecord(fmt);
|
||||
fmt.SetBackgroundColor(scBlue);
|
||||
fmtIdx := wb.AddCellFormat(fmt);
|
||||
sh.WriteConditionalCellFormat(Range(row, 2, row, 5), cfcExpression, '=ISNUMBER(E5)', fmtIdx);
|
||||
|
||||
// Two rules in the same conditional format
|
||||
inc(row);
|
||||
sh.WriteText(row, 0, 'Two rules: #1: equal to 5, #2: equal to 3');
|
||||
|
@ -31,6 +31,7 @@ type
|
||||
procedure SetBackgroundColor(const AValue: TsColor);
|
||||
procedure SetBiDiMode(const AValue: TsBiDiMode);
|
||||
procedure SetBorder(const AValue: TsCellBorders);
|
||||
procedure SetBorders(const ABorders: TsCellBorders; const AValue: TsCellBorderStyle);
|
||||
procedure SetBorderStyle(const ABorder: TsCellBorder; const AValue: TsCellBorderStyle);
|
||||
procedure SetBorderStyles(const AValue: TsCellBorderStyles);
|
||||
procedure SetCellFormat(const AValue: TsCellFormat);
|
||||
@ -55,6 +56,8 @@ type
|
||||
read GetBiDiMode write SetBiDiMode;
|
||||
property Border: TsCellBorders
|
||||
read GetBorder write SetBorder;
|
||||
property Borders[ABorders: TsCellBorders]: TsCellBorderStyle
|
||||
write SetBorders; // write-only!
|
||||
property BorderStyle[ABorder: TsCellBorder]: TsCellBorderStyle
|
||||
read GetBorderStyle write SetBorderStyle;
|
||||
property BorderStyles: TsCellBorderStyles
|
||||
@ -204,6 +207,16 @@ begin
|
||||
(Worksheet as TsWorksheet).WriteBorders(@self, AValue);
|
||||
end;
|
||||
|
||||
procedure TCellHelper.SetBorders(const ABorders: TsCellBorders;
|
||||
const AValue: TsCellBorderStyle);
|
||||
var
|
||||
fmt: TsCellFormat;
|
||||
begin
|
||||
fmt := CellFormat;
|
||||
fmt.SetBorders(ABorders, AValue.Color, AValue.LineStyle);
|
||||
CellFormat := fmt;
|
||||
end;
|
||||
|
||||
procedure TCellHelper.SetBorderStyle(const ABorder: TsCellBorder;
|
||||
const AValue: TsCellBorderStyle);
|
||||
begin
|
||||
|
@ -543,6 +543,8 @@ const
|
||||
{@@ Border style to be used for "no border"}
|
||||
NO_CELL_BORDER: TsCellBorderStyle = (LineStyle: lsThin; Color: scNotDefined);
|
||||
|
||||
ALL_BORDERS: TsCellBorders = [cbNorth, cbEast, cbSouth, cbWest];
|
||||
|
||||
type
|
||||
{@@ Style of fill pattern for cell backgrounds }
|
||||
TsFillStyle = (fsNoFill, fsSolidFill,
|
||||
@ -724,7 +726,7 @@ type
|
||||
procedure SetBackground(AFillStyle: TsFillStyle; AFgColor, ABgColor: TsColor);
|
||||
procedure SetBackgroundColor(AColor: TsColor);
|
||||
procedure SetBorders(ABorders: TsCellBorders;
|
||||
AColor: TsColor = scBlack; ALineStyle: TsLineStyle = lsThin);
|
||||
const AColor: TsColor = scBlack; const ALineStyle: TsLineStyle = lsThin);
|
||||
procedure SetFont(AFontIndex: Integer);
|
||||
procedure SetHorAlignment(AHorAlign: TsHorAlignment);
|
||||
procedure SetTextRotation(ARotation: TsTextRotation);
|
||||
@ -1088,13 +1090,13 @@ begin
|
||||
end;
|
||||
|
||||
procedure TsCellFormat.SetBorders(ABorders: TsCellBorders;
|
||||
AColor: TsColor = scBlack; ALineStyle: TsLineStyle = lsThin);
|
||||
const AColor: TsColor = scBlack; const ALineStyle: TsLineStyle = lsThin);
|
||||
var
|
||||
cb: TsCellBorder;
|
||||
begin
|
||||
for cb in ABorders do
|
||||
begin
|
||||
if (AColor = scTransparent) then
|
||||
if (AColor = scTransparent) or (AColor = scNotDefined) then
|
||||
Exclude(Border, cb)
|
||||
else
|
||||
begin
|
||||
|
@ -227,7 +227,11 @@ function SameFont(AFont1, AFont2: TsFont): Boolean; overload;
|
||||
function SameFont(AFont: TsFont; AFontName: String; AFontSize: Single;
|
||||
AStyle: TsFontStyles; AColor: TsColor; APos: TsFontPosition): Boolean; overload;
|
||||
|
||||
function Range(ARow1, ACol1, ARow2, ACol2: Cardinal): TsCellRange;
|
||||
function Range(ARow, ACol: Cardinal): TsCellRange; overload;
|
||||
function Range(ARow1, ACol1, ARow2, ACol2: Cardinal): TsCellRange; overload;
|
||||
|
||||
function CellBorderStyle(const AColor: TsColor = scBlack;
|
||||
const ALineStyle: TsLineStyle = lsThin): TsCellBorderStyle;
|
||||
|
||||
function GetFontAsString(AFont: TsFont): String;
|
||||
|
||||
@ -2757,9 +2761,20 @@ begin
|
||||
(AFont.Position = APos);
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Creates a TsCellRange record from the coordinates of a single cell.
|
||||
-------------------------------------------------------------------------------}
|
||||
function Range(ARow, ACol: Cardinal): TsCellRange;
|
||||
begin
|
||||
Result.Row1 := ARow;
|
||||
Result.Row2 := ARow;
|
||||
Result.Col1 := ACol;
|
||||
Result.Col2 := ACol;
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Creates a TsCellRange record from the provided cell corner coordinates.
|
||||
Put the coordinates into right order if needed.
|
||||
Puts the coordinates into right order if needed.
|
||||
-------------------------------------------------------------------------------}
|
||||
function Range(ARow1, ACol1, ARow2, ACol2: Cardinal): TsCellRange;
|
||||
begin
|
||||
@ -2803,31 +2818,16 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
(*
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Constructs a string of length "Len" containing random uppercase characters
|
||||
Combines color and linestyle to a TsCellBorderStyle record
|
||||
-------------------------------------------------------------------------------}
|
||||
function GetRandomString(Len: Integer): String;
|
||||
function CellBorderStyle(const AColor: TsColor = scBlack;
|
||||
const ALineStyle: TsLineStyle = lsThin): TsCellBorderStyle;
|
||||
begin
|
||||
Result := '';
|
||||
While Length(Result) < Len do
|
||||
Result := Result + char(ord('A') + random(26));
|
||||
Result.Color := AColor;
|
||||
Result.LineStyle := ALineStyle;
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Constructs a unique folder name in the temp directory of the OS
|
||||
-------------------------------------------------------------------------------}
|
||||
function GetUniqueTempDir(Global: Boolean): String;
|
||||
var
|
||||
tempdir: String;
|
||||
begin
|
||||
tempdir := AppendPathDelim(GetTempDir(Global));
|
||||
repeat
|
||||
Result := tempdir + AppendPathDelim(GetRandomString(8));
|
||||
until not DirectoryExists(Result);
|
||||
end;
|
||||
*)
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Appends a string to a stream
|
||||
|
||||
|
Reference in New Issue
Block a user