fpspreadsheet: the worksheetgrid can be edited again. Beginning to add some cell formatting to the demo.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3020 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2014-05-07 22:44:00 +00:00
parent f0928db9f5
commit 6626099d71
7 changed files with 1346 additions and 553 deletions

View File

@ -108,7 +108,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item2> </Item2>
</RequiredPackages> </RequiredPackages>
<Units Count="29"> <Units Count="36">
<Unit0> <Unit0>
<Filename Value="fpsgrid.lpr"/> <Filename Value="fpsgrid.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -117,7 +117,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<CursorPos X="10" Y="7"/> <CursorPos X="10" Y="7"/>
<UsageCount Value="139"/> <UsageCount Value="147"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
@ -129,31 +129,33 @@
<UnitName Value="mainform"/> <UnitName Value="mainform"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="140"/> <TopLine Value="177"/>
<CursorPos X="62" Y="157"/> <CursorPos X="40" Y="187"/>
<UsageCount Value="139"/> <UsageCount Value="147"/>
<Bookmarks Count="1">
<Item0 X="17" Y="292" ID="1"/>
</Bookmarks>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/> <LoadedDesigner Value="True"/>
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="..\..\fpspreadsheet.pas"/> <Filename Value="..\..\fpspreadsheet.pas"/>
<UnitName Value="fpspreadsheet"/> <UnitName Value="fpspreadsheet"/>
<EditorIndex Value="4"/> <EditorIndex Value="11"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="297"/> <TopLine Value="351"/>
<CursorPos X="57" Y="305"/> <CursorPos X="15" Y="368"/>
<UsageCount Value="66"/> <UsageCount Value="70"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
<Filename Value="..\..\fpspreadsheetgrid.pas"/> <Filename Value="..\..\fpspreadsheetgrid.pas"/>
<UnitName Value="fpspreadsheetgrid"/> <UnitName Value="fpspreadsheetgrid"/>
<IsVisibleTab Value="True"/> <EditorIndex Value="7"/>
<EditorIndex Value="3"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="857"/> <TopLine Value="524"/>
<CursorPos X="27" Y="879"/> <CursorPos X="3" Y="547"/>
<UsageCount Value="67"/> <UsageCount Value="71"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit3> </Unit3>
<Unit4> <Unit4>
@ -162,7 +164,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="25"/> <TopLine Value="25"/>
<CursorPos X="4" Y="44"/> <CursorPos X="4" Y="44"/>
<UsageCount Value="2"/> <UsageCount Value="1"/>
</Unit4> </Unit4>
<Unit5> <Unit5>
<Filename Value="c:\lazarus27\fpc\2.2.4\source\packages\winunits-base\src\activex.pp"/> <Filename Value="c:\lazarus27\fpc\2.2.4\source\packages\winunits-base\src\activex.pp"/>
@ -170,7 +172,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="49"/> <TopLine Value="49"/>
<CursorPos X="10" Y="24"/> <CursorPos X="10" Y="24"/>
<UsageCount Value="2"/> <UsageCount Value="1"/>
</Unit5> </Unit5>
<Unit6> <Unit6>
<Filename Value="c:\lazarus27\fpc\2.2.4\source\packages\fcl-base\src\avl_tree.pp"/> <Filename Value="c:\lazarus27\fpc\2.2.4\source\packages\fcl-base\src\avl_tree.pp"/>
@ -178,7 +180,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="37"/> <TopLine Value="37"/>
<CursorPos X="14" Y="83"/> <CursorPos X="14" Y="83"/>
<UsageCount Value="2"/> <UsageCount Value="1"/>
</Unit6> </Unit6>
<Unit7> <Unit7>
<Filename Value="c:\Lazarus\lcl\grids.pas"/> <Filename Value="c:\Lazarus\lcl\grids.pas"/>
@ -186,14 +188,14 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1516"/> <TopLine Value="1516"/>
<CursorPos X="28" Y="1534"/> <CursorPos X="28" Y="1534"/>
<UsageCount Value="2"/> <UsageCount Value="1"/>
</Unit7> </Unit7>
<Unit8> <Unit8>
<Filename Value="c:\Lazarus\lcl\include\customform.inc"/> <Filename Value="c:\Lazarus\lcl\include\customform.inc"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="2021"/> <TopLine Value="2021"/>
<CursorPos X="1" Y="2041"/> <CursorPos X="1" Y="2041"/>
<UsageCount Value="2"/> <UsageCount Value="1"/>
</Unit8> </Unit8>
<Unit9> <Unit9>
<Filename Value="..\..\fpsallformats.pas"/> <Filename Value="..\..\fpsallformats.pas"/>
@ -201,7 +203,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<CursorPos X="62" Y="13"/> <CursorPos X="62" Y="13"/>
<UsageCount Value="12"/> <UsageCount Value="11"/>
</Unit9> </Unit9>
<Unit10> <Unit10>
<Filename Value="..\..\wikitable.pas"/> <Filename Value="..\..\wikitable.pas"/>
@ -209,7 +211,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="48"/> <TopLine Value="48"/>
<CursorPos X="41" Y="60"/> <CursorPos X="41" Y="60"/>
<UsageCount Value="18"/> <UsageCount Value="17"/>
</Unit10> </Unit10>
<Unit11> <Unit11>
<Filename Value="..\..\fpsopendocument.pas"/> <Filename Value="..\..\fpsopendocument.pas"/>
@ -217,27 +219,26 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<UsageCount Value="14"/> <UsageCount Value="13"/>
</Unit11> </Unit11>
<Unit12> <Unit12>
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/> <Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
<UnitName Value="Grids"/> <UnitName Value="Grids"/>
<EditorIndex Value="8"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="3915"/> <TopLine Value="3429"/>
<CursorPos X="1" Y="3924"/> <CursorPos X="1" Y="3434"/>
<UsageCount Value="29"/> <UsageCount Value="33"/>
<Bookmarks Count="1"> <Loaded Value="True"/>
<Item0 X="7" Y="3905" ID="1"/>
</Bookmarks>
</Unit12> </Unit12>
<Unit13> <Unit13>
<Filename Value="..\..\fpsutils.pas"/> <Filename Value="..\..\fpsutils.pas"/>
<UnitName Value="fpsutils"/> <UnitName Value="fpsutils"/>
<EditorIndex Value="2"/> <EditorIndex Value="6"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="35"/> <TopLine Value="35"/>
<CursorPos X="1" Y="62"/> <CursorPos X="1" Y="62"/>
<UsageCount Value="42"/> <UsageCount Value="46"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit13> </Unit13>
<Unit14> <Unit14>
@ -245,7 +246,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1212"/> <TopLine Value="1212"/>
<CursorPos X="3" Y="1218"/> <CursorPos X="3" Y="1218"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit14> </Unit14>
<Unit15> <Unit15>
<Filename Value="d:\lazarus-svn\lcl\graphics.pp"/> <Filename Value="d:\lazarus-svn\lcl\graphics.pp"/>
@ -253,68 +254,71 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="649"/> <TopLine Value="649"/>
<CursorPos X="28" Y="675"/> <CursorPos X="28" Y="675"/>
<UsageCount Value="33"/> <UsageCount Value="32"/>
</Unit15> </Unit15>
<Unit16> <Unit16>
<Filename Value="d:\lazarus-svn\fpc\2.6.2\source\rtl\objpas\classes\classesh.inc"/> <Filename Value="d:\lazarus-svn\fpc\2.6.2\source\rtl\objpas\classes\classesh.inc"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="248"/> <TopLine Value="248"/>
<CursorPos X="22" Y="263"/> <CursorPos X="22" Y="263"/>
<UsageCount Value="18"/> <UsageCount Value="17"/>
</Unit16> </Unit16>
<Unit17> <Unit17>
<Filename Value="..\..\xlsbiff8.pas"/> <Filename Value="..\..\xlsbiff8.pas"/>
<UnitName Value="xlsbiff8"/> <UnitName Value="xlsbiff8"/>
<EditorIndex Value="6"/> <IsVisibleTab Value="True"/>
<EditorIndex Value="13"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1174"/> <TopLine Value="1881"/>
<CursorPos X="1" Y="1198"/> <CursorPos X="24" Y="1898"/>
<UsageCount Value="41"/> <UsageCount Value="45"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit17> </Unit17>
<Unit18> <Unit18>
<Filename Value="d:\lazarus-svn\lcl\comctrls.pp"/> <Filename Value="d:\lazarus-svn\lcl\comctrls.pp"/>
<UnitName Value="ComCtrls"/> <UnitName Value="ComCtrls"/>
<EditorIndex Value="5"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="537"/> <TopLine Value="1091"/>
<CursorPos X="23" Y="567"/> <CursorPos X="12" Y="1122"/>
<UsageCount Value="6"/> <UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit18> </Unit18>
<Unit19> <Unit19>
<Filename Value="d:\lazarus-svn\lcl\include\wincontrol.inc"/> <Filename Value="d:\lazarus-svn\lcl\include\wincontrol.inc"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="7344"/> <TopLine Value="7344"/>
<CursorPos X="30" Y="7349"/> <CursorPos X="30" Y="7349"/>
<UsageCount Value="12"/> <UsageCount Value="11"/>
</Unit19> </Unit19>
<Unit20> <Unit20>
<Filename Value="..\..\xlscommon.pas"/> <Filename Value="..\..\xlscommon.pas"/>
<UnitName Value="xlscommon"/> <UnitName Value="xlscommon"/>
<EditorIndex Value="5"/> <EditorIndex Value="12"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1530"/> <TopLine Value="1530"/>
<CursorPos X="47" Y="1554"/> <CursorPos X="47" Y="1554"/>
<UsageCount Value="37"/> <UsageCount Value="41"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit20> </Unit20>
<Unit21> <Unit21>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="..\..\xlsbiff5.pas"/>
<UnitName Value="xlsbiff5"/> <UnitName Value="xlsbiff5"/>
<EditorIndex Value="7"/> <EditorIndex Value="15"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1319"/> <TopLine Value="1319"/>
<CursorPos X="3" Y="1325"/> <CursorPos X="3" Y="1325"/>
<UsageCount Value="24"/> <UsageCount Value="28"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit21> </Unit21>
<Unit22> <Unit22>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<UnitName Value="xlsbiff2"/> <UnitName Value="xlsbiff2"/>
<EditorIndex Value="8"/> <EditorIndex Value="16"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="399"/> <TopLine Value="399"/>
<CursorPos X="16" Y="406"/> <CursorPos X="16" Y="406"/>
<UsageCount Value="25"/> <UsageCount Value="29"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit22> </Unit22>
<Unit23> <Unit23>
@ -323,7 +327,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="841"/> <TopLine Value="841"/>
<CursorPos X="19" Y="852"/> <CursorPos X="19" Y="852"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit23> </Unit23>
<Unit24> <Unit24>
<Filename Value="d:\lazarus-svn\fpc\2.6.2\source\packages\fcl-image\src\fpcanvas.pp"/> <Filename Value="d:\lazarus-svn\fpc\2.6.2\source\packages\fcl-image\src\fpcanvas.pp"/>
@ -331,7 +335,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="111"/> <TopLine Value="111"/>
<CursorPos X="3" Y="112"/> <CursorPos X="3" Y="112"/>
<UsageCount Value="20"/> <UsageCount Value="19"/>
</Unit24> </Unit24>
<Unit25> <Unit25>
<Filename Value="d:\lazarus-svn\fpc\2.6.2\source\packages\fcl-image\src\fpimage.pp"/> <Filename Value="d:\lazarus-svn\fpc\2.6.2\source\packages\fcl-image\src\fpimage.pp"/>
@ -339,14 +343,14 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="74"/> <TopLine Value="74"/>
<CursorPos X="3" Y="93"/> <CursorPos X="3" Y="93"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit25> </Unit25>
<Unit26> <Unit26>
<Filename Value="d:\lazarus-svn\fpc\2.6.2\source\rtl\objpas\classes\lists.inc"/> <Filename Value="d:\lazarus-svn\fpc\2.6.2\source\rtl\objpas\classes\lists.inc"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="141"/> <TopLine Value="141"/>
<CursorPos X="3" Y="143"/> <CursorPos X="3" Y="143"/>
<UsageCount Value="16"/> <UsageCount Value="15"/>
</Unit26> </Unit26>
<Unit27> <Unit27>
<Filename Value="d:\Prog_Delphi\common\units\XLS.pas"/> <Filename Value="d:\Prog_Delphi\common\units\XLS.pas"/>
@ -354,136 +358,203 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="114"/> <TopLine Value="114"/>
<CursorPos X="42" Y="152"/> <CursorPos X="42" Y="152"/>
<UsageCount Value="16"/> <UsageCount Value="15"/>
</Unit27> </Unit27>
<Unit28> <Unit28>
<Filename Value="d:\lazarus-svn\lcl\include\pen.inc"/> <Filename Value="d:\lazarus-svn\lcl\include\pen.inc"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="272"/> <TopLine Value="272"/>
<CursorPos X="3" Y="286"/> <CursorPos X="3" Y="286"/>
<UsageCount Value="16"/> <UsageCount Value="15"/>
</Unit28> </Unit28>
<Unit29>
<Filename Value="d:\lazarus-svn\lcl\controls.pp"/>
<UnitName Value="Controls"/>
<EditorIndex Value="9"/>
<WindowIndex Value="0"/>
<TopLine Value="1480"/>
<CursorPos X="15" Y="1498"/>
<UsageCount Value="14"/>
<Loaded Value="True"/>
</Unit29>
<Unit30>
<Filename Value="d:\lazarus-svn\lcl\include\control.inc"/>
<EditorIndex Value="10"/>
<WindowIndex Value="0"/>
<TopLine Value="4129"/>
<CursorPos X="1" Y="4161"/>
<UsageCount Value="14"/>
<Loaded Value="True"/>
</Unit30>
<Unit31>
<Filename Value="..\..\fpspreadsheetchart.pas"/>
<UnitName Value="fpspreadsheetchart"/>
<WindowIndex Value="0"/>
<TopLine Value="170"/>
<CursorPos X="37" Y="204"/>
<UsageCount Value="10"/>
</Unit31>
<Unit32>
<Filename Value="d:\lazarus-svn\components\lazutils\lazutf8.pas"/>
<UnitName Value="LazUTF8"/>
<EditorIndex Value="14"/>
<WindowIndex Value="0"/>
<TopLine Value="3180"/>
<CursorPos X="1" Y="3212"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit32>
<Unit33>
<Filename Value="d:\lazarus-svn\lcl\colorbox.pas"/>
<UnitName Value="ColorBox"/>
<EditorIndex Value="4"/>
<WindowIndex Value="0"/>
<TopLine Value="13"/>
<CursorPos X="1" Y="1"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit33>
<Unit34>
<Filename Value="d:\lazarus-svn\lcl\dialogs.pp"/>
<UnitName Value="Dialogs"/>
<EditorIndex Value="3"/>
<WindowIndex Value="0"/>
<TopLine Value="222"/>
<CursorPos X="3" Y="253"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit34>
<Unit35>
<Filename Value="d:\lazarus-svn\lcl\forms.pp"/>
<UnitName Value="Forms"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/>
<TopLine Value="932"/>
<CursorPos X="3" Y="939"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit35>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="..\..\xlsbiff8.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1578" Column="26" TopLine="1568"/> <Caret Line="263" Column="12" TopLine="249"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="..\..\fpspreadsheetgrid.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="438" Column="33" TopLine="419"/> <Caret Line="264" Column="12" TopLine="250"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="..\..\fpspreadsheetgrid.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="892" Column="57" TopLine="876"/> <Caret Line="294" Column="38" TopLine="265"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="..\..\fpspreadsheetgrid.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="898" Column="23" TopLine="886"/> <Caret Line="86" Column="15" TopLine="86"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="mainform.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="161" Column="1" TopLine="145"/> <Caret Line="279" Column="23" TopLine="266"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="mainform.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="158" Column="46" TopLine="140"/> <Caret Line="203" Column="29" TopLine="185"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="272" Column="15" TopLine="256"/> <Caret Line="86" Column="15" TopLine="68"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1" Column="1" TopLine="1"/> <Caret Line="297" Column="81" TopLine="266"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="31" Column="8" TopLine="4"/> <Caret Line="280" Column="41" TopLine="172"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="400" Column="48" TopLine="400"/> <Caret Line="193" Column="1" TopLine="172"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="997" Column="54" TopLine="997"/> <Caret Line="194" Column="1" TopLine="172"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1004" Column="43" TopLine="997"/> <Caret Line="195" Column="1" TopLine="172"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1010" Column="50" TopLine="997"/> <Caret Line="196" Column="1" TopLine="172"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1015" Column="17" TopLine="997"/> <Caret Line="197" Column="1" TopLine="172"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1016" Column="17" TopLine="997"/> <Caret Line="198" Column="1" TopLine="172"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1017" Column="17" TopLine="997"/> <Caret Line="201" Column="1" TopLine="172"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1018" Column="17" TopLine="997"/> <Caret Line="202" Column="1" TopLine="172"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1021" Column="39" TopLine="997"/> <Caret Line="209" Column="5" TopLine="173"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1023" Column="39" TopLine="997"/> <Caret Line="193" Column="1" TopLine="173"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1025" Column="39" TopLine="998"/> <Caret Line="194" Column="1" TopLine="173"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1027" Column="39" TopLine="1000"/> <Caret Line="195" Column="1" TopLine="173"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1346" Column="25" TopLine="1319"/> <Caret Line="196" Column="1" TopLine="173"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="66" Column="15" TopLine="50"/> <Caret Line="197" Column="1" TopLine="173"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1346" Column="33" TopLine="1319"/> <Caret Line="199" Column="1" TopLine="173"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1325" Column="3" TopLine="1319"/> <Caret Line="202" Column="1" TopLine="173"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="588" Column="1" TopLine="562"/> <Caret Line="204" Column="1" TopLine="173"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="mainform.pas"/>
<Caret Line="1435" Column="5" TopLine="1435"/> <Caret Line="207" Column="1" TopLine="175"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
<Caret Line="1" Column="1" TopLine="1"/> <Caret Line="3685" Column="48" TopLine="3685"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
<Caret Line="63" Column="22" TopLine="36"/> <Caret Line="1" Column="1" TopLine="1"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="..\..\fpspreadsheetgrid.pas"/> <Filename Value="..\..\fpspreadsheetgrid.pas"/>
<Caret Line="893" Column="25" TopLine="877"/> <Caret Line="547" Column="3" TopLine="524"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>

View File

