You've already forked lazarus-ccr
fpspreadsheet: Add new properties to grid: CellFormula, CellProtection, CellProtections. Grid cell editor uses cell font. Expose the upper-left grid corner pixel coordinates as LeftTopPx property. Patch by milesyou (https://forum.lazarus.freepascal.org/index.php/topic,56548.0.html).
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8116 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -166,6 +166,9 @@ type
|
|||||||
function GetCellFontSizes(ALeft, ATop, ARight, ABottom: Integer): Single;
|
function GetCellFontSizes(ALeft, ATop, ARight, ABottom: Integer): Single;
|
||||||
function GetCellFontStyle(ACol, ARow: Integer): TsFontStyles;
|
function GetCellFontStyle(ACol, ARow: Integer): TsFontStyles;
|
||||||
function GetCellFontStyles(ALeft, ATop, ARight, ABottom: Integer): TsFontStyles;
|
function GetCellFontStyles(ALeft, ATop, ARight, ABottom: Integer): TsFontStyles;
|
||||||
|
function GetCellFormula(ACol, ARow: Integer): String;
|
||||||
|
function GetCellProtection(ACol, ARow: Integer): TsCellProtections;
|
||||||
|
function GetCellProtections(ALeft, ATop, ARight, ABottom: Integer): TsCellProtections;
|
||||||
function GetCellValue(ACol, ARow: Integer): variant;
|
function GetCellValue(ACol, ARow: Integer): variant;
|
||||||
function GetColWidths(ACol: Integer): Integer;
|
function GetColWidths(ACol: Integer): Integer;
|
||||||
function GetDefColWidth: Integer;
|
function GetDefColWidth: Integer;
|
||||||
@ -212,6 +215,10 @@ type
|
|||||||
procedure SetCellFontStyle(ACol, ARow: Integer; AValue: TsFontStyles);
|
procedure SetCellFontStyle(ACol, ARow: Integer; AValue: TsFontStyles);
|
||||||
procedure SetCellFontStyles(ALeft, ATop, ARight, ABottom: Integer;
|
procedure SetCellFontStyles(ALeft, ATop, ARight, ABottom: Integer;
|
||||||
AValue: TsFontStyles);
|
AValue: TsFontStyles);
|
||||||
|
procedure SetCellFormula(ACol, ARow: Integer; AValue: String);
|
||||||
|
procedure SetCellProtection(ACol, ARow: Integer; AValue: TsCellProtections);
|
||||||
|
procedure SetCellProtections(ALeft, ATop, ARight, ABottom: Integer;
|
||||||
|
AValue: TsCellProtections);
|
||||||
procedure SetCellValue(ACol, ARow: Integer; AValue: variant);
|
procedure SetCellValue(ACol, ARow: Integer; AValue: variant);
|
||||||
procedure SetColWidths(ACol: Integer; AValue: Integer);
|
procedure SetColWidths(ACol: Integer; AValue: Integer);
|
||||||
procedure SetDefColWidth(AValue: Integer);
|
procedure SetDefColWidth(AValue: Integer);
|
||||||
@ -550,6 +557,16 @@ type
|
|||||||
range of column/row indexes defined by the rectangle. }
|
range of column/row indexes defined by the rectangle. }
|
||||||
property CellFontSizes[ALeft, ATop, ARight, ABottom: Integer]: Single
|
property CellFontSizes[ALeft, ATop, ARight, ABottom: Integer]: Single
|
||||||
read GetCellFontSizes write SetCellFontSizes;
|
read GetCellFontSizes write SetCellFontSizes;
|
||||||
|
{@@ Formula in the given cell, empty if there is no formula }
|
||||||
|
property CellFormula[ACol, ARow: Integer]: String
|
||||||
|
read GetCellFormula write SetCellFormula;
|
||||||
|
{@@ Cell protection elements assigned to the given cell }
|
||||||
|
property CellProtection[ACol, ARow: Integer]: TsCellProtections
|
||||||
|
read GetCellProtection write SetCellProtection;
|
||||||
|
{@@ Cell protection elements assigned to the given cell range. Empty if not
|
||||||
|
consistent with all cells. }
|
||||||
|
property CellProtections[ALeft, ATop, ARight, ABottom: Integer]: TsCellProtections
|
||||||
|
read GetCellProtections write SetCellProtections;
|
||||||
{@@ Cell values }
|
{@@ Cell values }
|
||||||
property Cells[ACol, ARow: Integer]: Variant
|
property Cells[ACol, ARow: Integer]: Variant
|
||||||
read GetCellValue write SetCellValue;
|
read GetCellValue write SetCellValue;
|
||||||
@ -578,8 +595,9 @@ type
|
|||||||
defined by the rectangle. }
|
defined by the rectangle. }
|
||||||
property TextRotations[ALeft, ATop, ARight, ABottom: Integer]: TsTextRotation
|
property TextRotations[ALeft, ATop, ARight, ABottom: Integer]: TsTextRotation
|
||||||
read GetTextRotations write SetTextRotations;
|
read GetTextRotations write SetTextRotations;
|
||||||
{@@ Parameter for vertical text alignment in the cell at column ACol and
|
{@@ Pixel coordinates of the top-left corner of the grid's cell area}
|
||||||
row ARow. }
|
property TopLeftPx: TPoint read GetPxTopLeft;
|
||||||
|
{@@ Parameter for vertical text alignment in the cell at column ACol and row ARow. }
|
||||||
property VertAlignment[ACol, ARow: Integer]: TsVertAlignment
|
property VertAlignment[ACol, ARow: Integer]: TsVertAlignment
|
||||||
read GetVertAlignment write SetVertAlignment;
|
read GetVertAlignment write SetVertAlignment;
|
||||||
{@@ Parameter for vertical text alignment in the cells having column/row
|
{@@ Parameter for vertical text alignment in the cells having column/row
|
||||||
@ -2075,7 +2093,9 @@ var
|
|||||||
begin
|
begin
|
||||||
FOldEditorText := GetCellText(Col, Row);
|
FOldEditorText := GetCellText(Col, Row);
|
||||||
inherited;
|
inherited;
|
||||||
if (Worksheet <> nil) and (Editor is TStringCellEditor) then
|
if Worksheet = nil then
|
||||||
|
exit;
|
||||||
|
if (Editor is TStringCellEditor) or (Editor is TsMultiLineStringCellEditor) then
|
||||||
begin
|
begin
|
||||||
delta := FSelPen.Width div 2;
|
delta := FSelPen.Width div 2;
|
||||||
cell := Worksheet.FindCell(GetWorksheetRow(Row), GetWorksheetCol(Col));
|
cell := Worksheet.FindCell(GetWorksheetRow(Row), GetWorksheetCol(Col));
|
||||||
@ -2087,6 +2107,7 @@ begin
|
|||||||
InflateRect(Rct, -delta, -delta);
|
InflateRect(Rct, -delta, -delta);
|
||||||
inc(Rct.Top);
|
inc(Rct.Top);
|
||||||
if not odd(FSelPen.Width) then dec(Rct.Left);
|
if not odd(FSelPen.Width) then dec(Rct.Left);
|
||||||
|
Editor.Font := CellFont[Col, Row];
|
||||||
Editor.Font.Height := Round(Font.Height * ZoomFactor);
|
Editor.Font.Height := Round(Font.Height * ZoomFactor);
|
||||||
Editor.SetBounds(Rct.Left, Rct.Top, Rct.Right-Rct.Left-1, Rct.Bottom-Rct.Top-1);
|
Editor.SetBounds(Rct.Left, Rct.Top, Rct.Right-Rct.Left-1, Rct.Bottom-Rct.Top-1);
|
||||||
end;
|
end;
|
||||||
@ -6143,6 +6164,48 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TsCustomWorksheetGrid.GetCellFormula(ACol, ARow: Integer): String;
|
||||||
|
begin
|
||||||
|
if Worksheet <> nil then
|
||||||
|
Result := Worksheet.ReadFormula(GetWorksheetRow(ARow), GetWorksheetCol(ACol))
|
||||||
|
else
|
||||||
|
Result :='';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TsCustomWorksheetGrid.GetCellProtection(ACol, ARow: Integer
|
||||||
|
): TsCellProtections;
|
||||||
|
var
|
||||||
|
cell:PCell;
|
||||||
|
begin
|
||||||
|
Result :=[];
|
||||||
|
if Worksheet <> nil then
|
||||||
|
begin
|
||||||
|
cell := Worksheet.GetCell(GetWorksheetRow(ARow), GetWorksheetCol(ACol));
|
||||||
|
Result := Worksheet.ReadCellProtection(cell) ;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TsCustomWorksheetGrid.GetCellProtections(ALeft, ATop, ARight,
|
||||||
|
ABottom: Integer): TsCellProtections;
|
||||||
|
var
|
||||||
|
c, r: Integer;
|
||||||
|
b: TsCellProtections;
|
||||||
|
begin
|
||||||
|
EnsureOrder(ALeft, ARight);
|
||||||
|
EnsureOrder(ATop, ABottom);
|
||||||
|
Result := GetCellProtection(ALeft, ATop);
|
||||||
|
b := Result;
|
||||||
|
for c := ALeft to ARight do
|
||||||
|
for r := ATop to ABottom do
|
||||||
|
begin
|
||||||
|
Result := GetCellProtection(c, r);
|
||||||
|
if Result <> b then
|
||||||
|
begin
|
||||||
|
Result := [];
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
function TsCustomWorksheetGrid.GetCellValue(ACol, ARow: Integer): variant;
|
function TsCustomWorksheetGrid.GetCellValue(ACol, ARow: Integer): variant;
|
||||||
var
|
var
|
||||||
cell: PCell;
|
cell: PCell;
|
||||||
@ -6728,6 +6791,37 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TsCustomWorksheetGrid.SetCellFormula(ACol, ARow: Integer;
|
||||||
|
AValue: String);
|
||||||
|
begin
|
||||||
|
if Assigned(Worksheet) then
|
||||||
|
Worksheet.WriteFormula(GetWorksheetRow(ARow), GetWorksheetCol(ACol), AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TsCustomWorksheetGrid.SetCellProtection(ACol, ARow: Integer;
|
||||||
|
AValue: TsCellProtections);
|
||||||
|
begin
|
||||||
|
if Assigned(Worksheet) then
|
||||||
|
Worksheet.WriteCellProtection(GetWorksheetRow(ARow), GetWorksheetCol(ACol), AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TsCustomWorksheetGrid.SetCellProtections(ALeft, ATop, ARight,
|
||||||
|
ABottom: Integer; AValue: TsCellProtections);
|
||||||
|
var
|
||||||
|
c, r: Integer;
|
||||||
|
begin
|
||||||
|
EnsureOrder(ALeft, ARight);
|
||||||
|
EnsureOrder(ATop, ABottom);
|
||||||
|
BeginUpdate;
|
||||||
|
try
|
||||||
|
for c := ALeft to ARight do
|
||||||
|
for r := ATop to ABottom do
|
||||||
|
SetCellProtection(c, r, AValue);
|
||||||
|
finally
|
||||||
|
EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TsCustomWorksheetGrid.SetCellValue(ACol, ARow: Integer; AValue: Variant);
|
procedure TsCustomWorksheetGrid.SetCellValue(ACol, ARow: Integer; AValue: Variant);
|
||||||
var
|
var
|
||||||
cell: PCell = nil;
|
cell: PCell = nil;
|
||||||
|
Reference in New Issue
Block a user