fpspreadsheet: Construct Excel-like formula string out of an RPN formula and display it in fpsgrid demo.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3085 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2014-05-23 23:13:49 +00:00
parent aad3342021
commit 4271ace593
10 changed files with 902 additions and 690 deletions

View File

@ -128,8 +128,8 @@
<UnitName Value="mainform"/>
<EditorIndex Value="1"/>
<WindowIndex Value="0"/>
<TopLine Value="818"/>
<CursorPos X="3" Y="825"/>
<TopLine Value="511"/>
<CursorPos X="27" Y="526"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
@ -137,21 +137,24 @@
<Unit2>
<Filename Value="..\..\fpspreadsheet.pas"/>
<UnitName Value="fpspreadsheet"/>
<EditorIndex Value="6"/>
<EditorIndex Value="5"/>
<WindowIndex Value="0"/>
<TopLine Value="145"/>
<CursorPos X="38" Y="163"/>
<TopLine Value="523"/>
<CursorPos X="40" Y="533"/>
<UsageCount Value="100"/>
<Bookmarks Count="1">
<Item0 X="68" Y="3716" ID="1"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit2>
<Unit3>
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
<UnitName Value="fpspreadsheetgrid"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="7"/>
<EditorIndex Value="6"/>
<WindowIndex Value="0"/>
<TopLine Value="98"/>
<CursorPos X="1" Y="108"/>
<TopLine Value="539"/>
<CursorPos X="42" Y="557"/>
<UsageCount Value="100"/>
<Loaded Value="True"/>
</Unit3>
@ -229,11 +232,11 @@
<Unit13>
<Filename Value="..\..\fpsutils.pas"/>
<UnitName Value="fpsutils"/>
<EditorIndex Value="3"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/>
<TopLine Value="44"/>
<CursorPos X="14" Y="70"/>
<UsageCount Value="68"/>
<TopLine Value="62"/>
<CursorPos X="1" Y="63"/>
<UsageCount Value="69"/>
<Loaded Value="True"/>
</Unit13>
<Unit14>
@ -261,11 +264,11 @@
<Unit17>
<Filename Value="..\..\xlsbiff8.pas"/>
<UnitName Value="xlsbiff8"/>
<EditorIndex Value="4"/>
<EditorIndex Value="3"/>
<WindowIndex Value="0"/>
<TopLine Value="1920"/>
<CursorPos X="21" Y="1924"/>
<UsageCount Value="98"/>
<UsageCount Value="99"/>
<Loaded Value="True"/>
</Unit17>
<Unit18>
@ -286,14 +289,11 @@
<Unit20>
<Filename Value="..\..\xlscommon.pas"/>
<UnitName Value="xlscommon"/>
<EditorIndex Value="5"/>
<EditorIndex Value="4"/>
<WindowIndex Value="0"/>
<TopLine Value="650"/>
<CursorPos X="24" Y="662"/>
<UsageCount Value="94"/>
<Bookmarks Count="1">
<Item0 X="41" Y="1209" ID="1"/>
</Bookmarks>
<TopLine Value="1112"/>
<CursorPos X="1" Y="1142"/>
<UsageCount Value="95"/>
<Loaded Value="True"/>
</Unit20>
<Unit21>
@ -591,134 +591,132 @@
</Unit59>
<Unit60>
<Filename Value="C:\development\fpc\rtl\inc\astrings.inc"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/>
<TopLine Value="104"/>
<CursorPos X="1" Y="120"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit60>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="mainform.pas"/>
<Caret Line="800" Column="1" TopLine="781"/>
<Caret Line="654" Column="3" TopLine="647"/>
</Position1>
<Position2>
<Filename Value="mainform.pas"/>
<Caret Line="799" Column="75" TopLine="781"/>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="742" Column="12" TopLine="723"/>
</Position2>
<Position3>
<Filename Value="mainform.pas"/>
<Caret Line="796" Column="1" TopLine="781"/>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="115" Column="1" TopLine="115"/>
</Position3>
<Position4>
<Filename Value="mainform.pas"/>
<Caret Line="797" Column="1" TopLine="781"/>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="349" Column="12" TopLine="318"/>
</Position4>
<Position5>
<Filename Value="mainform.pas"/>
<Caret Line="798" Column="1" TopLine="781"/>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="358" Column="25" TopLine="327"/>
</Position5>
<Position6>
<Filename Value="mainform.pas"/>
<Caret Line="799" Column="1" TopLine="781"/>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="478" Column="34" TopLine="449"/>
</Position6>
<Position7>
<Filename Value="mainform.pas"/>
<Caret Line="802" Column="1" TopLine="781"/>
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
<Caret Line="2524" Column="3" TopLine="2520"/>
</Position7>
<Position8>
<Filename Value="mainform.pas"/>
<Caret Line="803" Column="1" TopLine="788"/>
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
<Caret Line="2504" Column="46" TopLine="2498"/>
</Position8>
<Position9>
<Filename Value="mainform.pas"/>
<Caret Line="816" Column="29" TopLine="788"/>
<Caret Line="654" Column="3" TopLine="647"/>
</Position9>
<Position10>
<Filename Value="mainform.pas"/>
<Caret Line="798" Column="1" TopLine="788"/>
<Caret Line="661" Column="3" TopLine="654"/>
</Position10>
<Position11>
<Filename Value="mainform.pas"/>
<Caret Line="799" Column="1" TopLine="788"/>
<Caret Line="542" Column="56" TopLine="540"/>
</Position11>
<Position12>
<Filename Value="mainform.pas"/>
<Caret Line="802" Column="1" TopLine="788"/>
<Caret Line="728" Column="1" TopLine="704"/>
</Position12>
<Position13>
<Filename Value="mainform.pas"/>
<Caret Line="803" Column="1" TopLine="788"/>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="1316" Column="1" TopLine="1285"/>
</Position13>
<Position14>
<Filename Value="mainform.pas"/>
<Caret Line="804" Column="1" TopLine="788"/>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="394" Column="34" TopLine="394"/>
</Position14>
<Position15>
<Filename Value="mainform.pas"/>
<Caret Line="806" Column="19" TopLine="781"/>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position15>
<Position16>
<Filename Value="mainform.pas"/>
<Caret Line="799" Column="1" TopLine="781"/>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="501" Column="18" TopLine="470"/>
</Position16>
<Position17>
<Filename Value="mainform.pas"/>
<Caret Line="808" Column="1" TopLine="782"/>
<Filename Value="..\..\xlscommon.pas"/>
<Caret Line="1430" Column="28" TopLine="1430"/>
</Position17>
<Position18>
<Filename Value="mainform.pas"/>
<Caret Line="799" Column="1" TopLine="782"/>
<Filename Value="..\..\xlscommon.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position18>
<Position19>
<Filename Value="mainform.pas"/>
<Caret Line="800" Column="1" TopLine="782"/>
<Caret Line="704" Column="21" TopLine="704"/>
</Position19>
<Position20>
<Filename Value="mainform.pas"/>
<Caret Line="803" Column="1" TopLine="782"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position20>
<Position21>
<Filename Value="mainform.pas"/>
<Caret Line="804" Column="1" TopLine="782"/>
<Caret Line="83" Column="19" TopLine="53"/>
</Position21>
<Position22>
<Filename Value="mainform.pas"/>
<Caret Line="805" Column="1" TopLine="782"/>
<Caret Line="229" Column="29" TopLine="199"/>
</Position22>
<Position23>
<Filename Value="mainform.pas"/>
<Caret Line="806" Column="1" TopLine="782"/>
<Caret Line="540" Column="32" TopLine="509"/>
</Position23>
<Position24>
<Filename Value="mainform.pas"/>
<Caret Line="807" Column="1" TopLine="782"/>
<Caret Line="511" Column="29" TopLine="511"/>
</Position24>
<Position25>
<Filename Value="mainform.pas"/>
<Caret Line="808" Column="1" TopLine="782"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position25>
<Position26>
<Filename Value="mainform.pas"/>
<Caret Line="806" Column="50" TopLine="784"/>
<Caret Line="83" Column="19" TopLine="53"/>
</Position26>
<Position27>
<Filename Value="mainform.pas"/>
<Caret Line="787" Column="104" TopLine="784"/>
<Caret Line="229" Column="29" TopLine="199"/>
</Position27>
<Position28>
<Filename Value="mainform.pas"/>
<Caret Line="243" Column="29" TopLine="227"/>
<Caret Line="540" Column="32" TopLine="509"/>
</Position28>
<Position29>
<Filename Value="mainform.pas"/>
<Caret Line="714" Column="35" TopLine="696"/>
<Filename Value="..\..\xlscommon.pas"/>
<Caret Line="1141" Column="28" TopLine="1111"/>
</Position29>
<Position30>
<Filename Value="mainform.pas"/>
<Caret Line="825" Column="3" TopLine="818"/>
<Filename Value="..\..\xlscommon.pas"/>
<Caret Line="1142" Column="1" TopLine="1112"/>
</Position30>
</JumpHistory>
</ProjectOptions>