@ -4,84 +4,75 @@ object Form1: TForm1
Top = 258 Top = 258
Width = 518 Width = 518
Caption = 'fpsGrid' Caption = 'fpsGrid'
ClientHeight = 361 ClientHeight = 366
ClientWidth = 518 ClientWidth = 518
Menu = MainMenu1 Menu = MainMenu1
OnActivate = FormActivate OnActivate = FormActivate
OnCreate = FormCreate
ShowHint = True ShowHint = True
LCLVersion = '1.3' LCLVersion = '1.3'
object Panel1: TPanel object Panel1: TPanel
Left = 0 Left = 0
Height = 73 Height = 73
Top = 288 Top = 293
Width = 518 Width = 518
Align = alBottom Align = alBottom
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 73 ClientHeight = 73
ClientWidth = 518 ClientWidth = 518
TabOrder = 0 TabOrder = 0
object btnPopulateGrid: TButton
Left = 392
Height = 31
Top = 24
Width = 120
Caption = 'Populate Grid'
OnClick = btnPopulateGridClick
TabOrder = 0
Visible = False
end
object CbShowHeaders: TCheckBox object CbShowHeaders: TCheckBox
Left = 8 Left = 8
Height = 24 Height = 19
Top = 11 Top = 11
Width = 116 Width = 93
Caption = 'Show headers' Caption = 'Show headers'
Checked = True Checked = True
OnClick = CbShowHeadersClick OnClick = CbShowHeadersClick
State = cbChecked State = cbChecked
TabOrder = 1 TabOrder = 0
end end
object CbShowGridLines: TCheckBox object CbShowGridLines: TCheckBox
Left = 8 Left = 8
Height = 24 Height = 19
Top = 36 Top = 36
Width = 125 Width = 100
Caption = 'Show grid lines' Caption = 'Show grid lines'
Checked = True Checked = True
OnClick = CbShowGridLinesClick OnClick = CbShowGridLinesClick
State = cbChecked State = cbChecked
TabOrder = 2 TabOrder = 1
end end
object EdFrozenCols: TSpinEdit object EdFrozenCols: TSpinEdit
Left = 238 Left = 238
Height = 28 Height = 23
Top = 8 Top = 8
Width = 52 Width = 52
OnChange = EdFrozenColsChange OnChange = EdFrozenColsChange
TabOrder = 3 TabOrder = 2
end end
object EdFrozenRows: TSpinEdit object EdFrozenRows: TSpinEdit
Left = 238 Left = 238
Height = 28 Height = 23
Top = 39 Top = 39
Width = 52 Width = 52
OnChange = EdFrozenRowsChange OnChange = EdFrozenRowsChange
TabOrder = 4 TabOrder = 3
end end
object Label1: TLabel object Label1: TLabel
Left = 152 Left = 152
Height = 20 Height = 15
Top = 13 Top = 13
Width = 77 Width = 62
Caption = 'Frozen cols:' Caption = 'Frozen cols:'
FocusControl = EdFrozenCols FocusControl = EdFrozenCols
ParentColor = False ParentColor = False
end end
object Label2: TLabel object Label2: TLabel
Left = 153 Left = 153
Height = 20 Height = 15
Top = 40 Top = 40
Width = 82 Width = 66
Caption = 'Frozen rows:' Caption = 'Frozen rows:'
FocusControl = EdFrozenRows FocusControl = EdFrozenRows
ParentColor = False ParentColor = False
@ -89,8 +80,8 @@ object Form1: TForm1
end end
object PageControl1: TPageControl object PageControl1: TPageControl
Left = 0 Left = 0
Height = 262 Height = 241
Top = 26 Top = 52
Width = 518 Width = 518
ActivePage = TabSheet1 ActivePage = TabSheet1
Align = alClient Align = alClient
@ -99,13 +90,15 @@ object Form1: TForm1
OnChange = PageControl1Change OnChange = PageControl1Change
object TabSheet1: TTabSheet object TabSheet1: TTabSheet
Caption = 'Sheet1' Caption = 'Sheet1'
ClientHeight = 229 ClientHeight = 213
ClientWidth = 510 ClientWidth = 510
object sWorksheetGrid1: TsWorksheetGrid object sWorksheetGrid1: TsWorksheetGrid
Left = 0 Left = 0
Height = 229 Height = 213
Top = 0 Top = 0
Width = 510 Width = 510
FrozenCols = 0
FrozenRows = 0
Align = alClient Align = alClient
ColCount = 2 ColCount = 2
ExtendedSelect = False ExtendedSelect = False
@ -113,8 +106,9 @@ object Form1: TForm1
RowCount = 2 RowCount = 2
TabOrder = 0 TabOrder = 0
TitleStyle = tsNative TitleStyle = tsNative
OnSelectCell = sWorksheetGrid1SelectCell
ColWidths = ( ColWidths = (
56 42
64 64
) )
end end
@ -141,7 +135,7 @@ object Form1: TForm1
Action = AcSaveAs Action = AcSaveAs
end end
object ToolButton3: TToolButton object ToolButton3: TToolButton
Left = 52 Left = 80
Top = 0 Top = 0
Action = AcQuit Action = AcQuit
end end
@ -152,6 +146,72 @@ object Form1: TForm1
Caption = 'ToolButton5' Caption = 'ToolButton5'
Style = tbsDivider Style = tbsDivider
end end
object ToolButton4: TToolButton
Left = 52
Top = 0
Action = AcEdit
end
object ToolButton6: TToolButton
Left = 75
Top = 0
Width = 5
Caption = 'ToolButton6'
Style = tbsDivider
end
end
object FormatToolBar: TToolBar
Left = 0
Height = 26
Top = 26
Width = 518
Caption = 'FormatToolBar'
Images = ImageList1
TabOrder = 3
object ToolButton10: TToolButton
Left = 168
Top = 2
Action = AcLeftAlign
end
object ToolButton12: TToolButton
Left = 191
Top = 2
Action = AcHorCenterAlign
end
object ToolButton13: TToolButton
Left = 214
Top = 2
Action = AcRightAlign
end
object FontComboBox: TComboBox
Left = 1
Height = 23
Top = 2
Width = 127
ItemHeight = 15
OnSelect = FontComboBoxSelect
TabOrder = 0
end
object FontSizeComboBox: TComboBox
Left = 128
Height = 23
Top = 2
Width = 40
ItemHeight = 15
Items.Strings = (
'8'
'9'
'10'
'11'
'12'
'14'
'16'
'18'
'20'
'24'
)
OnSelect = FontComboBoxSelect
TabOrder = 1
end
end end
object OpenDialog1: TOpenDialog object OpenDialog1: TOpenDialog
DefaultExt = '.xls' DefaultExt = '.xls'
@ -163,14 +223,14 @@ object Form1: TForm1
object SaveDialog1: TSaveDialog object SaveDialog1: TSaveDialog
DefaultExt = '.xls' DefaultExt = '.xls'
Filter = 'Excel spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffice/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wikimedia)|*.wikitable_wikimedia' Filter = 'Excel spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffice/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wikimedia)|*.wikitable_wikimedia'
Options = [ofExtensionDifferent, ofEnableSizing, ofViewDetail] Options = [ofOverwritePrompt, ofExtensionDifferent, ofEnableSizing, ofViewDetail]
left = 176 left = 176
top = 176 top = 176
end end
object MainMenu1: TMainMenu object MainMenu1: TMainMenu
Images = ImageList1 Images = ImageList1
left = 288 left = 288
top = 176 top = 64
object mnuFile: TMenuItem object mnuFile: TMenuItem
Caption = '&File' Caption = '&File'
object mnuOpen: TMenuItem object mnuOpen: TMenuItem
@ -297,12 +357,37 @@ object Form1: TForm1
OnClick = acQuitExecute OnClick = acQuitExecute
end end
end end
object mnuEdit: TMenuItem
Caption = 'Edit'
object MenuItem2: TMenuItem
Action = AcEdit
AutoCheck = True
end
end
object mnuFormat: TMenuItem
Caption = 'Format'
object MnuHorAlignment: TMenuItem
Caption = 'Horizontal alignment'
object MnuHorDefault: TMenuItem
Action = AcHorDefaultAlign
end
object MenuItem3: TMenuItem
Action = AcLeftAlign
end
object MenuItem4: TMenuItem
Action = AcHorCenterAlign
end
object MenuItem5: TMenuItem
Action = AcRightAlign
end
end
end
end end
object ImageList1: TImageList object ImageList1: TImageList
left = 176 left = 176
top = 120 top = 120
Bitmap = { Bitmap = {
4C69030000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 4C69070000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB92FFD1A06CF5D09E6DF6CC96 FF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB92FFD1A06CF5D09E6DF6CC96
5FDAC479427EB2673C09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 5FDAC479427EB2673C09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3EAFFFCF2E8FFFAEFE3FFFAF2 FF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3EAFFFCF2E8FFFAEFE3FFFAF2
@ -398,10 +483,139 @@ object Form1: TForm1
4FFF4C4C4CFF4A4A4AFF474747FF454545FF25679DFF3274A8FF3D7CAFFF4784 4FFF4C4C4CFF4A4A4AFF474747FF454545FF25679DFF3274A8FF3D7CAFFF4784
B5FF4E8ABAFF3E7EADFF0C578FEAFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF B5FF4E8ABAFF3E7EADFF0C578FEAFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D639B1619609839145D9562105A FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D639B1619609839145D9562105A
92880D5890A4135C92FC0C578FED 92880D5890A4135C92FC0C578FEDFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002FBAE4094FAADBEA5093
CAFD4E90C8FF2F9DD2DF35A4DE19FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0050A8D9FF6AA5D8FFC9E1
F7FFCBE3F8FF4295CAFF3182C2AEFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002FBAE4FFA7D4F4FFC5E1F8FFCCE3
F9FFCCE3F9FFBDDBF7FF4F90C9FDFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF002FBAE4FFC3EDF8FFA8E2F8FF6CAEDDFFA5CF
F4FFA5CFF4FFBDDBF7FF5393CBF7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF002FBAE4FFC3EDF8FFB3F4FCFF68D9F5FF6FCFF3FF599D
D0FF73ABDDFF4F91C9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF002FBAE4FFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4
E6FF3B8FD9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF002FBAE4FFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8F
D9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002790
BFFFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002689B9FFBEE6
F2FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00206398202689B9FFB0CBE1FF67A9
C8FF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001E6D93FFC8E1F2FFD1E7FAFF347D
B5FF3199C3FF6DC4DCFF4A9CCFFF3483C7FFFFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001E6D93FFCBE3F9FF61AAECFF4098
E8FF1567C2FF1660AAFF2C76B4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00124259FF5D9CD4FFA6CFF5FFA9CF
ECFF488BC1FF2C76B4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00134058FF15425EFF25699CFF2C76
B4FF3B8BBAADFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00767676FF747474FF7070
70FF6C6C6CFF686868FF636363FF5E5E5EFF595959FF535353FF4E4E4EFF4848
48FF424242FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006F6F6FFF6B6B6BFF6666
66FF616161FF5C5C5CFF575757FF515151FF4B4B4BFF454545FFFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00646464FF5F5F5FFF5A5A
5AFF545454FF4F4F4FFF494949FF434343FF3D3D3DFF373737FF313131FF2B2B
2BFF252525FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00585858FF525252FF4C4C
4CFF464646FF404040FF3A3A3AFF343434FF2E2E2EFF282828FFFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4AFF444444FF3E3E
3EFF383838FF323232FF2C2C2CFF262626FF202020FF1B1B1BFF161616FF1111
11FF0C0C0CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003C3C3CFF353535FF2F2F
2FFF292929FF242424FF1E1E1EFF191919FF141414FF0F0F0FFFFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00767676FF747474FF7070
70FF6C6C6CFF686868FF636363FF5E5E5EFF595959FF535353FF4E4E4EFF4848
48FF424242FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006B6B6B6B6666
66FF616161FF5C5C5CFF575757FF515151FF4B4B4BFF454545FF3F3F3FFF3939
396BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00646464FF5F5F5FFF5A5A
5AFF545454FF4F4F4FFF494949FF434343FF3D3D3DFF373737FF313131FF2B2B
2BFF252525FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005252526B4C4C
4CFF464646FF404040FF3A3A3AFF343434FF2E2E2EFF282828FF232323FF1D1D
1D6BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4AFF444444FF3E3E
3EFF383838FF323232FF2C2C2CFF262626FF202020FF1B1B1BFF161616FF1111
11FF0C0C0CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003535356B2F2F
2FFF292929FF242424FF1E1E1EFF191919FF141414FF0F0F0FFF0B0B0BFF0707
076BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00767676FF747474FF7070
70FF6C6C6CFF686868FF636363FF5E5E5EFF595959FF535353FF4E4E4EFF4848
48FF424242FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00616161FF5C5C5CFF575757FF515151FF4B4B4BFF454545FF3F3F3FFF3939
39FF333333FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00646464FF5F5F5FFF5A5A
5AFF545454FF4F4F4FFF494949FF434343FF3D3D3DFF373737FF313131FF2B2B
2BFF252525FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00464646FF404040FF3A3A3AFF343434FF2E2E2EFF282828FF232323FF1D1D
1DFF181818FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4AFF444444FF3E3E
3EFF383838FF323232FF2C2C2CFF262626FF202020FF1B1B1BFF161616FF1111
11FF0C0C0CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00292929FF242424FF1E1E1EFF191919FF141414FF0F0F0FFF0B0B0BFF0707
07FF030303FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00
} }
end end
object ActionList1: TActionList object ActionList1: TActionList
Images = ImageList1
left = 176 left = 176
top = 64 top = 64
object AcOpen: TAction object AcOpen: TAction
@ -419,5 +633,40 @@ object Form1: TForm1
ImageIndex = 2 ImageIndex = 2
OnExecute = acQuitExecute OnExecute = acQuitExecute
end end
object AcEdit: TAction
AutoCheck = True
Caption = 'Edit mode'
Hint = 'Enable/disable editing'
ImageIndex = 3
OnExecute = AcEditExecute
end
object AcHorDefaultAlign: TAction
Tag = 100
Category = 'Format'
Caption = 'Default'
Checked = True
OnExecute = AcHorAlignmentExecute
end
object AcLeftAlign: TAction
Tag = 101
Category = 'Format'
Caption = 'Left'
ImageIndex = 4
OnExecute = AcHorAlignmentExecute
end
object AcHorCenterAlign: TAction
Tag = 102
Category = 'Format'
Caption = 'Centered'
ImageIndex = 5
OnExecute = AcHorAlignmentExecute
end
object AcRightAlign: TAction
Tag = 103
Category = 'Format'
Caption = 'Right'
ImageIndex = 6
OnExecute = AcHorAlignmentExecute
end
end end
end end

View File

@ -2,370 +2,582 @@
LazarusResources.Add('TForm1','FORMDATA',[ LazarusResources.Add('TForm1','FORMDATA',[
'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'r'#1#6'Height'#3#130#1#3'Top'#3#2#1#5'Wid' 'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'r'#1#6'Height'#3#130#1#3'Top'#3#2#1#5'Wid'
+'th'#3#6#2#7'Caption'#6#7'fpsGrid'#12'ClientHeight'#3'i'#1#11'ClientWidth'#3 +'th'#3#6#2#7'Caption'#6#7'fpsGrid'#12'ClientHeight'#3'n'#1#11'ClientWidth'#3
+#6#2#4'Menu'#7#9'MainMenu1'#10'OnActivate'#7#12'FormActivate'#8'ShowHint'#9 +#6#2#4'Menu'#7#9'MainMenu1'#10'OnActivate'#7#12'FormActivate'#8'OnCreate'#7
+#10'LCLVersion'#6#3'1.3'#0#6'TPanel'#6'Panel1'#4'Left'#2#0#6'Height'#2'I'#3 +#10'FormCreate'#8'ShowHint'#9#10'LCLVersion'#6#3'1.3'#0#6'TPanel'#6'Panel1'#4
+'Top'#3' '#1#5'Width'#3#6#2#5'Align'#7#8'alBottom'#10'BevelOuter'#7#6'bvNone' +'Left'#2#0#6'Height'#2'I'#3'Top'#3'%'#1#5'Width'#3#6#2#5'Align'#7#8'alBottom'
+#12'ClientHeight'#2'I'#11'ClientWidth'#3#6#2#8'TabOrder'#2#0#0#7'TButton'#15 +#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'I'#11'ClientWidth'#3#6#2#8'Ta'
+'btnPopulateGrid'#4'Left'#3#136#1#6'Height'#2#31#3'Top'#2#24#5'Width'#2'x'#7 +'bOrder'#2#0#0#9'TCheckBox'#13'CbShowHeaders'#4'Left'#2#8#6'Height'#2#19#3'T'
+'Caption'#6#13'Populate Grid'#7'OnClick'#7#20'btnPopulateGridClick'#8'TabOrd' +'op'#2#11#5'Width'#2']'#7'Caption'#6#12'Show headers'#7'Checked'#9#7'OnClick'
+'er'#2#0#7'Visible'#8#0#0#9'TCheckBox'#13'CbShowHeaders'#4'Left'#2#8#6'Heigh' +#7#18'CbShowHeadersClick'#5'State'#7#9'cbChecked'#8'TabOrder'#2#0#0#0#9'TChe'
+'t'#2#24#3'Top'#2#11#5'Width'#2't'#7'Caption'#6#12'Show headers'#7'Checked'#9 +'ckBox'#15'CbShowGridLines'#4'Left'#2#8#6'Height'#2#19#3'Top'#2'$'#5'Width'#2
+#7'OnClick'#7#18'CbShowHeadersClick'#5'State'#7#9'cbChecked'#8'TabOrder'#2#1 +'d'#7'Caption'#6#15'Show grid lines'#7'Checked'#9#7'OnClick'#7#20'CbShowGrid'
+#0#0#9'TCheckBox'#15'CbShowGridLines'#4'Left'#2#8#6'Height'#2#24#3'Top'#2'$' +'LinesClick'#5'State'#7#9'cbChecked'#8'TabOrder'#2#1#0#0#9'TSpinEdit'#12'EdF'
+#5'Width'#2'}'#7'Caption'#6#15'Show grid lines'#7'Checked'#9#7'OnClick'#7#20 +'rozenCols'#4'Left'#3#238#0#6'Height'#2#23#3'Top'#2#8#5'Width'#2'4'#8'OnChan'
+'CbShowGridLinesClick'#5'State'#7#9'cbChecked'#8'TabOrder'#2#2#0#0#9'TSpinEd' +'ge'#7#18'EdFrozenColsChange'#8'TabOrder'#2#2#0#0#9'TSpinEdit'#12'EdFrozenRo'
+'it'#12'EdFrozenCols'#4'Left'#3#238#0#6'Height'#2#28#3'Top'#2#8#5'Width'#2'4' +'ws'#4'Left'#3#238#0#6'Height'#2#23#3'Top'#2''''#5'Width'#2'4'#8'OnChange'#7
+#8'OnChange'#7#18'EdFrozenColsChange'#8'TabOrder'#2#3#0#0#9'TSpinEdit'#12'Ed' +#18'EdFrozenRowsChange'#8'TabOrder'#2#3#0#0#6'TLabel'#6'Label1'#4'Left'#3#152
+'FrozenRows'#4'Left'#3#238#0#6'Height'#2#28#3'Top'#2''''#5'Width'#2'4'#8'OnC' +#0#6'Height'#2#15#3'Top'#2#13#5'Width'#2'>'#7'Caption'#6#12'Frozen cols:'#12
+'hange'#7#18'EdFrozenRowsChange'#8'TabOrder'#2#4#0#0#6'TLabel'#6'Label1'#4'L' +'FocusControl'#7#12'EdFrozenCols'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4
+'eft'#3#152#0#6'Height'#2#20#3'Top'#2#13#5'Width'#2'M'#7'Caption'#6#12'Froze' +'Left'#3#153#0#6'Height'#2#15#3'Top'#2'('#5'Width'#2'B'#7'Caption'#6#12'Froz'
+'n cols:'#12'FocusControl'#7#12'EdFrozenCols'#11'ParentColor'#8#0#0#6'TLabel' +'en rows:'#12'FocusControl'#7#12'EdFrozenRows'#11'ParentColor'#8#0#0#0#12'TP'
+#6'Label2'#4'Left'#3#153#0#6'Height'#2#20#3'Top'#2'('#5'Width'#2'R'#7'Captio' +'ageControl'#12'PageControl1'#4'Left'#2#0#6'Height'#3#241#0#3'Top'#2'4'#5'Wi'
+'n'#6#12'Frozen rows:'#12'FocusControl'#7#12'EdFrozenRows'#11'ParentColor'#8 +'dth'#3#6#2#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIndex'
+#0#0#0#12'TPageControl'#12'PageControl1'#4'Left'#2#0#6'Height'#3#6#1#3'Top'#2 +#2#0#8'TabOrder'#2#1#8'OnChange'#7#18'PageControl1Change'#0#9'TTabSheet'#9'T'
+#26#5'Width'#3#6#2#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'Ta' +'abSheet1'#7'Caption'#6#6'Sheet1'#12'ClientHeight'#3#213#0#11'ClientWidth'#3
+'bIndex'#2#0#8'TabOrder'#2#1#8'OnChange'#7#18'PageControl1Change'#0#9'TTabSh' +#254#1#0#15'TsWorksheetGrid'#15'sWorksheetGrid1'#4'Left'#2#0#6'Height'#3#213
+'eet'#9'TabSheet1'#7'Caption'#6#6'Sheet1'#12'ClientHeight'#3#229#0#11'Client' +#0#3'Top'#2#0#5'Width'#3#254#1#10'FrozenCols'#2#0#10'FrozenRows'#2#0#5'Align'
+'Width'#3#254#1#0#15'TsWorksheetGrid'#15'sWorksheetGrid1'#4'Left'#2#0#6'Heig' +#7#8'alClient'#8'ColCount'#2#2#14'ExtendedSelect'#8#7'Options'#11#15'goFixed'
+'ht'#3#229#0#3'Top'#2#0#5'Width'#3#254#1#5'Align'#7#8'alClient'#8'ColCount'#2 +'VertLine'#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#13'goRangeSelec'
+#2#14'ExtendedSelect'#8#7'Options'#11#15'goFixedVertLine'#15'goFixedHorzLine' +'t'#11'goRowSizing'#11'goColSizing'#15'goThumbTracking'#14'goSmoothScroll'#16
+#10'goVertLine'#10'goHorzLine'#13'goRangeSelect'#11'goRowSizing'#11'goColSiz' +'goFixedColSizing'#0#8'RowCount'#2#2#8'TabOrder'#2#0#10'TitleStyle'#7#8'tsNa'
+'ing'#15'goThumbTracking'#14'goSmoothScroll'#16'goFixedColSizing'#0#8'RowCou' +'tive'#12'OnSelectCell'#7#25'sWorksheetGrid1SelectCell'#9'ColWidths'#1#2'*'#2
+'nt'#2#2#8'TabOrder'#2#0#10'TitleStyle'#7#8'tsNative'#9'ColWidths'#1#2'8'#2
+'@'#0#0#0#0#0#8'TToolBar'#8'ToolBar1'#4'Left'#2#0#6'Height'#2#26#3'Top'#2#0#5 +'@'#0#0#0#0#0#8'TToolBar'#8'ToolBar1'#4'Left'#2#0#6'Height'#2#26#3'Top'#2#0#5
+'Width'#3#6#2#12'ButtonHeight'#2#24#7'Caption'#6#8'ToolBar1'#11'EdgeBorders' +'Width'#3#6#2#12'ButtonHeight'#2#24#7'Caption'#6#8'ToolBar1'#11'EdgeBorders'
+#11#0#6'Images'#7#10'ImageList1'#8'TabOrder'#2#2#0#11'TToolButton'#11'ToolBu' +#11#0#6'Images'#7#10'ImageList1'#8'TabOrder'#2#2#0#11'TToolButton'#11'ToolBu'
+'tton1'#4'Left'#2#1#3'Top'#2#0#6'Action'#7#6'AcOpen'#0#0#11'TToolButton'#11 +'tton1'#4'Left'#2#1#3'Top'#2#0#6'Action'#7#6'AcOpen'#0#0#11'TToolButton'#11
+'ToolButton2'#4'Left'#2#24#3'Top'#2#0#6'Action'#7#8'AcSaveAs'#0#0#11'TToolBu' +'ToolButton2'#4'Left'#2#24#3'Top'#2#0#6'Action'#7#8'AcSaveAs'#0#0#11'TToolBu'
+'tton'#11'ToolButton3'#4'Left'#2'4'#3'Top'#2#0#6'Action'#7#6'AcQuit'#0#0#11 +'tton'#11'ToolButton3'#4'Left'#2'P'#3'Top'#2#0#6'Action'#7#6'AcQuit'#0#0#11
+'TToolButton'#11'ToolButton5'#4'Left'#2'/'#3'Top'#2#0#5'Width'#2#5#7'Caption' +'TToolButton'#11'ToolButton5'#4'Left'#2'/'#3'Top'#2#0#5'Width'#2#5#7'Caption'
+#6#11'ToolButton5'#5'Style'#7#10'tbsDivider'#0#0#0#11'TOpenDialog'#11'OpenDi' +#6#11'ToolButton5'#5'Style'#7#10'tbsDivider'#0#0#11'TToolButton'#11'ToolButt'
+'alog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#192'Excel spreadsheet (*.xls)|*' +'on4'#4'Left'#2'4'#3'Top'#2#0#6'Action'#7#6'AcEdit'#0#0#11'TToolButton'#11'T'
+'.xls|Excel XML spreadsheet (*.xlsx)|*.xlxs|LibreOffice/OpenOffice spreadshe' +'oolButton6'#4'Left'#2'K'#3'Top'#2#0#5'Width'#2#5#7'Caption'#6#11'ToolButton'
+'et (*.ods)|*.ods|Wikitable (pipes) (.wikitable_pipes)|.wikitable_pipes|All ' +'6'#5'Style'#7#10'tbsDivider'#0#0#0#8'TToolBar'#13'FormatToolBar'#4'Left'#2#0
+'files (*.*)|*.*'#7'Options'#11#20'ofExtensionDifferent'#14'ofEnableSizing' +#6'Height'#2#26#3'Top'#2#26#5'Width'#3#6#2#7'Caption'#6#13'FormatToolBar'#6
+#12'ofViewDetail'#0#4'left'#2'@'#3'top'#3#176#0#0#0#11'TSaveDialog'#11'SaveD' +'Images'#7#10'ImageList1'#8'TabOrder'#2#3#0#11'TToolButton'#12'ToolButton10'
+'ialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#185'Excel spreadsheet (*.xls)|' +#4'Left'#3#168#0#3'Top'#2#2#6'Action'#7#11'AcLeftAlign'#0#0#11'TToolButton'
+'*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffice/OpenOffice spreadsh' +#12'ToolButton12'#4'Left'#3#191#0#3'Top'#2#2#6'Action'#7#16'AcHorCenterAlign'
+'eet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wikimedia)|*.wikitable_' +#0#0#11'TToolButton'#12'ToolButton13'#4'Left'#3#214#0#3'Top'#2#2#6'Action'#7
+'wikimedia'#7'Options'#11#20'ofExtensionDifferent'#14'ofEnableSizing'#12'ofV' +#12'AcRightAlign'#0#0#9'TComboBox'#12'FontComboBox'#4'Left'#2#1#6'Height'#2
+'iewDetail'#0#4'left'#3#176#0#3'top'#3#176#0#0#0#9'TMainMenu'#9'MainMenu1'#6 +#23#3'Top'#2#2#5'Width'#2#127#10'ItemHeight'#2#15#8'OnSelect'#7#18'FontCombo'
+'Images'#7#10'ImageList1'#4'left'#3' '#1#3'top'#3#176#0#0#9'TMenuItem'#7'mnu' +'BoxSelect'#8'TabOrder'#2#0#0#0#9'TComboBox'#16'FontSizeComboBox'#4'Left'#3
+'File'#7'Caption'#6#5'&File'#0#9'TMenuItem'#7'mnuOpen'#6'Action'#7#6'AcOpen' +#128#0#6'Height'#2#23#3'Top'#2#2#5'Width'#2'('#10'ItemHeight'#2#15#13'Items.'
+#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16 +'Strings'#1#6#1'8'#6#1'9'#6#2'10'#6#2'11'#6#2'12'#6#2'14'#6#2'16'#6#2'18'#6#2
+#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0',' +'20'#6#2'24'#0#8'OnSelect'#7#18'FontComboBoxSelect'#8'TabOrder'#2#1#0#0#0#11
+#134#216#0'-'#136#216#247'-'#135#216#247'-'#136#216#247'-'#136#216#247'-'#136 +'TOpenDialog'#11'OpenDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#192'Excel'
+#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136 +' spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlxs|LibreOffic'
+#216#247'-'#135#216#247'-'#136#216#247','#134#216#0#255#255#255#0#255#255#255 +'e/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (pipes) (.wikitable_pipes)'
+#0'3'#142#217#251#220#240#250#255#152#225#246#255#149#224#246#255#146#223#246 +'|.wikitable_pipes|All files (*.*)|*.*'#7'Options'#11#20'ofExtensionDifferen'
+#255#142#222#245#255#137#220#245#255#133#218#244#255#128#217#244#255'z'#215 +'t'#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#2'@'#3'top'#3#176#0#0#0#11
+#243#255't'#213#243#255'p'#211#242#255#194#234#248#255'5'#148#218#255#255#255 +'TSaveDialog'#11'SaveDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#185'Excel'
+#255#0#255#255#255#0'5'#148#218#247#239#250#254#255#147#229#248#255#143#228 +' spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffic'
+#248#255#137#227#248#255#130#225#247#255'z'#223#247#255'q'#222#246#255'g'#219 +'e/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wi'
+#245#255'['#216#244#255'M'#212#243#255'@'#209#242#255#202#242#251#255'5'#148 +'kimedia)|*.wikitable_wikimedia'#7'Options'#11#17'ofOverwritePrompt'#20'ofEx'
+#218#255#255#255#255#0#255#255#255#0'6'#154#218#248#242#250#253#255#148#230 +'tensionDifferent'#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#3#176#0#3't'
,#248#255#146#229#248#255#144#229#248#255#139#227#248#255#134#226#247#255#127 +'op'#3#176#0#0#0#9'TMainMenu'#9'MainMenu1'#6'Images'#7#10'ImageList1'#4'left'
+#225#247#255'w'#222#246#255'l'#220#246#255'^'#217#244#255'O'#213#243#255#204 ,#3' '#1#3'top'#2'@'#0#9'TMenuItem'#7'mnuFile'#7'Caption'#6#5'&File'#0#9'TMen'
+#242#251#255'5'#148#218#255#255#255#255#0#255#255#255#0'6'#161#218#249#246 +'uItem'#7'mnuOpen'#6'Action'#7#6'AcOpen'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0
+#252#254#255#148#229#248#255#147#229#248#255#147#229#248#255#145#229#248#255 +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4
+#147#219#233#255#147#215#227#255#147#210#220#255#144#206#215#255#140#200#207 +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0','#134#216#0'-'#136#216#247'-'#135#216
+#255#134#193#198#255#201#216#214#255'5'#148#218#255#197'tD'#232#202#127'S' +#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216
+#241'7'#166#218#250#254#255#255#255#248#253#255#255#246#253#255#255#245#252 +#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#135#216#247'-'#136#216
+#255#255#243#252#254#255#154#228#244#255#154#230#247#255#155#230#246#255#157 +#247','#134#216#0#255#255#255#0#255#255#255#0'3'#142#217#251#220#240#250#255
+#229#245#255#158#229#245#255#159#229#244#255#218#243#248#255'5'#148#218#255 +#152#225#246#255#149#224#246#255#146#223#246#255#142#222#245#255#137#220#245
+#253#244#238#255#202#128'T'#249'5'#171#218#250#232#246#251#255'p'#188#231#255 +#255#133#218#244#255#128#217#244#255'z'#215#243#255't'#213#243#255'p'#211#242
+'U'#170#226#255'M'#165#224#255#145#201#235#255#250#243#239#255#253#254#253 +#255#194#234#248#255'5'#148#218#255#255#255#255#0#255#255#255#0'5'#148#218
+#255#255#253#252#255#255#253#252#255#254#253#252#255#254#252#251#255#254#254 +#247#239#250#254#255#147#229#248#255#143#228#248#255#137#227#248#255#130#225
+#253#255'5'#148#218#255#239#242#232#255#206#129'V'#255'6'#170#218#242#241#250 +#247#255'z'#223#247#255'q'#222#246#255'g'#219#245#255'['#216#244#255'M'#212
+#253#255#148#222#245#255#147#220#244#255'd'#188#233#255'5'#148#218#255'5'#148 +#243#255'@'#209#242#255#202#242#251#255'5'#148#218#255#255#255#255#0#255#255
+#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148 +#255#0'6'#154#218#248#242#250#253#255#148#230#248#255#146#229#248#255#144#229
+#218#255'5'#148#218#255'5'#148#218#255#251#246#239#255#204#131'U'#254'5'#175 +#248#255#139#227#248#255#134#226#247#255#127#225#247#255'w'#222#246#255'l'
+#218#240#247#252#254#255#142#228#248#255#145#222#245#255#159#224#245#255#172 +#220#246#255'^'#217#244#255'O'#213#243#255#204#242#251#255'5'#148#218#255#255
+#225#246#255#202#132'R'#255#255#247#241#255#255#233#217#255#255#234#219#255 +#255#255#0#255#255#255#0'6'#161#218#249#246#252#254#255#148#229#248#255#147
+#255#233#217#255#255#231#215#255#255#229#210#255#255#226#203#255#255#247#241 +#229#248#255#147#229#248#255#145#229#248#255#147#219#233#255#147#215#227#255
+#255#203#133'U'#254'6'#179#218#248#253#254#254#255#254#255#255#255#254#254 +#147#210#220#255#144#206#215#255#140#200#207#255#134#193#198#255#201#216#214
+#255#255#253#254#255#255#254#255#255#255#228#186#145#255#255#247#240#255#255 +#255'5'#148#218#255#197'tD'#232#202#127'S'#241'7'#166#218#250#254#255#255#255
+#231#213#255#253#231#214#255#253#230#212#255#252#228#208#255#251#227#203#255 +#248#253#255#255#246#253#255#255#245#252#255#255#243#252#254#255#154#228#244
+#250#220#194#255#254#243#232#255#204#134'V'#254'4'#180#217#208'^'#194#225#250 +#255#154#230#247#255#155#230#246#255#157#229#245#255#158#229#245#255#159#229
+'`'#195#226#250'`'#195#226#250'`'#195#226#250'_'#195#226#250#228#187#145#255 +#244#255#218#243#248#255'5'#148#218#255#253#244#238#255#202#128'T'#249'5'#171
+#255#247#242#255#254#231#213#255#254#231#213#255#253#229#209#255#250#224#202 +#218#250#232#246#251#255'p'#188#231#255'U'#170#226#255'M'#165#224#255#145#201
+#255#249#222#196#255#247#217#188#255#253#242#231#255#204#135'W'#254#255#255 +#235#255#250#243#239#255#253#254#253#255#255#253#252#255#255#253#252#255#254
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#253#252#255#254#252#251#255#254#254#253#255'5'#148#218#255#239#242#232#255
+#228#187#146#255#254#247#241#255#252#229#210#255#252#228#209#255#251#226#204 +#206#129'V'#255'6'#170#218#242#241#250#253#255#148#222#245#255#147#220#244
+#255#249#221#196#255#246#215#187#255#243#209#175#255#250#239#228#255#204#135 +#255'd'#188#233#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218
+'X'#254#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218
+#255#255#255#0#228#187#146#255#254#246#240#255#252#226#205#255#252#227#205 +#255#251#246#239#255#204#131'U'#254'5'#175#218#240#247#252#254#255#142#228
+#255#250#223#200#255#247#217#188#255#245#233#221#255#250#243#235#255#251#248 +#248#255#145#222#245#255#159#224#245#255#172#225#246#255#202#132'R'#255#255
+#243#255#202#131'S'#254#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 +#247#241#255#255#233#217#255#255#234#219#255#255#233#217#255#255#231#215#255
+#0#255#255#255#0#255#255#255#0#228#187#147#255#254#245#237#255#252#222#197 +#255#229#210#255#255#226#203#255#255#247#241#255#203#133'U'#254'6'#179#218
+#255#251#224#199#255#249#220#194#255#245#211#180#255#254#249#243#255#250#226 +#248#253#254#254#255#254#255#255#255#254#254#255#255#253#254#255#255#254#255
+#196#255#236#193#147#255#195'}H'#147#255#255#255#0#255#255#255#0#255#255#255 +#255#255#228#186#145#255#255#247#240#255#255#231#213#255#253#231#214#255#253
+#0#255#255#255#0#255#255#255#0#255#255#255#0#229#190#150#255#255#255#254#255 +#230#212#255#252#228#208#255#251#227#203#255#250#220#194#255#254#243#232#255
+#253#243#233#255#253#243#234#255#252#242#232#255#250#239#227#255#250#242#231 +#204#134'V'#254'4'#180#217#208'^'#194#225#250'`'#195#226#250'`'#195#226#250
+#255#234#187#136#255#207#133'U'#179#180'i='#12#255#255#255#0#255#255#255#0 +'`'#195#226#250'_'#195#226#250#228#187#145#255#255#247#242#255#254#231#213
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#234#195#157#255#230 +#255#254#231#213#255#253#229#209#255#250#224#202#255#249#222#196#255#247#217
+#191#150#255#228#187#146#255#228#187#146#255#209#160'l'#245#208#158'm'#246 +#188#255#253#242#231#255#204#135'W'#254#255#255#255#0#255#255#255#0#255#255
+#204#150'_'#218#196'yB~'#178'g<'#9#255#255#255#0#7'OnClick'#7#13'acOpenExecu' +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#146#255#254#247#241
+'te'#0#0#9'TMenuItem'#9'mnuSaveAs'#6'Action'#7#8'AcSaveAs'#11'Bitmap.Data'#10 +#255#252#229#210#255#252#228#209#255#251#226#204#255#249#221#196#255#246#215
+':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0 +#187#255#243#209#175#255#250#239#228#255#204#135'X'#254#255#255#255#0#255#255
+' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#186'j6'#0#185'i5'#181 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#146
+#184'i5'#238#183'h5'#255#181'h5'#255#180'g4'#255#178'f4'#255#176'e3'#255#174 +#255#254#246#240#255#252#226#205#255#252#227#205#255#250#223#200#255#247#217
+'d3'#255#172'c2'#255#170'b2'#255#169'a2'#255#168'`1'#255#167'`1'#254#166'`1' +#188#255#245#233#221#255#250#243#235#255#251#248#243#255#202#131'S'#254#255
+#241#168'a1'#196#186'j5'#222#235#198#173#255#234#197#173#255#254#251#248#255
+#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248
+#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#200#154
+'|'#255#199#152'y'#255#167'`1'#237#186'k7'#254#237#202#179#255#224#162'z'#255
+#254#250#247#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255
+'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255#253#249#246#255
+#202#141'e'#255#201#155'|'#255#167'`1'#254#187'l8'#255#238#204#182#255#225
+#162'z'#255#254#250#247#255#191#220#194#255#191#220#194#255#191#220#194#255
+#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194
+#255#253#249#246#255#205#144'h'#255#204#158#129#255#168'a2'#255#187'k8'#255
+#239#206#184#255#225#162'y'#255#254#250#247#255'b'#192#136#255'b'#192#136#255
+'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255
+'b'#192#136#255#253#249#246#255#207#147'j'#255#206#163#132#255#170'a2'#255
+#186'j6'#255#239#208#187#255#226#162'z'#255#254#251#248#255#254#251#248#255
+#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248
+#255#254#251#248#255#254#251#248#255#254#251#248#255#211#150'm'#255#210#167
+#138#255#171'b2'#255#187'j6'#255#240#210#190#255#226#163'z'#255#226#163'z'
,#255#225#163'z'#255#226#163'{'#255#225#163'{'#255#224#161'x'#255#222#159'w'
+#255#221#159'v'#255#220#157't'#255#217#155'r'#255#216#153'q'#255#214#153'p'
+#255#213#171#142#255#173'c3'#255#187'j6'#255#242#213#194#255#227#163'z'#255
+#227#163'z'#255#226#163'{'#255#226#163'{'#255#226#164'{'#255#225#162'y'#255
+#224#161'x'#255#222#160'w'#255#222#158'u'#255#220#157't'#255#218#155's'#255
+#217#155's'#255#218#176#149#255#175'd3'#255#187'j6'#255#242#216#197#255#227
+#164'{'#255#227#163'z'#255#227#164'z'#255#226#164'{'#255#226#163'{'#255#225
+#163'{'#255#225#162'y'#255#223#160'w'#255#222#159'v'#255#221#158't'#255#219
+#156'r'#255#220#157't'#255#221#181#154#255#177'e4'#255#187'k6'#255#244#217
+#199#255#230#166'}'#255#200#140'd'#255#201#141'e'#255#201#142'g'#255#203#146
+'l'#255#203#146'm'#255#202#144'i'#255#200#140'e'#255#200#140'd'#255#200#140
+'d'#255#200#140'd'#255#218#156't'#255#225#186#159#255#179'f4'#255#187'k6'#254
+#244#220#201#255#231#167'}'#255#249#236#225#255#249#236#225#255#249#237#227
+#255#252#244#238#255#253#250#247#255#253#247#243#255#250#237#229#255#247#231
+#219#255#247#229#217#255#246#229#216#255#222#160'w'#255#228#190#164#255#180
+'g4'#255#188'k6'#250#245#221#204#255#231#168'~'#255#250#240#232#255#250#240
+#232#255#201#141'f'#255#250#240#233#255#253#248#243#255#254#250#248#255#252
+#244#239#255#249#233#223#255#247#231#219#255#247#229#217#255#224#162'x'#255
+#231#194#169#255#182'h5'#255#188'k6'#240#246#223#208#255#232#168'~'#255#252
+#246#241#255#252#246#241#255#200#140'd'#255#250#241#233#255#251#244#238#255
+#253#250#247#255#253#249#246#255#250#240#232#255#248#232#221#255#247#230#219
+#255#225#163'z'#255#239#213#195#255#183'i5'#254#188'k6'#216#246#223#209#255
+#233#170#128#255#254#250#246#255#253#250#246#255#200#140'd'#255#251#243#238
+#255#251#241#234#255#252#246#242#255#254#251#248#255#252#246#241#255#249#236
+#226#255#248#231#219#255#238#208#186#255#236#208#189#255#187'p>'#248#188'k6'
+#155#246#224#209#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249
+#246#255#252#245#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253
+#250#247#255#251#241#235#255#248#233#223#254#236#208#189#251#201#137'^'#236
+#181'i5c'#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187'k6'
+#254#187'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:'#255
+#187'k8'#239#187'p>'#203#182'i5T'#255#255#255#0#7'OnClick'#7#15'acSaveAsExec'
+'ute'#0#0#9'TMenuItem'#9'MenuItem1'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#7'mnu'
+'Quit'#6'Action'#7#6'AcQuit'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0
+#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0
+#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#29'c'#155#22#25'`'#152'9'#20']'#149'b'#16'Z'#146#136#13'X'#144#164#19'\'#146
+#252#12'W'#143#237#153#153#153#255'qqq'#255'TTT'#255'QQQ'#255'OOO'#255'LLL'
+#255'JJJ'#255'GGG'#255'EEE'#255'%g'#157#255'2t'#168#255'=|'#175#255'G'#132
+#181#255'N'#138#186#255'>~'#173#255#12'W'#143#234#255#255#255#0#255#255#255#0
+'XXX'#255#162#162#162#255#162#162#162#255#163#163#163#255#164#164#164#255#164
+#164#164#255#165#165#165#255'/o'#165#255'x'#171#210#255'x'#171#211#255's'#167
+#209#255'i'#160#205#255'@'#127#174#255#15'Y'#145#234#255#255#255#0#255#255
+#255#0'\\\'#255#161#161#161#255'<s@'#255#160#161#161#255#163#163#163#255#163
+#163#163#255#164#164#164#255'6t'#170#255'}'#175#212#255'['#154#201#255'T'#149
+#199#255'X'#150#200#255'A'#128#174#255#19'\'#148#234#255#255#255#0#255#255
+#255#0'```'#255#160#160#160#255'=vA'#255'6q9'#255#162#162#162#255#162#162#162
+#255#163#163#163#255'=y'#176#255#130#179#215#255'b'#159#204#255'Z'#154#201
+#255'^'#155#202#255'C'#129#175#255#25'`'#152#234'7'#130'>'#255'4~;'#255'1y7'
+#255'.u4'#255'I'#145'P'#255'F'#143'L'#255'9s='#255#161#161#161#255#162#162
+#162#255'E~'#180#255#136#183#217#255'g'#163#207#255'a'#158#204#255'c'#159#204
+#255'E'#131#177#255#31'd'#156#234';'#135'B'#255#137#203#146#255#132#200#141
+#255#128#198#136#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?'#255#161
+#161#161#255'L'#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209#255'_'
+#180#223#255'G'#133#177#255'%i'#161#234'>'#139'F'#255#143#206#153#255'}'#198
+#135#255'x'#195#129#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'
+#255'T'#127'W'#255'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225
+#255'K'#212#255#255'B'#139#184#255',n'#166#234'A'#144'J'#255#148#210#159#255
+#145#208#154#255#141#205#150#255#137#203#146#255#132#200#141#255'Q'#152'X'
+#255'A|F'#255#159#159#159#255'Z'#142#196#255#152#195#224#255'|'#179#215#255
+'t'#175#214#255'^'#196#237#255'K'#136#179#255'4s'#171#234'D'#148'M'#255'B'
+#145'K'#255'?'#141'H'#255'='#137'E'#255']'#164'e'#255'Z'#160'a'#255'E'#131'K'
+#255#158#158#158#255#158#158#158#255'`'#146#201#255#158#199#226#255#131#184
+#218#255'}'#180#215#255'~'#179#215#255'O'#137#180#255';y'#177#234#255#255#255
,#0#255#255#255#0'www'#255#154#154#154#255'='#138'E'#255'I'#138'O'#255#156#156
+#156#255#157#157#157#255#157#157#157#255'f'#150#204#255#162#203#227#255#137
+#189#220#255#131#185#218#255#132#185#218#255'Q'#139#181#255'C~'#182#234#255
+#255#255#0#255#255#255#0'zzz'#255#153#153#153#255'R'#145'Y'#255#153#154#153
+#255#155#155#155#255#156#156#156#255#156#156#156#255'l'#154#208#255#167#206
+#229#255#143#193#223#255#137#189#220#255#139#189#220#255'S'#141#182#255'K'
+#132#188#234#255#255#255#0#255#255#255#0'}}}'#255#153#153#153#255#153#153#153
+#255#154#154#154#255#154#154#154#255#155#155#155#255#155#155#155#255'o'#157
+#211#255#170#209#231#255#171#209#231#255#152#199#225#255#145#194#222#255'V'
+#143#183#255'R'#137#193#234#255#255#255#0#255#255#255#0#128#128#128#255'~~~'
+#255'|||'#255'zzz'#255'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214
+#255#135#178#220#255#171#211#232#255#169#208#230#255'X'#144#184#255'Y'#142
+#198#234#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0'p'#158#214#219'm'#156#212#255#133#177#218#255'Z'#145#185#255'`'
+#147#203#234#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0'm'#156#212#137'j'#154#210#251'f'
+#151#207#238#7'OnClick'#7#13'acQuitExecute'#0#0#0#0#10'TImageList'#10'ImageL'
+'ist1'#4'left'#3#176#0#3'top'#2'x'#6'Bitmap'#10#14#12#0#0'Li'#3#0#0#0#16#0#0
+#0#16#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#234#195#157#255#230#191#150#255#228#187#146#255#228#187
+#146#255#209#160'l'#245#208#158'm'#246#204#150'_'#218#196'yB~'#178'g<'#9#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#228#187#147#255#254#245#237#255#252#222#197#255#251#224#199#255#249
+#220#194#255#245#211#180#255#254#249#243#255#250#226#196#255#236#193#147#255
+#195'}H'#147#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#229#190#150#255#255#255#254#255#253#243#233#255#253#243 +#255#0#255#255#255#0#229#190#150#255#255#255#254#255#253#243#233#255#253#243
+#234#255#252#242#232#255#250#239#227#255#250#242#231#255#234#187#136#255#207 +#234#255#252#242#232#255#250#239#227#255#250#242#231#255#234#187#136#255#207
+#133'U'#179#180'i='#12#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 +#133'U'#179#180'i='#12#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#228#187#147#255#254#245#237#255#252#222#197 +#0#255#255#255#0#255#255#255#0#234#195#157#255#230#191#150#255#228#187#146
+#255#251#224#199#255#249#220#194#255#245#211#180#255#254#249#243#255#250#226 +#255#228#187#146#255#209#160'l'#245#208#158'm'#246#204#150'_'#218#196'yB~'
+#196#255#236#193#147#255#195'}H'#147#255#255#255#0#255#255#255#0#255#255#255 +#178'g<'#9#255#255#255#0#7'OnClick'#7#13'acOpenExecute'#0#0#9'TMenuItem'#9'm'
+#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#146#255#254#246#240#255 +'nuSaveAs'#6'Action'#7#8'AcSaveAs'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'
+#252#226#205#255#252#227#205#255#250#223#200#255#247#217#188#255#245#233#221 +#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0
+#255#250#243#235#255#251#248#243#255#202#131'S'#254#255#255#255#0#255#255#255 +'d'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#186'j6'#0#185'i5'#181#184'i5'#238#183'h5'
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#146#255 +#255#181'h5'#255#180'g4'#255#178'f4'#255#176'e3'#255#174'd3'#255#172'c2'#255
+#254#247#241#255#252#229#210#255#252#228#209#255#251#226#204#255#249#221#196 +#170'b2'#255#169'a2'#255#168'`1'#255#167'`1'#254#166'`1'#241#168'a1'#196#186
+#255#246#215#187#255#243#209#175#255#250#239#228#255#204#135'X'#254'4'#180 +'j5'#222#235#198#173#255#234#197#173#255#254#251#248#255#254#251#248#255#254
+#217#208'^'#194#225#250'`'#195#226#250'`'#195#226#250'`'#195#226#250'_'#195 +#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255
+#226#250#228#187#145#255#255#247#242#255#254#231#213#255#254#231#213#255#253 +#254#251#248#255#254#251#248#255#254#251#248#255#200#154'|'#255#199#152'y'
+#229#209#255#250#224#202#255#249#222#196#255#247#217#188#255#253#242#231#255 ,#255#167'`1'#237#186'k7'#254#237#202#179#255#224#162'z'#255#254#250#247#255
+#204#135'W'#254'6'#179#218#248#253#254#254#255#254#255#255#255#254#254#255 +'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255
+#255#253#254#255#255#254#255#255#255#228#186#145#255#255#247#240#255#255#231 +'b'#192#136#255'b'#192#136#255'b'#192#136#255#253#249#246#255#202#141'e'#255
+#213#255#253#231#214#255#253#230#212#255#252#228#208#255#251#227#203#255#250 +#201#155'|'#255#167'`1'#254#187'l8'#255#238#204#182#255#225#162'z'#255#254
+#220#194#255#254#243#232#255#204#134'V'#254'5'#175#218#240#247#252#254#255 +#250#247#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255
+#142#228#248#255#145#222#245#255#159#224#245#255#172#225#246#255#202#132'R' +#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255#253#249#246
+#255#255#247#241#255#255#233#217#255#255#234#219#255#255#233#217#255#255#231 +#255#205#144'h'#255#204#158#129#255#168'a2'#255#187'k8'#255#239#206#184#255
+#215#255#255#229#210#255#255#226#203#255#255#247#241#255#203#133'U'#254'6' +#225#162'y'#255#254#250#247#255'b'#192#136#255'b'#192#136#255'b'#192#136#255
+#170#218#242#241#250#253#255#148#222#245#255#147#220#244#255'd'#188#233#255 +'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255
+'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255 +#253#249#246#255#207#147'j'#255#206#163#132#255#170'a2'#255#186'j6'#255#239
+'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255#251#246#239#255 +#208#187#255#226#162'z'#255#254#251#248#255#254#251#248#255#254#251#248#255
+#204#131'U'#254'5'#171#218#250#232#246#251#255'p'#188#231#255'U'#170#226#255
+'M'#165#224#255#145#201#235#255#250#243#239#255#253#254#253#255#255#253#252
+#255#255#253#252#255#254#253#252#255#254#252#251#255#254#254#253#255'5'#148
+#218#255#239#242#232#255#206#129'V'#255'7'#166#218#250#254#255#255#255#248
+#253#255#255#246#253#255#255#245#252#255#255#243#252#254#255#154#228#244#255
+#154#230#247#255#155#230#246#255#157#229#245#255#158#229#245#255#159#229#244
+#255#218#243#248#255'5'#148#218#255#253#244#238#255#202#128'T'#249'6'#161#218
+#249#246#252#254#255#148#229#248#255#147#229#248#255#147#229#248#255#145#229
+#248#255#147#219#233#255#147#215#227#255#147#210#220#255#144#206#215#255#140
+#200#207#255#134#193#198#255#201#216#214#255'5'#148#218#255#197'tD'#232#202
+#127'S'#241'6'#154#218#248#242#250#253#255#148#230#248#255#146#229#248#255
+#144#229#248#255#139#227#248#255#134#226#247#255#127#225#247#255'w'#222#246
+#255'l'#220#246#255'^'#217#244#255'O'#213#243#255#204#242#251#255'5'#148#218
+#255#255#255#255#0#255#255#255#0'5'#148#218#247#239#250#254#255#147#229#248
+#255#143#228#248#255#137#227#248#255#130#225#247#255'z'#223#247#255'q'#222
,#246#255'g'#219#245#255'['#216#244#255'M'#212#243#255'@'#209#242#255#202#242
+#251#255'5'#148#218#255#255#255#255#0#255#255#255#0'3'#142#217#251#220#240
+#250#255#152#225#246#255#149#224#246#255#146#223#246#255#142#222#245#255#137
+#220#245#255#133#218#244#255#128#217#244#255'z'#215#243#255't'#213#243#255'p'
+#211#242#255#194#234#248#255'5'#148#218#255#255#255#255#0#255#255#255#0','
+#134#216#0'-'#136#216#247'-'#135#216#247'-'#136#216#247'-'#136#216#247'-'#136
+#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136
+#216#247'-'#135#216#247'-'#136#216#247','#134#216#0#255#255#255#0#255#255#255
+#0#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187'k6'#254#187
+'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:'#255#187'k8'
+#239#187'p>'#203#182'i5T'#255#255#255#0#188'k6'#155#246#224#209#255#247#224
+#209#255#254#251#248#255#254#251#247#255#253#249#246#255#252#245#240#255#250
+#240#234#255#251#242#237#255#253#249#246#255#253#250#247#255#251#241#235#255
+#248#233#223#254#236#208#189#251#201#137'^'#236#181'i5c'#188'k6'#216#246#223
+#209#255#233#170#128#255#254#250#246#255#253#250#246#255#200#140'd'#255#251
+#243#238#255#251#241#234#255#252#246#242#255#254#251#248#255#252#246#241#255
+#249#236#226#255#248#231#219#255#238#208#186#255#236#208#189#255#187'p>'#248
+#188'k6'#240#246#223#208#255#232#168'~'#255#252#246#241#255#252#246#241#255
+#200#140'd'#255#250#241#233#255#251#244#238#255#253#250#247#255#253#249#246
+#255#250#240#232#255#248#232#221#255#247#230#219#255#225#163'z'#255#239#213
+#195#255#183'i5'#254#188'k6'#250#245#221#204#255#231#168'~'#255#250#240#232
+#255#250#240#232#255#201#141'f'#255#250#240#233#255#253#248#243#255#254#250
+#248#255#252#244#239#255#249#233#223#255#247#231#219#255#247#229#217#255#224
+#162'x'#255#231#194#169#255#182'h5'#255#187'k6'#254#244#220#201#255#231#167
+'}'#255#249#236#225#255#249#236#225#255#249#237#227#255#252#244#238#255#253
+#250#247#255#253#247#243#255#250#237#229#255#247#231#219#255#247#229#217#255
+#246#229#216#255#222#160'w'#255#228#190#164#255#180'g4'#255#187'k6'#255#244
+#217#199#255#230#166'}'#255#200#140'd'#255#201#141'e'#255#201#142'g'#255#203
+#146'l'#255#203#146'm'#255#202#144'i'#255#200#140'e'#255#200#140'd'#255#200
+#140'd'#255#200#140'd'#255#218#156't'#255#225#186#159#255#179'f4'#255#187'j6'
+#255#242#216#197#255#227#164'{'#255#227#163'z'#255#227#164'z'#255#226#164'{'
+#255#226#163'{'#255#225#163'{'#255#225#162'y'#255#223#160'w'#255#222#159'v'
+#255#221#158't'#255#219#156'r'#255#220#157't'#255#221#181#154#255#177'e4'#255
+#187'j6'#255#242#213#194#255#227#163'z'#255#227#163'z'#255#226#163'{'#255#226
+#163'{'#255#226#164'{'#255#225#162'y'#255#224#161'x'#255#222#160'w'#255#222
+#158'u'#255#220#157't'#255#218#155's'#255#217#155's'#255#218#176#149#255#175
+'d3'#255#187'j6'#255#240#210#190#255#226#163'z'#255#226#163'z'#255#225#163'z'
+#255#226#163'{'#255#225#163'{'#255#224#161'x'#255#222#159'w'#255#221#159'v'
+#255#220#157't'#255#217#155'r'#255#216#153'q'#255#214#153'p'#255#213#171#142
+#255#173'c3'#255#186'j6'#255#239#208#187#255#226#162'z'#255#254#251#248#255
+#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248 +#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248
+#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#211#150 +#255#254#251#248#255#254#251#248#255#211#150'm'#255#210#167#138#255#171'b2'
+'m'#255#210#167#138#255#171'b2'#255#187'k8'#255#239#206#184#255#225#162'y' +#255#187'j6'#255#240#210#190#255#226#163'z'#255#226#163'z'#255#225#163'z'#255
+#255#254#250#247#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136 +#226#163'{'#255#225#163'{'#255#224#161'x'#255#222#159'w'#255#221#159'v'#255
+#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255#253#249#246 +#220#157't'#255#217#155'r'#255#216#153'q'#255#214#153'p'#255#213#171#142#255
+#255#207#147'j'#255#206#163#132#255#170'a2'#255#187'l8'#255#238#204#182#255 +#173'c3'#255#187'j6'#255#242#213#194#255#227#163'z'#255#227#163'z'#255#226
+#225#162'z'#255#254#250#247#255#191#220#194#255#191#220#194#255#191#220#194 +#163'{'#255#226#163'{'#255#226#164'{'#255#225#162'y'#255#224#161'x'#255#222
+#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220 +#160'w'#255#222#158'u'#255#220#157't'#255#218#155's'#255#217#155's'#255#218
+#194#255#253#249#246#255#205#144'h'#255#204#158#129#255#168'a2'#255#186'k7' +#176#149#255#175'd3'#255#187'j6'#255#242#216#197#255#227#164'{'#255#227#163
+#254#237#202#179#255#224#162'z'#255#254#250#247#255'b'#192#136#255'b'#192#136 +'z'#255#227#164'z'#255#226#164'{'#255#226#163'{'#255#225#163'{'#255#225#162
+#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136 +'y'#255#223#160'w'#255#222#159'v'#255#221#158't'#255#219#156'r'#255#220#157
+#255'b'#192#136#255#253#249#246#255#202#141'e'#255#201#155'|'#255#167'`1'#254 +'t'#255#221#181#154#255#177'e4'#255#187'k6'#255#244#217#199#255#230#166'}'
+#186'j5'#222#235#198#173#255#234#197#173#255#254#251#248#255#254#251#248#255 +#255#200#140'd'#255#201#141'e'#255#201#142'g'#255#203#146'l'#255#203#146'm'
+#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248 +#255#202#144'i'#255#200#140'e'#255#200#140'd'#255#200#140'd'#255#200#140'd'
+#255#254#251#248#255#254#251#248#255#254#251#248#255#200#154'|'#255#199#152 +#255#218#156't'#255#225#186#159#255#179'f4'#255#187'k6'#254#244#220#201#255
+'y'#255#167'`1'#237#186'j6'#0#185'i5'#181#184'i5'#238#183'h5'#255#181'h5'#255 +#231#167'}'#255#249#236#225#255#249#236#225#255#249#237#227#255#252#244#238
+#180'g4'#255#178'f4'#255#176'e3'#255#174'd3'#255#172'c2'#255#170'b2'#255#169 +#255#253#250#247#255#253#247#243#255#250#237#229#255#247#231#219#255#247#229
+'a2'#255#168'`1'#255#167'`1'#254#166'`1'#241#168'a1'#196#255#255#255#0#255 +#217#255#246#229#216#255#222#160'w'#255#228#190#164#255#180'g4'#255#188'k6'
+#250#245#221#204#255#231#168'~'#255#250#240#232#255#250#240#232#255#201#141
+'f'#255#250#240#233#255#253#248#243#255#254#250#248#255#252#244#239#255#249
+#233#223#255#247#231#219#255#247#229#217#255#224#162'x'#255#231#194#169#255
+#182'h5'#255#188'k6'#240#246#223#208#255#232#168'~'#255#252#246#241#255#252
+#246#241#255#200#140'd'#255#250#241#233#255#251#244#238#255#253#250#247#255
+#253#249#246#255#250#240#232#255#248#232#221#255#247#230#219#255#225#163'z'
+#255#239#213#195#255#183'i5'#254#188'k6'#216#246#223#209#255#233#170#128#255
+#254#250#246#255#253#250#246#255#200#140'd'#255#251#243#238#255#251#241#234
+#255#252#246#242#255#254#251#248#255#252#246#241#255#249#236#226#255#248#231
+#219#255#238#208#186#255#236#208#189#255#187'p>'#248#188'k6'#155#246#224#209
+#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249#246#255#252#245
+#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253#250#247#255#251
+#241#235#255#248#233#223#254#236#208#189#251#201#137'^'#236#181'i5c'#188'k6q'
+#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187'k6'#254#187'k6'#255#187
+'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:'#255#187'k8'#239#187'p>'
+#203#182'i5T'#255#255#255#0#7'OnClick'#7#15'acSaveAsExecute'#0#0#9'TMenuItem'
+#9'MenuItem1'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#7'mnuQuit'#6'Action'#7#6'Ac'
+'Quit'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0
+#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0
+#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#29'c'#155#22#25'`'
+#152'9'#20']'#149'b'#16'Z'#146#136#13'X'#144#164#19'\'#146#252#12'W'#143#237
+#153#153#153#255'qqq'#255'TTT'#255'QQQ'#255'OOO'#255'LLL'#255'JJJ'#255'GGG'
+#255'EEE'#255'%g'#157#255'2t'#168#255'=|'#175#255'G'#132#181#255'N'#138#186
+#255'>~'#173#255#12'W'#143#234#255#255#255#0#255#255#255#0'XXX'#255#162#162
+#162#255#162#162#162#255#163#163#163#255#164#164#164#255#164#164#164#255#165
+#165#165#255'/o'#165#255'x'#171#210#255'x'#171#211#255's'#167#209#255'i'#160
+#205#255'@'#127#174#255#15'Y'#145#234#255#255#255#0#255#255#255#0'\\\'#255
+#161#161#161#255'<s@'#255#160#161#161#255#163#163#163#255#163#163#163#255#164
+#164#164#255'6t'#170#255'}'#175#212#255'['#154#201#255'T'#149#199#255'X'#150
+#200#255'A'#128#174#255#19'\'#148#234#255#255#255#0#255#255#255#0'```'#255
+#160#160#160#255'=vA'#255'6q9'#255#162#162#162#255#162#162#162#255#163#163
+#163#255'=y'#176#255#130#179#215#255'b'#159#204#255'Z'#154#201#255'^'#155#202
+#255'C'#129#175#255#25'`'#152#234'7'#130'>'#255'4~;'#255'1y7'#255'.u4'#255'I'
+#145'P'#255'F'#143'L'#255'9s='#255#161#161#161#255#162#162#162#255'E~'#180
,#255#136#183#217#255'g'#163#207#255'a'#158#204#255'c'#159#204#255'E'#131#177
+#255#31'd'#156#234';'#135'B'#255#137#203#146#255#132#200#141#255#128#198#136
+#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?'#255#161#161#161#255'L'
+#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209#255'_'#180#223#255'G'
+#133#177#255'%i'#161#234'>'#139'F'#255#143#206#153#255'}'#198#135#255'x'#195
+#129#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'#255'T'#127'W'
+#255'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225#255'K'#212#255
+#255'B'#139#184#255',n'#166#234'A'#144'J'#255#148#210#159#255#145#208#154#255
+#141#205#150#255#137#203#146#255#132#200#141#255'Q'#152'X'#255'A|F'#255#159
+#159#159#255'Z'#142#196#255#152#195#224#255'|'#179#215#255't'#175#214#255'^'
+#196#237#255'K'#136#179#255'4s'#171#234'D'#148'M'#255'B'#145'K'#255'?'#141'H'
+#255'='#137'E'#255']'#164'e'#255'Z'#160'a'#255'E'#131'K'#255#158#158#158#255
+#158#158#158#255'`'#146#201#255#158#199#226#255#131#184#218#255'}'#180#215
+#255'~'#179#215#255'O'#137#180#255';y'#177#234#255#255#255#0#255#255#255#0'w'
+'ww'#255#154#154#154#255'='#138'E'#255'I'#138'O'#255#156#156#156#255#157#157
+#157#255#157#157#157#255'f'#150#204#255#162#203#227#255#137#189#220#255#131
+#185#218#255#132#185#218#255'Q'#139#181#255'C~'#182#234#255#255#255#0#255#255
+#255#0'zzz'#255#153#153#153#255'R'#145'Y'#255#153#154#153#255#155#155#155#255
+#156#156#156#255#156#156#156#255'l'#154#208#255#167#206#229#255#143#193#223
+#255#137#189#220#255#139#189#220#255'S'#141#182#255'K'#132#188#234#255#255
+#255#0#255#255#255#0'}}}'#255#153#153#153#255#153#153#153#255#154#154#154#255
+#154#154#154#255#155#155#155#255#155#155#155#255'o'#157#211#255#170#209#231
+#255#171#209#231#255#152#199#225#255#145#194#222#255'V'#143#183#255'R'#137
+#193#234#255#255#255#0#255#255#255#0#128#128#128#255'~~~'#255'|||'#255'zzz'
+#255'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214#255#135#178#220#255
+#171#211#232#255#169#208#230#255'X'#144#184#255'Y'#142#198#234#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'p'#158#214
+#219'm'#156#212#255#133#177#218#255'Z'#145#185#255'`'#147#203#234#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0'm'#156#212#137'j'#154#210#251'f'#151#207#238#7'OnClick'
+#7#13'acQuitExecute'#0#0#0#9'TMenuItem'#7'mnuEdit'#7'Caption'#6#4'Edit'#0#9
+'TMenuItem'#9'MenuItem2'#6'Action'#7#6'AcEdit'#9'AutoCheck'#9#0#0#0#9'TMenuI'
+'tem'#9'mnuFormat'#7'Caption'#6#6'Format'#0#9'TMenuItem'#15'MnuHorAlignment'
+#7'Caption'#6#20'Horizontal alignment'#0#9'TMenuItem'#13'MnuHorDefault'#6'Ac'
+'tion'#7#17'AcHorDefaultAlign'#0#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#11
+'AcLeftAlign'#0#0#9'TMenuItem'#9'MenuItem4'#6'Action'#7#16'AcHorCenterAlign'
+#0#0#9'TMenuItem'#9'MenuItem5'#6'Action'#7#12'AcRightAlign'#0#0#0#0#0#10'TIm'
+'ageList'#10'ImageList1'#4'left'#3#176#0#3'top'#2'x'#6'Bitmap'#10#14#28#0#0
+'Li'#7#0#0#0#16#0#0#0#16#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#234#195#157#255#230#191#150#255#228
+#187#146#255#228#187#146#255#209#160'l'#245#208#158'm'#246#204#150'_'#218#196
+'yB~'#178'g<'#9#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#229#190#150#255#255#255#254#255#253
+#243#233#255#253#243#234#255#252#242#232#255#250#239#227#255#250#242#231#255
+#234#187#136#255#207#133'U'#179#180'i='#12#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#147#255#254#245
+#237#255#252#222#197#255#251#224#199#255#249#220#194#255#245#211#180#255#254
+#249#243#255#250#226#196#255#236#193#147#255#195'}H'#147#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187
+#146#255#254#246#240#255#252#226#205#255#252#227#205#255#250#223#200#255#247
+#217#188#255#245#233#221#255#250#243#235#255#251#248#243#255#202#131'S'#254
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#228#187#146#255#254#247#241#255#252#229#210#255#252#228#209#255
+#251#226#204#255#249#221#196#255#246#215#187#255#243#209#175#255#250#239#228
+#255#204#135'X'#254'4'#180#217#208'^'#194#225#250'`'#195#226#250'`'#195#226
+#250'`'#195#226#250'_'#195#226#250#228#187#145#255#255#247#242#255#254#231
+#213#255#254#231#213#255#253#229#209#255#250#224#202#255#249#222#196#255#247
+#217#188#255#253#242#231#255#204#135'W'#254'6'#179#218#248#253#254#254#255
+#254#255#255#255#254#254#255#255#253#254#255#255#254#255#255#255#228#186#145
+#255#255#247#240#255#255#231#213#255#253#231#214#255#253#230#212#255#252#228
+#208#255#251#227#203#255#250#220#194#255#254#243#232#255#204#134'V'#254'5'
+#175#218#240#247#252#254#255#142#228#248#255#145#222#245#255#159#224#245#255
,#172#225#246#255#202#132'R'#255#255#247#241#255#255#233#217#255#255#234#219
+#255#255#233#217#255#255#231#215#255#255#229#210#255#255#226#203#255#255#247
+#241#255#203#133'U'#254'6'#170#218#242#241#250#253#255#148#222#245#255#147
+#220#244#255'd'#188#233#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'
+#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'
+#148#218#255#251#246#239#255#204#131'U'#254'5'#171#218#250#232#246#251#255'p'
+#188#231#255'U'#170#226#255'M'#165#224#255#145#201#235#255#250#243#239#255
+#253#254#253#255#255#253#252#255#255#253#252#255#254#253#252#255#254#252#251
+#255#254#254#253#255'5'#148#218#255#239#242#232#255#206#129'V'#255'7'#166#218
+#250#254#255#255#255#248#253#255#255#246#253#255#255#245#252#255#255#243#252
+#254#255#154#228#244#255#154#230#247#255#155#230#246#255#157#229#245#255#158
+#229#245#255#159#229#244#255#218#243#248#255'5'#148#218#255#253#244#238#255
+#202#128'T'#249'6'#161#218#249#246#252#254#255#148#229#248#255#147#229#248
+#255#147#229#248#255#145#229#248#255#147#219#233#255#147#215#227#255#147#210
+#220#255#144#206#215#255#140#200#207#255#134#193#198#255#201#216#214#255'5'
+#148#218#255#197'tD'#232#202#127'S'#241'6'#154#218#248#242#250#253#255#148
+#230#248#255#146#229#248#255#144#229#248#255#139#227#248#255#134#226#247#255
+#127#225#247#255'w'#222#246#255'l'#220#246#255'^'#217#244#255'O'#213#243#255
+#204#242#251#255'5'#148#218#255#255#255#255#0#255#255#255#0'5'#148#218#247
+#239#250#254#255#147#229#248#255#143#228#248#255#137#227#248#255#130#225#247
+#255'z'#223#247#255'q'#222#246#255'g'#219#245#255'['#216#244#255'M'#212#243
+#255'@'#209#242#255#202#242#251#255'5'#148#218#255#255#255#255#0#255#255#255
+#0'3'#142#217#251#220#240#250#255#152#225#246#255#149#224#246#255#146#223#246
+#255#142#222#245#255#137#220#245#255#133#218#244#255#128#217#244#255'z'#215
+#243#255't'#213#243#255'p'#211#242#255#194#234#248#255'5'#148#218#255#255#255
+#255#0#255#255#255#0','#134#216#0'-'#136#216#247'-'#135#216#247'-'#136#216
+#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216
+#247'-'#136#216#247'-'#136#216#247'-'#135#216#247'-'#136#216#247','#134#216#0
+#255#255#255#0#255#255#255#0#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188
+'k6'#250#187'k6'#254#187'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'
+#255#187'm:'#255#187'k8'#239#187'p>'#203#182'i5T'#255#255#255#0#188'k6'#155
+#246#224#209#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249#246
+#255#252#245#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253#250
+#247#255#251#241#235#255#248#233#223#254#236#208#189#251#201#137'^'#236#181
+'i5c'#188'k6'#216#246#223#209#255#233#170#128#255#254#250#246#255#253#250#246
+#255#200#140'd'#255#251#243#238#255#251#241#234#255#252#246#242#255#254#251
+#248#255#252#246#241#255#249#236#226#255#248#231#219#255#238#208#186#255#236
+#208#189#255#187'p>'#248#188'k6'#240#246#223#208#255#232#168'~'#255#252#246
+#241#255#252#246#241#255#200#140'd'#255#250#241#233#255#251#244#238#255#253
+#250#247#255#253#249#246#255#250#240#232#255#248#232#221#255#247#230#219#255
+#225#163'z'#255#239#213#195#255#183'i5'#254#188'k6'#250#245#221#204#255#231
+#168'~'#255#250#240#232#255#250#240#232#255#201#141'f'#255#250#240#233#255
+#253#248#243#255#254#250#248#255#252#244#239#255#249#233#223#255#247#231#219
+#255#247#229#217#255#224#162'x'#255#231#194#169#255#182'h5'#255#187'k6'#254
+#244#220#201#255#231#167'}'#255#249#236#225#255#249#236#225#255#249#237#227
+#255#252#244#238#255#253#250#247#255#253#247#243#255#250#237#229#255#247#231
+#219#255#247#229#217#255#246#229#216#255#222#160'w'#255#228#190#164#255#180
+'g4'#255#187'k6'#255#244#217#199#255#230#166'}'#255#200#140'd'#255#201#141'e'
+#255#201#142'g'#255#203#146'l'#255#203#146'm'#255#202#144'i'#255#200#140'e'
+#255#200#140'd'#255#200#140'd'#255#200#140'd'#255#218#156't'#255#225#186#159
+#255#179'f4'#255#187'j6'#255#242#216#197#255#227#164'{'#255#227#163'z'#255
+#227#164'z'#255#226#164'{'#255#226#163'{'#255#225#163'{'#255#225#162'y'#255
+#223#160'w'#255#222#159'v'#255#221#158't'#255#219#156'r'#255#220#157't'#255
+#221#181#154#255#177'e4'#255#187'j6'#255#242#213#194#255#227#163'z'#255#227
+#163'z'#255#226#163'{'#255#226#163'{'#255#226#164'{'#255#225#162'y'#255#224
+#161'x'#255#222#160'w'#255#222#158'u'#255#220#157't'#255#218#155's'#255#217
+#155's'#255#218#176#149#255#175'd3'#255#187'j6'#255#240#210#190#255#226#163
+'z'#255#226#163'z'#255#225#163'z'#255#226#163'{'#255#225#163'{'#255#224#161
+'x'#255#222#159'w'#255#221#159'v'#255#220#157't'#255#217#155'r'#255#216#153
+'q'#255#214#153'p'#255#213#171#142#255#173'c3'#255#186'j6'#255#239#208#187
+#255#226#162'z'#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251
+#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254
+#251#248#255#254#251#248#255#211#150'm'#255#210#167#138#255#171'b2'#255#187
+'k8'#255#239#206#184#255#225#162'y'#255#254#250#247#255'b'#192#136#255'b'#192
,#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192
+#136#255'b'#192#136#255#253#249#246#255#207#147'j'#255#206#163#132#255#170'a'
+'2'#255#187'l8'#255#238#204#182#255#225#162'z'#255#254#250#247#255#191#220
+#194#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255#191
+#220#194#255#191#220#194#255#191#220#194#255#253#249#246#255#205#144'h'#255
+#204#158#129#255#168'a2'#255#186'k7'#254#237#202#179#255#224#162'z'#255#254
+#250#247#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'
+#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255#253#249#246#255#202
+#141'e'#255#201#155'|'#255#167'`1'#254#186'j5'#222#235#198#173#255#234#197
+#173#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254
+#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255
+#254#251#248#255#200#154'|'#255#199#152'y'#255#167'`1'#237#186'j6'#0#185'i5'
+#181#184'i5'#238#183'h5'#255#181'h5'#255#180'g4'#255#178'f4'#255#176'e3'#255
+#174'd3'#255#172'c2'#255#170'b2'#255#169'a2'#255#168'`1'#255#167'`1'#254#166
+'`1'#241#168'a1'#196#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'm'#156#212#137'j'#154
+#210#251'f'#151#207#238#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0'p'#158#214#219'm'#156#212#255#133#177#218#255'Z'#145
+#185#255'`'#147#203#234#255#255#255#0#255#255#255#0#128#128#128#255'~~~'#255
+'|||'#255'zzz'#255'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214#255
+#135#178#220#255#171#211#232#255#169#208#230#255'X'#144#184#255'Y'#142#198
+#234#255#255#255#0#255#255#255#0'}}}'#255#153#153#153#255#153#153#153#255#154
+#154#154#255#154#154#154#255#155#155#155#255#155#155#155#255'o'#157#211#255
+#170#209#231#255#171#209#231#255#152#199#225#255#145#194#222#255'V'#143#183
+#255'R'#137#193#234#255#255#255#0#255#255#255#0'zzz'#255#153#153#153#255'R'
+#145'Y'#255#153#154#153#255#155#155#155#255#156#156#156#255#156#156#156#255
+'l'#154#208#255#167#206#229#255#143#193#223#255#137#189#220#255#139#189#220
+#255'S'#141#182#255'K'#132#188#234#255#255#255#0#255#255#255#0'www'#255#154
+#154#154#255'='#138'E'#255'I'#138'O'#255#156#156#156#255#157#157#157#255#157
+#157#157#255'f'#150#204#255#162#203#227#255#137#189#220#255#131#185#218#255
+#132#185#218#255'Q'#139#181#255'C~'#182#234'D'#148'M'#255'B'#145'K'#255'?'
+#141'H'#255'='#137'E'#255']'#164'e'#255'Z'#160'a'#255'E'#131'K'#255#158#158
+#158#255#158#158#158#255'`'#146#201#255#158#199#226#255#131#184#218#255'}'
+#180#215#255'~'#179#215#255'O'#137#180#255';y'#177#234'A'#144'J'#255#148#210
+#159#255#145#208#154#255#141#205#150#255#137#203#146#255#132#200#141#255'Q'
+#152'X'#255'A|F'#255#159#159#159#255'Z'#142#196#255#152#195#224#255'|'#179
+#215#255't'#175#214#255'^'#196#237#255'K'#136#179#255'4s'#171#234'>'#139'F'
+#255#143#206#153#255'}'#198#135#255'x'#195#129#255's'#192'|'#255't'#192'|'
+#255'y'#194#129#255'I'#144'O'#255'T'#127'W'#255'T'#137#191#255#148#191#221
+#255'u'#173#212#255'c'#184#225#255'K'#212#255#255'B'#139#184#255',n'#166#234
+';'#135'B'#255#137#203#146#255#132#200#141#255#128#198#136#255'{'#195#131#255
+'w'#193#127#255'G'#143'M'#255';t?'#255#161#161#161#255'L'#132#186#255#141#187
+#219#255'n'#168#209#255'f'#166#209#255'_'#180#223#255'G'#133#177#255'%i'#161
+#234'7'#130'>'#255'4~;'#255'1y7'#255'.u4'#255'I'#145'P'#255'F'#143'L'#255'9s'
+'='#255#161#161#161#255#162#162#162#255'E~'#180#255#136#183#217#255'g'#163
+#207#255'a'#158#204#255'c'#159#204#255'E'#131#177#255#31'd'#156#234#255#255
+#255#0#255#255#255#0'```'#255#160#160#160#255'=vA'#255'6q9'#255#162#162#162
+#255#162#162#162#255#163#163#163#255'=y'#176#255#130#179#215#255'b'#159#204
+#255'Z'#154#201#255'^'#155#202#255'C'#129#175#255#25'`'#152#234#255#255#255#0
+#255#255#255#0'\\\'#255#161#161#161#255'<s@'#255#160#161#161#255#163#163#163
+#255#163#163#163#255#164#164#164#255'6t'#170#255'}'#175#212#255'['#154#201
+#255'T'#149#199#255'X'#150#200#255'A'#128#174#255#19'\'#148#234#255#255#255#0
+#255#255#255#0'XXX'#255#162#162#162#255#162#162#162#255#163#163#163#255#164
+#164#164#255#164#164#164#255#165#165#165#255'/o'#165#255'x'#171#210#255'x'
+#171#211#255's'#167#209#255'i'#160#205#255'@'#127#174#255#15'Y'#145#234#153
+#153#153#255'qqq'#255'TTT'#255'QQQ'#255'OOO'#255'LLL'#255'JJJ'#255'GGG'#255
+'EEE'#255'%g'#157#255'2t'#168#255'=|'#175#255'G'#132#181#255'N'#138#186#255
+'>~'#173#255#12'W'#143#234#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#29'c'#155#22#25'`'#152'9'#20']'#149'b'#16'Z'#146#136#13'X'#144#164#19'\'#146
+#252#12'W'#143#237#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0'/'#186#228#9'O'#170#219#234'P'#147#202#253'N'#144#200#255'/'#157
+#210#223'5'#164#222#25#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0'P'#168#217#255'j'#165#216#255#201#225#247#255#203#227#248#255'B'
+#149#202#255'1'#130#194#174#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+'/'#186#228#255#167#212#244#255#197#225#248#255#204#227#249#255#204#227#249
+#255#189#219#247#255'O'#144#201#253#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'/'#186
+#228#255#195#237#248#255#168#226#248#255'l'#174#221#255#165#207#244#255#165
+#207#244#255#189#219#247#255'S'#147#203#247#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'/'#186#228
+#255#195#237#248#255#179#244#252#255'h'#217#245#255'o'#207#243#255'Y'#157#208
+#255's'#171#221#255'O'#145#201#255#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'/'#186#228#255#195
+#237#248#255#179#244#252#255'`'#220#245#255'D'#214#244#255#142#238#250#255']'
+#180#230#255';'#143#217#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0'/'#186#228#255#195#237#248
+#255#179#244#252#255'`'#220#245#255'D'#214#244#255#142#238#250#255']'#180#230
+#255';'#143#217#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0''''#144#191#255#195#237#248#255
+#179#244#252#255'`'#220#245#255'D'#214#244#255#142#238#250#255']'#180#230#255
+';'#143#217#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0'&'#137#185#255#190#230#242#255#179#244
+#252#255'`'#220#245#255'D'#214#244#255#142#238#250#255']'#180#230#255';'#143
+#217#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0' c'#152' &'#137#185#255#176#203#225#255'g'#169#200#255'`'
+#220#245#255'D'#214#244#255#142#238#250#255']'#180#230#255';'#143#217#255#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#30'm'#147#255#200#225#242#255#209#231#250#255'4}'#181
+#255'1'#153#195#255'm'#196#220#255'J'#156#207#255'4'#131#199#255#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#30'm'#147#255#203#227#249#255'a'#170#236#255'@'#152
+#232#255#21'g'#194#255#22'`'#170#255',v'#180#255#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#18'BY'#255']'#156#212#255#166#207#245#255#169#207
+#236#255'H'#139#193#255',v'#180#255#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#19'@X'#255#21'B^'#255'%i'#156#255',v'#180#255';'#139
+#186#173#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0'm'#156#212#137'j'#154#210#251'f'#151#207#238#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'p'#158#214#219
+'m'#156#212#255#133#177#218#255'Z'#145#185#255'`'#147#203#234#255#255#255#0
,#255#255#255#0#128#128#128#255'~~~'#255'|||'#255'zzz'#255'www'#255'uuu'#255
+'rrr'#255'q'#158#212#255'o'#158#214#255#135#178#220#255#171#211#232#255#169
+#208#230#255'X'#144#184#255'Y'#142#198#234#255#255#255#0#255#255#255#0'}}}'
+#255#153#153#153#255#153#153#153#255#154#154#154#255#154#154#154#255#155#155
+#155#255#155#155#155#255'o'#157#211#255#170#209#231#255#171#209#231#255#152
+#199#225#255#145#194#222#255'V'#143#183#255'R'#137#193#234#255#255#255#0#255
+#255#255#0'zzz'#255#153#153#153#255'R'#145'Y'#255#153#154#153#255#155#155#155
+#255#156#156#156#255#156#156#156#255'l'#154#208#255#167#206#229#255#143#193
+#223#255#137#189#220#255#139#189#220#255'S'#141#182#255'K'#132#188#234#255
+#255#255#0#255#255#255#0'www'#255#154#154#154#255'='#138'E'#255'I'#138'O'#255
+#156#156#156#255#157#157#157#255#157#157#157#255'f'#150#204#255#162#203#227
+#255#137#189#220#255#131#185#218#255#132#185#218#255'Q'#139#181#255'C~'#182
+#234'D'#148'M'#255'B'#145'K'#255'?'#141'H'#255'='#137'E'#255']'#164'e'#255'Z'
+#160'a'#255'E'#131'K'#255#158#158#158#255#158#158#158#255'`'#146#201#255#158
+#199#226#255#131#184#218#255'}'#180#215#255'~'#179#215#255'O'#137#180#255';y'
+#177#234'A'#144'J'#255#148#210#159#255#145#208#154#255#141#205#150#255#137
+#203#146#255#132#200#141#255'Q'#152'X'#255'A|F'#255#159#159#159#255'Z'#142
+#196#255#152#195#224#255'|'#179#215#255't'#175#214#255'^'#196#237#255'K'#136
+#179#255'4s'#171#234'>'#139'F'#255#143#206#153#255'}'#198#135#255'x'#195#129
+#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'#255'T'#127'W'#255
+'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225#255'K'#212#255#255
+'B'#139#184#255',n'#166#234';'#135'B'#255#137#203#146#255#132#200#141#255#128
+#198#136#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?'#255#161#161#161
+#255'L'#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209#255'_'#180#223
+#255'G'#133#177#255'%i'#161#234'7'#130'>'#255'4~;'#255'1y7'#255'.u4'#255'I'
+#145'P'#255'F'#143'L'#255'9s='#255#161#161#161#255#162#162#162#255'E~'#180
+#255#136#183#217#255'g'#163#207#255'a'#158#204#255'c'#159#204#255'E'#131#177
+#255#31'd'#156#234#255#255#255#0#255#255#255#0'```'#255#160#160#160#255'=vA'
+#255'6q9'#255#162#162#162#255#162#162#162#255#163#163#163#255'=y'#176#255#130
+#179#215#255'b'#159#204#255'Z'#154#201#255'^'#155#202#255'C'#129#175#255#25
+'`'#152#234#255#255#255#0#255#255#255#0'\\\'#255#161#161#161#255'<s@'#255#160
+#161#161#255#163#163#163#255#163#163#163#255#164#164#164#255'6t'#170#255'}'
+#175#212#255'['#154#201#255'T'#149#199#255'X'#150#200#255'A'#128#174#255#19
+'\'#148#234#255#255#255#0#255#255#255#0'XXX'#255#162#162#162#255#162#162#162
+#255#163#163#163#255#164#164#164#255#164#164#164#255#165#165#165#255'/o'#165
+#255'x'#171#210#255'x'#171#211#255's'#167#209#255'i'#160#205#255'@'#127#174
+#255#15'Y'#145#234#153#153#153#255'qqq'#255'TTT'#255'QQQ'#255'OOO'#255'LLL'
+#255'JJJ'#255'GGG'#255'EEE'#255'%g'#157#255'2t'#168#255'=|'#175#255'G'#132
+#181#255'N'#138#186#255'>~'#173#255#12'W'#143#234#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#29'c'#155#22#25'`'#152'9'#20']'#149'b'#16'Z'#146#136 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#13'X'#144#164#19'\'#146#252#12'W'#143#237#0#0#11'TActionList'#11'ActionList' +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+'1'#4'left'#3#176#0#3'top'#2'@'#0#7'TAction'#6'AcOpen'#7'Caption'#6#7'Open..' +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+'.'#10'ImageIndex'#2#0#9'OnExecute'#7#13'acOpenExecute'#0#0#7'TAction'#8'AcS' +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+'aveAs'#7'Caption'#6#10'Save as...'#10'ImageIndex'#2#1#9'OnExecute'#7#15'acS' +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+'aveAsExecute'#0#0#7'TAction'#6'AcQuit'#7'Caption'#6#4'Quit'#10'ImageIndex'#2 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#2#9'OnExecute'#7#13'acQuitExecute'#0#0#0#0 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0'vvv'#255'ttt'#255'ppp'#255'lll'#255'hhh'#255'ccc'
+#255'^^^'#255'YYY'#255'SSS'#255'NNN'#255'HHH'#255'BBB'#255#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0'ooo'#255'kkk'#255'fff'#255'aaa'#255'\'
+'\\'#255'WWW'#255'QQQ'#255'KKK'#255'EEE'#255#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'ddd'#255
+'___'#255'ZZZ'#255'TTT'#255'OOO'#255'III'#255'CCC'#255'==='#255'777'#255'111'
+#255'+++'#255'%%%'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+'XXX'#255'RRR'#255'LLL'#255'FFF'#255'@@@'#255':::'#255'444'#255'...'#255'((('
+#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0'JJJ'#255'DDD'#255'>>>'#255'888'#255'222'#255',,'
+','#255'&&&'#255' '#255#27#27#27#255#22#22#22#255#17#17#17#255#12#12#12#255
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'<<<'#255'555'#255'/'
+'//'#255')))'#255'$$$'#255#30#30#30#255#25#25#25#255#20#20#20#255#15#15#15
+#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0'vvv'#255'ttt'#255'ppp'#255'lll'#255'hhh'#255'cc'
+'c'#255'^^^'#255'YYY'#255'SSS'#255'NNN'#255'HHH'#255'BBB'#255#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'kkkkfff'#255'aaa'
+#255'\\\'#255'WWW'#255'QQQ'#255'KKK'#255'EEE'#255'???'#255'999k'#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'ddd'#255'___'#255'Z'
+'ZZ'#255'TTT'#255'OOO'#255'III'#255'CCC'#255'==='#255'777'#255'111'#255'+++'
+#255'%%%'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0'RRRkLLL'#255'FFF'#255'@@@'#255':::'#255'444'#255'...'#255'((('#255'##'
+'#'#255#29#29#29'k'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0'JJJ'#255'DDD'#255'>>>'#255'888'#255'222'#255',,,'#255'&&&'#255
+' '#255#27#27#27#255#22#22#22#255#17#17#17#255#12#12#12#255#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'555k///'#255')))'
+#255'$$$'#255#30#30#30#255#25#25#25#255#20#20#20#255#15#15#15#255#11#11#11
,#255#7#7#7'k'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0'vvv'#255'ttt'#255'ppp'#255'lll'#255'hhh'#255'ccc'#255'^^^'#255'YYY'
+#255'SSS'#255'NNN'#255'HHH'#255'BBB'#255#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'aaa'#255'\\\'
+#255'WWW'#255'QQQ'#255'KKK'#255'EEE'#255'???'#255'999'#255'333'#255#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0'ddd'#255'___'#255'ZZZ'#255
+'TTT'#255'OOO'#255'III'#255'CCC'#255'==='#255'777'#255'111'#255'+++'#255'%%%'
+#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0'FFF'#255'@@@'#255':::'#255'444'#255'...'#255'(('
+'('#255'###'#255#29#29#29#255#24#24#24#255#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0'JJJ'#255'DDD'#255'>>>'#255'888'#255'222'#255',,,'
+#255'&&&'#255' '#255#27#27#27#255#22#22#22#255#17#17#17#255#12#12#12#255
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0')))'#255'$$$'#255#30#30#30#255#25#25#25#255#20#20#20
+#255#15#15#15#255#11#11#11#255#7#7#7#255#3#3#3#255#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#0#0#11'TActionList'#11'ActionList1'#6'Images'#7#10'ImageList1'#4'left'#3#176
+#0#3'top'#2'@'#0#7'TAction'#6'AcOpen'#7'Caption'#6#7'Open...'#10'ImageIndex'
+#2#0#9'OnExecute'#7#13'acOpenExecute'#0#0#7'TAction'#8'AcSaveAs'#7'Caption'#6
+#10'Save as...'#10'ImageIndex'#2#1#9'OnExecute'#7#15'acSaveAsExecute'#0#0#7
+'TAction'#6'AcQuit'#7'Caption'#6#4'Quit'#10'ImageIndex'#2#2#9'OnExecute'#7#13
+'acQuitExecute'#0#0#7'TAction'#6'AcEdit'#9'AutoCheck'#9#7'Caption'#6#9'Edit '
+'mode'#4'Hint'#6#22'Enable/disable editing'#10'ImageIndex'#2#3#9'OnExecute'#7
+#13'AcEditExecute'#0#0#7'TAction'#17'AcHorDefaultAlign'#3'Tag'#2'd'#8'Catego'
+'ry'#6#6'Format'#7'Caption'#6#7'Default'#7'Checked'#9#9'OnExecute'#7#21'AcHo'
+'rAlignmentExecute'#0#0#7'TAction'#11'AcLeftAlign'#3'Tag'#2'e'#8'Category'#6
+#6'Format'#7'Caption'#6#4'Left'#10'ImageIndex'#2#4#9'OnExecute'#7#21'AcHorAl'
+'ignmentExecute'#0#0#7'TAction'#16'AcHorCenterAlign'#3'Tag'#2'f'#8'Category'
+#6#6'Format'#7'Caption'#6#8'Centered'#10'ImageIndex'#2#5#9'OnExecute'#7#21'A'
,'cHorAlignmentExecute'#0#0#7'TAction'#12'AcRightAlign'#3'Tag'#2'g'#8'Categor'
+'y'#6#6'Format'#7'Caption'#6#5'Right'#10'ImageIndex'#2#6#9'OnExecute'#7#21'A'
+'cHorAlignmentExecute'#0#0#0#0
]); ]);