View File

@ -4,7 +4,7 @@ object Form1: TForm1
Top = 193
Width = 884
Caption = 'fpsGrid'
ClientHeight = 624
ClientHeight = 629
ClientWidth = 884
Menu = MainMenu
OnActivate = FormActivate
@ -13,19 +13,19 @@ object Form1: TForm1
LCLVersion = '1.3'
object Panel1: TPanel
Left = 0
Height = 76
Top = 548
Height = 85
Top = 544
Width = 884
Align = alBottom
BevelOuter = bvNone
ClientHeight = 76
ClientHeight = 85
ClientWidth = 884
TabOrder = 0
object CbShowHeaders: TCheckBox
Left = 8
Height = 24
Top = 11
Width = 116
Height = 19
Top = 8
Width = 93
Caption = 'Show headers'
Checked = True
OnClick = CbShowHeadersClick
@ -34,9 +34,9 @@ object Form1: TForm1
end
object CbShowGridLines: TCheckBox
Left = 8
Height = 24
Top = 36
Width = 125
Height = 19
Top = 32
Width = 100
Caption = 'Show grid lines'
Checked = True
OnClick = CbShowGridLinesClick
@ -45,7 +45,7 @@ object Form1: TForm1
end
object EdFrozenCols: TSpinEdit
Left = 238
Height = 28
Height = 23
Top = 8
Width = 52
OnChange = EdFrozenColsChange
@ -53,7 +53,7 @@ object Form1: TForm1
end
object EdFrozenRows: TSpinEdit
Left = 238
Height = 28
Height = 23
Top = 39
Width = 52
OnChange = EdFrozenRowsChange
@ -61,27 +61,36 @@ object Form1: TForm1
end
object Label1: TLabel
Left = 152
Height = 20
Height = 15
Top = 13
Width = 77
Width = 62
Caption = 'Frozen cols:'
FocusControl = EdFrozenCols
ParentColor = False
end
object Label2: TLabel
Left = 153
Height = 20
Height = 15
Top = 40
Width = 82
Width = 66
Caption = 'Frozen rows:'
FocusControl = EdFrozenRows
ParentColor = False
end
object CbReadFormulas: TCheckBox
Left = 8
Height = 19
Top = 56
Width = 96
Caption = 'Read formulas'
OnChange = CbReadFormulasChange
TabOrder = 4
end
end
object PageControl1: TPageControl
Left = 0
Height = 495
Top = 53
Height = 465
Top = 79
Width = 884
ActivePage = TabSheet1
Align = alClient
@ -90,11 +99,11 @@ object Form1: TForm1
OnChange = PageControl1Change
object TabSheet1: TTabSheet
Caption = 'Sheet1'
ClientHeight = 462
ClientHeight = 437
ClientWidth = 876
object WorksheetGrid: TsWorksheetGrid
Left = 0
Height = 462
Height = 437
Top = 0
Width = 876
FrozenCols = 0
@ -109,7 +118,7 @@ object Form1: TForm1
TitleStyle = tsNative
OnSelection = WorksheetGridSelection
ColWidths = (
56
42
64
)
end
@ -187,19 +196,19 @@ object Form1: TForm1
end
object FontComboBox: TComboBox
Left = 52
Height = 28
Height = 23
Top = 2
Width = 127
ItemHeight = 20
ItemHeight = 15
OnSelect = FontComboBoxSelect
TabOrder = 0
end
object FontSizeComboBox: TComboBox
Left = 179
Height = 28
Height = 23
Top = 2
Width = 48
ItemHeight = 20
ItemHeight = 15
Items.Strings = (
'8'
'9'
@ -332,6 +341,22 @@ object Form1: TForm1
Action = AcCopyFormat
end
end
object FormulaToolBar: TToolBar
Left = 0
Height = 26
Top = 53
Width = 884
Caption = 'FormulaToolBar'
TabOrder = 4
object EdFormula: TEdit
Left = 1
Height = 24
Top = 2
Width = 883
Align = alClient
TabOrder = 0
end
end
object OpenDialog: TOpenDialog
DefaultExt = '.xls'
Filter = 'Excel spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlxs|LibreOffice/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (pipes) (.wikitable_pipes)|.wikitable_pipes|All files (*.*)|*.*'

File diff suppressed because it is too large Load Diff

View File

@ -80,6 +80,8 @@ type
CbShowHeaders: TCheckBox;
CbShowGridLines: TCheckBox;
CbBackgroundColor: TColorBox;
CbReadFormulas: TCheckBox;
EdFormula: TEdit;
FontComboBox: TComboBox;
EdFrozenRows: TSpinEdit;
FontDialog: TFontDialog;
@ -178,6 +180,7 @@ type
NumFormatPopupMenu: TPopupMenu;
SaveDialog: TSaveDialog;
EdFrozenCols: TSpinEdit;
FormulaToolBar: TToolBar;
WorksheetGrid: TsWorksheetGrid;
TabSheet1: TTabSheet;
ToolBar1: TToolBar;
@ -223,6 +226,7 @@ type
procedure AcVertAlignmentExecute(Sender: TObject);
procedure AcWordwrapExecute(Sender: TObject);
procedure CbBackgroundColorSelect(Sender: TObject);
procedure CbReadFormulasChange(Sender: TObject);
procedure CbShowHeadersClick(Sender: TObject);
procedure CbShowGridLinesClick(Sender: TObject);
procedure CbBackgroundColorGetColors(Sender: TCustomColorBox; Items: TStrings);
@ -533,6 +537,11 @@ begin
with WorksheetGrid do BackgroundColors[Selection] := CbBackgroundColor.ItemIndex;
end;
procedure TForm1.CbReadFormulasChange(Sender: TObject);
begin
WorksheetGrid.ReadFormulas := CbReadFormulas.Checked;
end;
procedure TForm1.CbShowHeadersClick(Sender: TObject);
begin
WorksheetGrid.ShowHeaders := CbShowHeaders.Checked;
@ -697,17 +706,27 @@ end;
procedure TForm1.WorksheetGridSelection(Sender: TObject; aCol, aRow: Integer);
var
r, c: Cardinal;
cell: PCell;
begin
if WorksheetGrid.Workbook = nil then
exit;
r := WorksheetGrid.GetWorksheetRow(ARow);
c := WorksheetGrid.GetWorksheetCol(ACol);
if AcCopyFormat.Checked then begin
r := WorksheetGrid.GetWorksheetRow(ARow);
c := WorksheetGrid.GetWorksheetCol(ACol);
WorksheetGrid.Worksheet.CopyFormat(@FCopiedFormat, r, c);
AcCopyFormat.Checked := false;
end;
cell := WorksheetGrid.Worksheet.FindCell(r, c);
if cell <> nil then begin
if Length(cell^.RPNFormulaValue) > 0 then
EdFormula.Text := WorksheetGrid.Worksheet.ReadRPNFormulaAsString(cell)
else
EdFormula.Text := WorksheetGrid.Worksheet.ReadAsUTF8Text(cell);
end;
UpdateHorAlignmentActions;
UpdateVertAlignmentActions;
UpdateWordwraps;
@ -718,6 +737,7 @@ begin
UpdateFontStyleActions;
UpdateTextRotationActions;
UpdateNumFormatActions;
end;
procedure TForm1.UpdateBackgroundColorIndex;