View File

@ -6,7 +6,7 @@ interface
uses uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Menus, ExtCtrls, ComCtrls, ActnList, Spin, StdCtrls, Menus, ExtCtrls, ComCtrls, ActnList, Spin, ColorBox,
fpspreadsheetgrid, fpspreadsheet, fpsallformats; fpspreadsheetgrid, fpspreadsheet, fpsallformats;
type type
@ -17,16 +17,30 @@ type
AcOpen: TAction; AcOpen: TAction;
AcSaveAs: TAction; AcSaveAs: TAction;
AcQuit: TAction; AcQuit: TAction;
AcEdit: TAction;
AcLeftAlign: TAction;
AcHorCenterAlign: TAction;
AcRightAlign: TAction;
AcHorDefaultAlign: TAction;
ActionList1: TActionList; ActionList1: TActionList;
btnPopulateGrid: TButton;
CbShowHeaders: TCheckBox; CbShowHeaders: TCheckBox;
CbShowGridLines: TCheckBox; CbShowGridLines: TCheckBox;
FontComboBox: TComboBox;
EdFrozenRows: TSpinEdit; EdFrozenRows: TSpinEdit;
FontSizeComboBox: TComboBox;
ImageList1: TImageList; ImageList1: TImageList;
Label1: TLabel; Label1: TLabel;
Label2: TLabel; Label2: TLabel;
MainMenu1: TMainMenu; MainMenu1: TMainMenu;
MenuItem1: TMenuItem; MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
MenuItem4: TMenuItem;
MenuItem5: TMenuItem;
MnuHorDefault: TMenuItem;
MnuHorAlignment: TMenuItem;
mnuFormat: TMenuItem;
mnuEdit: TMenuItem;
mnuFile: TMenuItem; mnuFile: TMenuItem;
mnuOpen: TMenuItem; mnuOpen: TMenuItem;
mnuQuit: TMenuItem; mnuQuit: TMenuItem;
@ -39,10 +53,18 @@ type
sWorksheetGrid1: TsWorksheetGrid; sWorksheetGrid1: TsWorksheetGrid;
TabSheet1: TTabSheet; TabSheet1: TTabSheet;
ToolBar1: TToolBar; ToolBar1: TToolBar;
FormatToolBar: TToolBar;
ToolButton1: TToolButton; ToolButton1: TToolButton;
ToolButton10: TToolButton;
ToolButton12: TToolButton;
ToolButton13: TToolButton;
ToolButton2: TToolButton; ToolButton2: TToolButton;
ToolButton3: TToolButton; ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton; ToolButton5: TToolButton;
ToolButton6: TToolButton;
procedure AcEditExecute(Sender: TObject);
procedure AcHorAlignmentExecute(Sender: TObject);
procedure btnPopulateGridClick(Sender: TObject); procedure btnPopulateGridClick(Sender: TObject);
procedure CbShowHeadersClick(Sender: TObject); procedure CbShowHeadersClick(Sender: TObject);
procedure CbShowGridLinesClick(Sender: TObject); procedure CbShowGridLinesClick(Sender: TObject);
@ -51,11 +73,17 @@ type
procedure acSaveAsExecute(Sender: TObject); procedure acSaveAsExecute(Sender: TObject);
procedure EdFrozenColsChange(Sender: TObject); procedure EdFrozenColsChange(Sender: TObject);
procedure EdFrozenRowsChange(Sender: TObject); procedure EdFrozenRowsChange(Sender: TObject);
procedure FontComboBoxSelect(Sender: TObject);
procedure FormActivate(Sender: TObject); procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure PageControl1Change(Sender: TObject); procedure PageControl1Change(Sender: TObject);
procedure sWorksheetGrid1SelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
private private
{ private declarations } { private declarations }
procedure LoadFile(const AFileName: String); procedure LoadFile(const AFileName: String);
procedure UpdateHorAlignment(AValue: TsHorAlignment);
procedure UpdateFont(AFont: TsFont);
public public
{ public declarations } { public declarations }
end; end;
@ -66,7 +94,11 @@ var
implementation implementation
uses uses
Grids, fpcanvas; fpcanvas, Grids;
const
HORALIGN_TAG = 100;
{ TForm1 } { TForm1 }
@ -81,6 +113,31 @@ begin
sWorksheetGrid1.Invalidate; sWorksheetGrid1.Invalidate;
end; end;
procedure TForm1.AcEditExecute(Sender: TObject);
begin
if AcEdit.Checked then
sWorksheetGrid1.Options := sWorksheetGrid1.Options + [goEditing]
else
sWorksheetGrid1.Options := sWorksheetGrid1.Options - [goEditing];
end;
procedure TForm1.AcHorAlignmentExecute(Sender: TObject);
var
horalign: TsHorAlignment;
c, r: Cardinal;
begin
horalign := TsHorAlignment(TAction(Sender).Tag - HORALIGN_TAG);
if TAction(Sender).Checked then
horalign := haDefault;
UpdateHorAlignment(horalign);
with sWorksheetGrid1 do begin
c := GetWorksheetCol(Col);
r := GetWorksheetRow(Row);
if Worksheet <> nil then
Worksheet.WriteHorAlignment(r, c, horalign);
end;
end;
procedure TForm1.CbShowHeadersClick(Sender: TObject); procedure TForm1.CbShowHeadersClick(Sender: TObject);
begin begin
sWorksheetGrid1.ShowHeaders := CbShowHeaders.Checked; sWorksheetGrid1.ShowHeaders := CbShowHeaders.Checked;
@ -104,24 +161,12 @@ end;
procedure TForm1.acSaveAsExecute(Sender: TObject); procedure TForm1.acSaveAsExecute(Sender: TObject);
// Saves sheet in grid to file, overwriting existing file // Saves sheet in grid to file, overwriting existing file
var
lWorkBook: TsWorkbook;
lWorkSheet:TsWorksheet;
begin begin
ShowMessage('Not implemented...'); if sWorksheetGrid1.Workbook = nil then
exit; exit;
if SaveDialog1.Execute then if SaveDialog1.Execute then
begin sWorksheetGrid1.SaveToSpreadsheetFile(SaveDialog1.FileName);
lWorkBook := TsWorkBook.Create;
lWorkSheet := lWorkBook.AddWorksheet('Sheet1');
try
sWorksheetGrid1.SaveToWorksheet(lWorkSheet);
lWorkBook.WriteToFile(SaveDialog1.FileName,true);
finally
lWorkBook.Free;
end;
end;
end; end;
procedure TForm1.EdFrozenColsChange(Sender: TObject); procedure TForm1.EdFrozenColsChange(Sender: TObject);
@ -134,12 +179,49 @@ begin
sWorksheetGrid1.FrozenRows := EdFrozenRows.Value; sWorksheetGrid1.FrozenRows := EdFrozenRows.Value;
end; end;
procedure TForm1.FontComboBoxSelect(Sender: TObject);
var
c, r: Cardinal;
f: Integer;
lFont: TsFont;
h: Integer;
s: String;
begin
if sWorksheetGrid1.Workbook = nil then
exit;
with sWorksheetGrid1 do begin
c := GetWorksheetCol(Col);
r := GetWorksheetRow(Row);
f := Worksheet.GetCell(r, c)^.FontIndex;
lFont := Workbook.GetFont(f);
if FontCombobox.ItemIndex = -1 then
s := lFont.FontName
else
s := FontCombobox.Items[FontCombobox.ItemIndex];
if FontSizeCombobox.ItemIndex = -1 then
h := round(lFont.Size)
else
h := StrToInt(FontSizeCombobox.Items[FontSizeCombobox.ItemIndex]);
Worksheet.WriteFont(r, c, s, h, lFont.Style, lFont.Color);
end;
end;
procedure TForm1.FormActivate(Sender: TObject); procedure TForm1.FormActivate(Sender: TObject);
begin begin
if ParamCount > 0 then if ParamCount > 0 then
LoadFile(ParamStr(1)); LoadFile(ParamStr(1));
end; end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// Populate font combobox
FontCombobox.Items.Assign(Screen.Fonts);
end;
procedure TForm1.LoadFile(const AFileName: String); procedure TForm1.LoadFile(const AFileName: String);
// Loads first worksheet from file into grid // Loads first worksheet from file into grid
var var
@ -180,6 +262,44 @@ begin
sWorksheetGrid1.SelectSheetByIndex(PageControl1.ActivePageIndex); sWorksheetGrid1.SelectSheetByIndex(PageControl1.ActivePageIndex);
end; end;
procedure TForm1.sWorksheetGrid1SelectCell(Sender: TObject;
aCol, aRow: Integer; var CanSelect: Boolean);
var
cell: PCell;
c, r: Cardinal;
lFont: TsFont;
begin
with sWorksheetGrid1 do begin
if Worksheet = nil then exit;
c := GetWorksheetCol(ACol);
r := GetWorksheetRow(ARow);
cell := Worksheet.FindCell(r, c);
end;
if cell = nil then
exit;
UpdateHorAlignment(cell^.HorAlignment);
lFont := sWorksheetGrid1.Workbook.GetFont(cell^.FontIndex);
UpdateFont(lFont);
end;
procedure TForm1.UpdateHorAlignment(AValue: TsHorAlignment);
var
i: Integer;
ac: TAction;
begin
for i:=0 to ActionList1.ActionCount-1 do begin
ac := TAction(ActionList1.Actions[i]);
if (ac.Tag >= HORALIGN_TAG) and (ac.Tag < HORALIGN_TAG+10) then
ac.Checked := ((ac.Tag - HORALIGN_TAG) = ord(AValue));
end;
end;
procedure TForm1.UpdateFont(AFont: TsFont);
begin
FontCombobox.ItemIndex := FontCombobox.Items.IndexOf(AFont.FontName);
FontsizeCombobox.ItemIndex := FontSizeCombobox.Items.IndexOf(IntToStr(Round(AFont.Size)));
end;
initialization initialization
{$I mainform.lrs} {$I mainform.lrs}

View File

@ -310,8 +310,11 @@ type
TsCustomSpreadWriter = class; TsCustomSpreadWriter = class;
TsWorkbook = class; TsWorkbook = class;
{ TsWorksheet } { TsWorksheet }
TsCellEvent = procedure (Sender: TObject; ARow, ACol: Cardinal) of object;
TsWorksheet = class TsWorksheet = class
private private
FWorkbook: TsWorkbook; FWorkbook: TsWorkbook;
@ -321,7 +324,10 @@ type
FLeftPaneWidth: Integer; FLeftPaneWidth: Integer;
FTopPaneHeight: Integer; FTopPaneHeight: Integer;
FOptions: TsSheetOptions; FOptions: TsSheetOptions;
FOnChangeCell: TsCellEvent;
procedure RemoveCallback(data, arg: pointer); procedure RemoveCallback(data, arg: pointer);
protected
procedure ChangedCell(ARow, ACol: Cardinal);
public public
Name: string; Name: string;
{ Base methods } { Base methods }
@ -398,8 +404,10 @@ type
property Options: TsSheetOptions read FOptions write FOptions; property Options: TsSheetOptions read FOptions write FOptions;
property LeftPaneWidth: Integer read FLeftPaneWidth write FLeftPaneWidth; property LeftPaneWidth: Integer read FLeftPaneWidth write FLeftPaneWidth;
property TopPaneHeight: Integer read FTopPaneHeight write FTopPaneHeight; property TopPaneHeight: Integer read FTopPaneHeight write FTopPaneHeight;
property OnChangeCell: TsCellEvent read FOnChangeCell write FOnChangeCell;
end; end;
{ TsWorkbook } { TsWorkbook }
TsWorkbook = class TsWorkbook = class
@ -851,6 +859,12 @@ begin
Result := Format('%s%d', [lStr, ARow+1]); Result := Format('%s%d', [lStr, ARow+1]);
end; end;
{ Is called whenever a cell value or formatting has changed. }
procedure TsWorksheet.ChangedCell(ARow, ACol: Cardinal);
begin
if Assigned(FOnChangeCell) then FOnChangeCell(Self, ARow, ACol);
end;
procedure TsWorksheet.CopyCell(AFromRow, AFromCol, AToRow, AToCol: Cardinal; procedure TsWorksheet.CopyCell(AFromRow, AFromCol, AToRow, AToCol: Cardinal;
AFromWorksheet: TsWorksheet); AFromWorksheet: TsWorksheet);
var var
@ -1252,9 +1266,9 @@ var
ACell: PCell; ACell: PCell;
begin begin
ACell := GetCell(ARow, ACol); ACell := GetCell(ARow, ACol);
ACell^.ContentType := cctUTF8String; ACell^.ContentType := cctUTF8String;
ACell^.UTF8StringValue := AText; ACell^.UTF8StringValue := AText;
ChangedCell(ARow, ACol);
end; end;
{@@ {@@
@ -1295,6 +1309,7 @@ begin
ACell^.NumberFormatStr := '0' + decs; ACell^.NumberFormatStr := '0' + decs;
end; end;
end; end;
ChangedCell(ARow, ACol);
end; end;
{@@ {@@
@ -1311,6 +1326,7 @@ var
begin begin
ACell := GetCell(ARow, ACol); ACell := GetCell(ARow, ACol);
ACell^.ContentType := cctEmpty; ACell^.ContentType := cctEmpty;
ChangedCell(ARow, ACol);
end; end;
{@@ {@@
@ -1371,6 +1387,7 @@ begin
nfTimeInterval: nfTimeInterval:
ACell^.NumberFormatStr := ''; ACell^.NumberFormatStr := '';
end; end;
ChangedCell(ARow, ACol);
end; end;
{@@ {@@
@ -1387,6 +1404,7 @@ begin
ACell := GetCell(ARow, ACol); ACell := GetCell(ARow, ACol);
ACell^.ContentType := cctFormula; ACell^.ContentType := cctFormula;
ACell^.FormulaValue := AFormula; ACell^.FormulaValue := AFormula;
ChangedCell(ARow, ACol);
end; end;
{@@ {@@
@ -1406,6 +1424,7 @@ begin
ACell := GetCell(ARow, ACol); ACell := GetCell(ARow, ACol);
Include(ACell^.UsedFormattingFields, uffNumberFormat); Include(ACell^.UsedFormattingFields, uffNumberFormat);
ACell^.NumberFormat := ANumberFormat; ACell^.NumberFormat := ANumberFormat;
ChangedCell(ARow, ACol);
end; end;
procedure TsWorksheet.WriteRPNFormula(ARow, ACol: Cardinal; procedure TsWorksheet.WriteRPNFormula(ARow, ACol: Cardinal;
@ -1416,6 +1435,7 @@ begin
ACell := GetCell(ARow, ACol); ACell := GetCell(ARow, ACol);
ACell^.ContentType := cctRPNFormula; ACell^.ContentType := cctRPNFormula;
ACell^.RPNFormulaValue := AFormula; ACell^.RPNFormulaValue := AFormula;
ChangedCell(ARow, ACol);
end; end;
{@@ {@@
@ -1441,6 +1461,7 @@ begin
if Result = -1 then if Result = -1 then
result := FWorkbook.AddFont(AFontName, AFontSize, AFontStyle, AFontColor); result := FWorkbook.AddFont(AFontName, AFontSize, AFontStyle, AFontColor);
lCell^.FontIndex := Result; lCell^.FontIndex := Result;
ChangedCell(ARow, ACol);
end; end;
procedure TsWorksheet.WriteFont(ARow, ACol: Cardinal; AFontIndex: Integer); procedure TsWorksheet.WriteFont(ARow, ACol: Cardinal; AFontIndex: Integer);
@ -1453,6 +1474,7 @@ begin
lCell := GetCell(ARow, ACol); lCell := GetCell(ARow, ACol);
Include(lCell^.UsedFormattingFields, uffFont); Include(lCell^.UsedFormattingFields, uffFont);
lCell^.FontIndex := AFontIndex; lCell^.FontIndex := AFontIndex;
ChangedCell(ARow, ACol);
end else end else
raise Exception.Create(lpInvalidFontIndex); raise Exception.Create(lpInvalidFontIndex);
end; end;
@ -1505,6 +1527,7 @@ begin
ACell := GetCell(ARow, ACol); ACell := GetCell(ARow, ACol);
Include(ACell^.UsedFormattingFields, uffTextRotation); Include(ACell^.UsedFormattingFields, uffTextRotation);
ACell^.TextRotation := ARotation; ACell^.TextRotation := ARotation;
ChangedCell(ARow, ACol);
end; end;
procedure TsWorksheet.WriteUsedFormatting(ARow, ACol: Cardinal; procedure TsWorksheet.WriteUsedFormatting(ARow, ACol: Cardinal;
@ -1514,6 +1537,7 @@ var
begin begin
ACell := GetCell(ARow, ACol); ACell := GetCell(ARow, ACol);
ACell^.UsedFormattingFields := AUsedFormatting; ACell^.UsedFormattingFields := AUsedFormatting;
ChangedCell(ARow, ACol);
end; end;
procedure TsWorksheet.WriteBackgroundColor(ARow, ACol: Cardinal; procedure TsWorksheet.WriteBackgroundColor(ARow, ACol: Cardinal;
@ -1524,6 +1548,7 @@ begin
ACell := GetCell(ARow, ACol); ACell := GetCell(ARow, ACol);
ACell^.UsedFormattingFields := ACell^.UsedFormattingFields + [uffBackgroundColor]; ACell^.UsedFormattingFields := ACell^.UsedFormattingFields + [uffBackgroundColor];
ACell^.BackgroundColor := AColor; ACell^.BackgroundColor := AColor;
ChangedCell(ARow, ACol);
end; end;
{ Sets the color of a cell border line. { Sets the color of a cell border line.
@ -1535,6 +1560,7 @@ var
begin begin
lCell := GetCell(ARow, ACol); lCell := GetCell(ARow, ACol);
lCell^.BorderStyles[ABorder].Color := AColor; lCell^.BorderStyles[ABorder].Color := AColor;
ChangedCell(ARow, ACol);
end; end;
{ Sets the linestyle of a cell border. { Sets the linestyle of a cell border.
@ -1546,6 +1572,7 @@ var
begin begin
lCell := GetCell(ARow, ACol); lCell := GetCell(ARow, ACol);
lCell^.BorderStyles[ABorder].LineStyle := ALineStyle; lCell^.BorderStyles[ABorder].LineStyle := ALineStyle;
ChangedCell(ARow, ACol);
end; end;
{ Shows the cell borders included in the set ABorders. The borders are drawn { Shows the cell borders included in the set ABorders. The borders are drawn
@ -1557,6 +1584,7 @@ begin
lCell := GetCell(ARow, ACol); lCell := GetCell(ARow, ACol);
Include(lCell^.UsedFormattingFields, uffBorder); Include(lCell^.UsedFormattingFields, uffBorder);
lCell^.Border := ABorders; lCell^.Border := ABorders;
ChangedCell(ARow, ACol);
end; end;
{ Sets the style of a cell border, i.e. line style and line color. { Sets the style of a cell border, i.e. line style and line color.
@ -1568,6 +1596,7 @@ var
begin begin
lCell := GetCell(ARow, ACol); lCell := GetCell(ARow, ACol);
lCell^.BorderStyles[ABorder] := AStyle; lCell^.BorderStyles[ABorder] := AStyle;
ChangedCell(ARow, ACol);
end; end;
{ Sets line style and line color of a cell border. { Sets line style and line color of a cell border.
@ -1580,6 +1609,7 @@ begin
lCell := GetCell(ARow, ACol); lCell := GetCell(ARow, ACol);
lCell^.BorderStyles[ABorder].LineStyle := ALineStyle; lCell^.BorderStyles[ABorder].LineStyle := ALineStyle;
lCell^.BorderStyles[ABorder].Color := AColor; lCell^.BorderStyles[ABorder].Color := AColor;
ChangedCell(ARow, ACol);
end; end;
{ Sets the style of all cell border of a cell, i.e. line style and line color. { Sets the style of all cell border of a cell, i.e. line style and line color.
@ -1592,6 +1622,7 @@ var
begin begin
cell := GetCell(ARow, ACol); cell := GetCell(ARow, ACol);
for b in TsCellBorder do cell^.BorderStyles[b] := AStyles[b]; for b in TsCellBorder do cell^.BorderStyles[b] := AStyles[b];
ChangedCell(ARow, ACol);
end; end;
procedure TsWorksheet.WriteHorAlignment(ARow, ACol: Cardinal; AValue: TsHorAlignment); procedure TsWorksheet.WriteHorAlignment(ARow, ACol: Cardinal; AValue: TsHorAlignment);
@ -1601,6 +1632,7 @@ begin
lCell := GetCell(ARow, ACol); lCell := GetCell(ARow, ACol);
lCell^.UsedFormattingFields := lCell^.UsedFormattingFields + [uffHorAlign]; lCell^.UsedFormattingFields := lCell^.UsedFormattingFields + [uffHorAlign];
lCell^.HorAlignment := AValue; lCell^.HorAlignment := AValue;
ChangedCell(ARow, ACol);
end; end;
procedure TsWorksheet.WriteVertAlignment(ARow, ACol: Cardinal; AValue: TsVertAlignment); procedure TsWorksheet.WriteVertAlignment(ARow, ACol: Cardinal; AValue: TsVertAlignment);
@ -1610,6 +1642,7 @@ begin
lCell := GetCell(ARow, ACol); lCell := GetCell(ARow, ACol);
lCell^.UsedFormattingFields := lCell^.UsedFormattingFields + [uffVertAlign]; lCell^.UsedFormattingFields := lCell^.UsedFormattingFields + [uffVertAlign];
lCell^.VertAlignment := AValue; lCell^.VertAlignment := AValue;
ChangedCell(ARow, ACol);
end; end;
procedure TsWorksheet.WriteWordWrap(ARow, ACol: Cardinal; AValue: Boolean); procedure TsWorksheet.WriteWordWrap(ARow, ACol: Cardinal; AValue: Boolean);
@ -1621,6 +1654,7 @@ begin
Include(lCell^.UsedFormattingFields, uffWordwrap) Include(lCell^.UsedFormattingFields, uffWordwrap)
else else
Exclude(lCell^.UsedFormattingFields, uffWordwrap); Exclude(lCell^.UsedFormattingFields, uffWordwrap);
ChangedCell(ARow, ACol);
end; end;
function TsWorksheet.FindRow(ARow: Cardinal): PRow; function TsWorksheet.FindRow(ARow: Cardinal): PRow;

View File

@ -57,7 +57,6 @@ type
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
procedure LoadFromWorksheetGrid(const AValue: TsWorksheetGrid);
procedure LoadPropertiesFromStrings(AXInterval, AYInterval, AXTitle, AYTitle, ATitle: string); procedure LoadPropertiesFromStrings(AXInterval, AYInterval, AXTitle, AYTitle, ATitle: string);
public public
published published
@ -194,16 +193,6 @@ begin
inherited Destroy; inherited Destroy;
end; end;
procedure TsWorksheetChartSource.LoadFromWorksheetGrid(const AValue: TsWorksheetGrid);
begin
if AValue = nil then Exit;
AValue.SaveToWorksheet(FDataWorksheet);
InvalidateCaches;
Notify;
end;
procedure TsWorksheetChartSource.LoadPropertiesFromStrings(AXInterval, procedure TsWorksheetChartSource.LoadPropertiesFromStrings(AXInterval,
AYInterval, AXTitle, AYTitle, ATitle: string); AYInterval, AXTitle, AYTitle, ATitle: string);
var var

View File

@ -27,9 +27,13 @@ type
FHeaderCount: Integer; FHeaderCount: Integer;
FFrozenCols: Integer; FFrozenCols: Integer;
FFrozenRows: Integer; FFrozenRows: Integer;
FEditText: String;
FLockCount: Integer;
FEditing: Boolean;
function CalcAutoRowHeight(ARow: Integer): Integer; function CalcAutoRowHeight(ARow: Integer): Integer;
function CalcColWidth(AWidth: Single): Integer; function CalcColWidth(AWidth: Single): Integer;
function CalcRowHeight(AHeight: Single): Integer; function CalcRowHeight(AHeight: Single): Integer;
procedure ChangedCellHandler(ASender: TObject; ARow, ACol: Cardinal);
function GetShowGridLines: Boolean; function GetShowGridLines: Boolean;
function GetShowHeaders: Boolean; function GetShowHeaders: Boolean;
procedure SetFrozenCols(AValue: Integer); procedure SetFrozenCols(AValue: Integer);
@ -41,10 +45,14 @@ type
procedure DefaultDrawCell(ACol, ARow: Integer; var ARect: TRect; AState: TGridDrawState); override; procedure DefaultDrawCell(ACol, ARow: Integer; var ARect: TRect; AState: TGridDrawState); override;
procedure DoPrepareCanvas(ACol, ARow: Integer; AState: TGridDrawState); override; procedure DoPrepareCanvas(ACol, ARow: Integer; AState: TGridDrawState); override;
procedure DrawAllRows; override; procedure DrawAllRows; override;
procedure DrawFocusRect(aCol,aRow:Integer; ARect:TRect); override;
procedure DrawTextInCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); override; procedure DrawTextInCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); override;
function GetCellHeight(ACol, ARow: Integer): Integer; function GetCellHeight(ACol, ARow: Integer): Integer;
function GetCellText(ACol, ARow: Integer): String; function GetCellText(ACol, ARow: Integer): String;
function GetEditText(ACol, ARow: Integer): String; override;
procedure Loaded; override; procedure Loaded; override;
procedure LoadFromWorksheet(AWorksheet: TsWorksheet);
procedure SetEditText(ACol, ARow: Longint; const AValue: string); override;
procedure Setup; procedure Setup;
property DisplayFixedColRow: Boolean read GetShowHeaders write SetShowHeaders default true; property DisplayFixedColRow: Boolean read GetShowHeaders write SetShowHeaders default true;
property FrozenCols: Integer read FFrozenCols write SetFrozenCols; property FrozenCols: Integer read FFrozenCols write SetFrozenCols;
@ -55,15 +63,25 @@ type
{ public methods } { public methods }
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
procedure BeginUpdate;
procedure EditingDone; override;
procedure EndUpdate;
procedure GetSheets(const ASheets: TStrings); procedure GetSheets(const ASheets: TStrings);
procedure LoadFromWorksheet(AWorksheet: TsWorksheet); function GetWorksheetCol(AGridCol: Integer): Cardinal;
procedure LoadFromSpreadsheetFile(AFileName: string; AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0); overload; function GetWorksheetRow(AGridRow: Integer): Cardinal;
procedure LoadFromSpreadsheetFile(AFileName: string; AWorksheetIndex: Integer = 0); overload; procedure LoadFromSpreadsheetFile(AFileName: string;
procedure SaveToWorksheet(AWorksheet: TsWorksheet); AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0); overload;
procedure LoadFromSpreadsheetFile(AFileName: string;
AWorksheetIndex: Integer = 0); overload;
procedure SaveToSpreadsheetFile(AFileName: string;
AOverwriteExisting: Boolean = true); overload;
procedure SaveToSpreadsheetFile(AFileName: string; AFormat: TsSpreadsheetFormat;
AOverwriteExisting: Boolean = true); overload;
procedure SelectSheetByIndex(AIndex: Integer); procedure SelectSheetByIndex(AIndex: Integer);
{ public properties } { public properties }
property Worksheet: TsWorksheet read FWorksheet; property Worksheet: TsWorksheet read FWorksheet;
property Workbook: TsWorkbook read FWorkbook; property Workbook: TsWorkbook read FWorkbook;
property HeaderCount: Integer read FHeaderCount;
end; end;
{ TsWorksheetGrid } { TsWorksheetGrid }
@ -281,6 +299,12 @@ begin
inherited Destroy; inherited Destroy;
end; end;
{ Suppresses unnecessary repaints. }
procedure TsCustomWorksheetGrid.BeginUpdate;
begin
inc(FLockCount);
end;
// Converts the column width, given in "characters", to pixels // Converts the column width, given in "characters", to pixels
// All chars are assumed to have the same width defined by the "0". // All chars are assumed to have the same width defined by the "0".
// Therefore, this calculation is only approximate. // Therefore, this calculation is only approximate.
@ -314,6 +338,11 @@ begin
Result := round(AHeight / 25.4 * Screen.PixelsPerInch) + 4; Result := round(AHeight / 25.4 * Screen.PixelsPerInch) + 4;
end; end;
procedure TsCustomWorksheetGrid.ChangedCellHandler(ASender: TObject; ARow, ACol:Cardinal);
begin
if FLockCount = 0 then Invalidate;
end;
procedure TsCustomWorksheetGrid.DefaultDrawCell(aCol, aRow: Integer; var aRect: TRect; procedure TsCustomWorksheetGrid.DefaultDrawCell(aCol, aRow: Integer; var aRect: TRect;
AState: TGridDrawState); AState: TGridDrawState);
var var
@ -511,6 +540,15 @@ begin
end; end;
end; end;
procedure TsCustomWorksheetGrid.DrawFocusRect(aCol, aRow: Integer; ARect: TRect);
begin
Canvas.Pen.Color := clBlack;
Canvas.Pen.Width := 3;
Canvas.Brush.Style := bsClear;
InflateRect(ARect, -1, -1);
Canvas.Rectangle(ARect);
end;
{ Draws the cell text. Calls "GetCellText" to determine the text in the cell. { Draws the cell text. Calls "GetCellText" to determine the text in the cell.
Takes care of horizontal and vertical text alignment, text rotation and Takes care of horizontal and vertical text alignment, text rotation and
text wrapping } text wrapping }
@ -681,6 +719,51 @@ begin
end; end;
end; end;
procedure TsCustomWorksheetGrid.EditingDone;
var
oldText: String;
cell: PCell;
begin
if (not EditorShowing) and FEditing then begin
oldText := GetCellText(Col, Row);
if oldText <> FEditText then begin
if FWorksheet = nil then
FWorksheet := TsWorksheet.Create;
cell := FWorksheet.GetCell(Row-FHeaderCount, Col-FHeaderCount);
if FEditText = '' then
cell^.ContentType := cctEmpty
else
if TryStrToFloat(FEditText, cell^.NumberValue) then
cell^.ContentType := cctNumber
else
if TryStrToDateTime(FEditText, cell^.DateTimeValue) then begin
cell^.ContentType := cctDateTime;
if cell^.DateTimeValue < 1.0 then begin
if not (cell^.NumberFormat in [nfShortDateTime, nfShortTime, nfLongTime, nfShortTimeAM, nfLongTimeAM])
then cell^.NumberFormat := nfLongTime;
end else
if frac(cell^.DateTimeValue) = 0 then begin // this is a TDate
if not (cell^.NumberFormat in [nfShortDateTime, nfShortTime, nfLongTime, nfShortTimeAM, nfLongTimeAM])
then cell^.NumberFormat := nfShortDate
end else
cell^.NumberFormat := nfShortDateTime;
end else begin
cell^.UTF8StringValue := FEditText;
cell^.ContentType := cctUTF8String;
end;
FEditText := '';
end;
inherited EditingDone;
end;
FEditing := false;
end;
procedure TsCustomWorksheetGrid.EndUpdate;
begin
dec(FLockCount);
if FLockCount = 0 then Invalidate;
end;
{ Returns the height (in pixels) of the cell at ACol/ARow. } { Returns the height (in pixels) of the cell at ACol/ARow. }
function TsCustomWorksheetGrid.GetCellHeight(ACol, ARow: Integer): Integer; function TsCustomWorksheetGrid.GetCellHeight(ACol, ARow: Integer): Integer;
var var
@ -781,6 +864,13 @@ begin
end; end;
end; end;
{ Determines the text to be passed to the cell editor. }
function TsCustomWorksheetGrid.GetEditText(aCol, aRow: Integer): string;
begin
Result := GetCellText(aCol, aRow);
if Assigned(OnGetEditText) then OnGetEditText(Self, aCol, aRow, result);
end;
{ Returns a list of worksheets contained in the file. Useful for assigning to { Returns a list of worksheets contained in the file. Useful for assigning to
user controls like TabControl, Combobox etc. in order to select a sheet. } user controls like TabControl, Combobox etc. in order to select a sheet. }
procedure TsCustomWorksheetGrid.GetSheets(const ASheets: TStrings); procedure TsCustomWorksheetGrid.GetSheets(const ASheets: TStrings);
@ -803,6 +893,16 @@ begin
Result := FHeaderCount <> 0; Result := FHeaderCount <> 0;
end; end;
function TsCustomWorksheetGrid.GetWorksheetCol(AGridCol: Integer): cardinal;
begin
Result := AGridCol - FHeaderCount;
end;
function TsCustomWorksheetGrid.GetWorksheetRow(AGridRow: Integer): Cardinal;
begin
Result := AGridRow - FHeaderCount;
end;
procedure TsCustomWorksheetGrid.Loaded; procedure TsCustomWorksheetGrid.Loaded;
begin begin
inherited; inherited;
@ -837,6 +937,13 @@ begin
Setup; Setup;
end; end;
procedure TsCustomWorksheetGrid.SetEditText(ACol, ARow: Longint; const AValue: string);
begin
FEditText := AValue;
FEditing := true;
inherited SetEditText(aCol, aRow, aValue);
end;
procedure TsCustomWorksheetGrid.Setup; procedure TsCustomWorksheetGrid.Setup;
var var
i: Integer; i: Integer;
@ -882,12 +989,14 @@ begin
RowHeights[i] := CalcRowHeight(lRow^.Height); RowHeights[i] := CalcRowHeight(lRow^.Height);
end; end;
end; end;
Invalidate;
end; end;
procedure TsCustomWorksheetGrid.LoadFromWorksheet(AWorksheet: TsWorksheet); procedure TsCustomWorksheetGrid.LoadFromWorksheet(AWorksheet: TsWorksheet);
begin begin
FWorksheet := AWorksheet; FWorksheet := AWorksheet;
if FWorksheet <> nil then begin if FWorksheet <> nil then begin
FWorksheet.OnChangeCell := @ChangedCellHandler;
ShowHeaders := (soShowHeaders in FWorksheet.Options); ShowHeaders := (soShowHeaders in FWorksheet.Options);
ShowGridLines := (soShowGridLines in FWorksheet.Options); ShowGridLines := (soShowGridLines in FWorksheet.Options);
if (soHasFrozenPanes in FWorksheet.Options) then begin if (soHasFrozenPanes in FWorksheet.Options) then begin
@ -904,35 +1013,44 @@ end;
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string; procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer); AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer);
begin begin
BeginUpdate;
try
FreeAndNil(FWorkbook); FreeAndNil(FWorkbook);
FWorkbook := TsWorkbook.Create; FWorkbook := TsWorkbook.Create;
FWorkbook.ReadFromFile(AFileName, AFormat); FWorkbook.ReadFromFile(AFileName, AFormat);
LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AWorksheetIndex)); LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AWorksheetIndex));
finally
EndUpdate;
end;
end; end;
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string; procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
AWorksheetIndex: Integer); AWorksheetIndex: Integer);
begin begin
BeginUpdate;
try
FreeAndNil(FWorkbook); FreeAndNil(FWorkbook);
FWorkbook := TsWorkbook.Create; FWorkbook := TsWorkbook.Create;
FWorkbook.ReadFromFile(AFilename); FWorkbook.ReadFromFile(AFilename);
LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AWorksheetIndex)); LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AWorksheetIndex));
finally
EndUpdate;
end;
end; end;
procedure TsCustomWorksheetGrid.SaveToWorksheet(AWorksheet: TsWorksheet); { Writes the workbook behind the grid to a spreadsheet file. }
var procedure TsCustomWorksheetGrid.SaveToSpreadsheetFile(AFileName: String;
x, y: Integer; AFormat: TsSpreadsheetFormat; AOverwriteExisting: Boolean = true);
Str: string;
begin begin
if AWorksheet = nil then Exit; if FWorksheet <> nil then
FWorkbook.WriteToFile(AFileName, AFormat, AOverwriteExisting);
{ Copy the contents }
for x := 0 to ColCount - 1 do
for y := 0 to RowCount - 1 do
begin
Str := GetCells(x, y);
if Str <> '' then AWorksheet.WriteUTF8Text(y, x, Str);
end; end;
procedure TsCustomWorksheetGrid.SaveToSpreadsheetFile(AFileName: String;
AOverwriteExisting: Boolean = true);
begin
if FWorksheet <> nil then
FWorkbook.WriteToFile(AFileName, AOverwriteExisting);
end; end;
procedure TsCustomWorksheetGrid.SelectSheetByIndex(AIndex: Integer); procedure TsCustomWorksheetGrid.SelectSheetByIndex(AIndex: Integer);