You've already forked lazarus-ccr
fpspreadsheet: Add properties for setting cell borders to TsWorksheetGrid. Redo border and selection painting again. Fix issues due to adjacent cells having different borders.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3037 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -107,7 +107,7 @@
|
|||||||
<PackageName Value="LCL"/>
|
<PackageName Value="LCL"/>
|
||||||
</Item2>
|
</Item2>
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="53">
|
<Units Count="55">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="fpsgrid.lpr"/>
|
<Filename Value="fpsgrid.lpr"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
@ -116,7 +116,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="184"/>
|
<UsageCount Value="200"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit0>
|
</Unit0>
|
||||||
<Unit1>
|
<Unit1>
|
||||||
@ -129,11 +129,11 @@
|
|||||||
<IsVisibleTab Value="True"/>
|
<IsVisibleTab Value="True"/>
|
||||||
<EditorIndex Value="1"/>
|
<EditorIndex Value="1"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="378"/>
|
<TopLine Value="204"/>
|
||||||
<CursorPos X="1" Y="410"/>
|
<CursorPos X="28" Y="223"/>
|
||||||
<UsageCount Value="184"/>
|
<UsageCount Value="200"/>
|
||||||
<Bookmarks Count="1">
|
<Bookmarks Count="1">
|
||||||
<Item0 X="31" Y="442" ID="1"/>
|
<Item0 X="49" Y="470" ID="1"/>
|
||||||
</Bookmarks>
|
</Bookmarks>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
<LoadedDesigner Value="True"/>
|
<LoadedDesigner Value="True"/>
|
||||||
@ -141,11 +141,11 @@
|
|||||||
<Unit2>
|
<Unit2>
|
||||||
<Filename Value="..\..\fpspreadsheet.pas"/>
|
<Filename Value="..\..\fpspreadsheet.pas"/>
|
||||||
<UnitName Value="fpspreadsheet"/>
|
<UnitName Value="fpspreadsheet"/>
|
||||||
<EditorIndex Value="4"/>
|
<EditorIndex Value="3"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1906"/>
|
<TopLine Value="228"/>
|
||||||
<CursorPos X="32" Y="1918"/>
|
<CursorPos X="36" Y="241"/>
|
||||||
<UsageCount Value="86"/>
|
<UsageCount Value="98"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit2>
|
</Unit2>
|
||||||
<Unit3>
|
<Unit3>
|
||||||
@ -153,9 +153,9 @@
|
|||||||
<UnitName Value="fpspreadsheetgrid"/>
|
<UnitName Value="fpspreadsheetgrid"/>
|
||||||
<EditorIndex Value="2"/>
|
<EditorIndex Value="2"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1351"/>
|
<TopLine Value="65"/>
|
||||||
<CursorPos X="1" Y="1380"/>
|
<CursorPos X="60" Y="87"/>
|
||||||
<UsageCount Value="87"/>
|
<UsageCount Value="99"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit3>
|
</Unit3>
|
||||||
<Unit4>
|
<Unit4>
|
||||||
@ -164,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="9"/>
|
<UsageCount Value="7"/>
|
||||||
</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"/>
|
||||||
@ -172,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="9"/>
|
<UsageCount Value="7"/>
|
||||||
</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"/>
|
||||||
@ -180,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="9"/>
|
<UsageCount Value="7"/>
|
||||||
</Unit6>
|
</Unit6>
|
||||||
<Unit7>
|
<Unit7>
|
||||||
<Filename Value="c:\Lazarus\lcl\grids.pas"/>
|
<Filename Value="c:\Lazarus\lcl\grids.pas"/>
|
||||||
@ -188,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="9"/>
|
<UsageCount Value="7"/>
|
||||||
</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="9"/>
|
<UsageCount Value="7"/>
|
||||||
</Unit8>
|
</Unit8>
|
||||||
<Unit9>
|
<Unit9>
|
||||||
<Filename Value="..\..\fpsallformats.pas"/>
|
<Filename Value="..\..\fpsallformats.pas"/>
|
||||||
@ -203,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="9"/>
|
<UsageCount Value="7"/>
|
||||||
</Unit9>
|
</Unit9>
|
||||||
<Unit10>
|
<Unit10>
|
||||||
<Filename Value="..\..\wikitable.pas"/>
|
<Filename Value="..\..\wikitable.pas"/>
|
||||||
@ -211,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="15"/>
|
<UsageCount Value="13"/>
|
||||||
</Unit10>
|
</Unit10>
|
||||||
<Unit11>
|
<Unit11>
|
||||||
<Filename Value="..\..\fpsopendocument.pas"/>
|
<Filename Value="..\..\fpsopendocument.pas"/>
|
||||||
@ -219,17 +219,15 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</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="3"/>
|
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="992"/>
|
<TopLine Value="6924"/>
|
||||||
<CursorPos X="15" Y="1010"/>
|
<CursorPos X="20" Y="6956"/>
|
||||||
<UsageCount Value="34"/>
|
<UsageCount Value="46"/>
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit12>
|
</Unit12>
|
||||||
<Unit13>
|
<Unit13>
|
||||||
<Filename Value="..\..\fpsutils.pas"/>
|
<Filename Value="..\..\fpsutils.pas"/>
|
||||||
@ -237,38 +235,38 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="35"/>
|
<TopLine Value="35"/>
|
||||||
<CursorPos X="1" Y="62"/>
|
<CursorPos X="1" Y="62"/>
|
||||||
<UsageCount Value="50"/>
|
<UsageCount Value="48"/>
|
||||||
</Unit13>
|
</Unit13>
|
||||||
<Unit14>
|
<Unit14>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\include\canvas.inc"/>
|
<Filename Value="d:\lazarus-svn\lcl\include\canvas.inc"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1212"/>
|
<TopLine Value="1212"/>
|
||||||
<CursorPos X="3" Y="1218"/>
|
<CursorPos X="3" Y="1218"/>
|
||||||
<UsageCount Value="7"/>
|
<UsageCount Value="5"/>
|
||||||
</Unit14>
|
</Unit14>
|
||||||
<Unit15>
|
<Unit15>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\graphics.pp"/>
|
<Filename Value="d:\lazarus-svn\lcl\graphics.pp"/>
|
||||||
<UnitName Value="Graphics"/>
|
<UnitName Value="Graphics"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="2563"/>
|
<TopLine Value="573"/>
|
||||||
<CursorPos X="22" Y="2571"/>
|
<CursorPos X="43" Y="593"/>
|
||||||
<UsageCount Value="30"/>
|
<UsageCount Value="29"/>
|
||||||
</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="15"/>
|
<UsageCount Value="13"/>
|
||||||
</Unit16>
|
</Unit16>
|
||||||
<Unit17>
|
<Unit17>
|
||||||
<Filename Value="..\..\xlsbiff8.pas"/>
|
<Filename Value="..\..\xlsbiff8.pas"/>
|
||||||
<UnitName Value="xlsbiff8"/>
|
<UnitName Value="xlsbiff8"/>
|
||||||
<EditorIndex Value="6"/>
|
<EditorIndex Value="5"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1493"/>
|
<TopLine Value="2008"/>
|
||||||
<CursorPos X="1" Y="1514"/>
|
<CursorPos X="39" Y="1983"/>
|
||||||
<UsageCount Value="61"/>
|
<UsageCount Value="73"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit17>
|
</Unit17>
|
||||||
<Unit18>
|
<Unit18>
|
||||||
@ -277,43 +275,43 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1091"/>
|
<TopLine Value="1091"/>
|
||||||
<CursorPos X="12" Y="1122"/>
|
<CursorPos X="12" Y="1122"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</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="9"/>
|
<UsageCount Value="7"/>
|
||||||
</Unit19>
|
</Unit19>
|
||||||
<Unit20>
|
<Unit20>
|
||||||
<Filename Value="..\..\xlscommon.pas"/>
|
<Filename Value="..\..\xlscommon.pas"/>
|
||||||
<UnitName Value="xlscommon"/>
|
<UnitName Value="xlscommon"/>
|
||||||
<EditorIndex Value="5"/>
|
<EditorIndex Value="4"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="20"/>
|
<TopLine Value="1461"/>
|
||||||
<CursorPos X="3" Y="51"/>
|
<CursorPos X="43" Y="1479"/>
|
||||||
<UsageCount Value="57"/>
|
<UsageCount Value="69"/>
|
||||||
<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="6"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1250"/>
|
<TopLine Value="1"/>
|
||||||
<CursorPos X="60" Y="1273"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<UsageCount Value="44"/>
|
<UsageCount Value="56"/>
|
||||||
<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="7"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="547"/>
|
<TopLine Value="547"/>
|
||||||
<CursorPos X="1" Y="563"/>
|
<CursorPos X="1" Y="563"/>
|
||||||
<UsageCount Value="45"/>
|
<UsageCount Value="57"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit22>
|
</Unit22>
|
||||||
<Unit23>
|
<Unit23>
|
||||||
@ -322,7 +320,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="4"/>
|
<UsageCount Value="2"/>
|
||||||
</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"/>
|
||||||
@ -330,7 +328,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="17"/>
|
<UsageCount Value="15"/>
|
||||||
</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"/>
|
||||||
@ -338,14 +336,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="5"/>
|
<UsageCount Value="3"/>
|
||||||
</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="13"/>
|
<UsageCount Value="11"/>
|
||||||
</Unit26>
|
</Unit26>
|
||||||
<Unit27>
|
<Unit27>
|
||||||
<Filename Value="d:\Prog_Delphi\common\units\XLS.pas"/>
|
<Filename Value="d:\Prog_Delphi\common\units\XLS.pas"/>
|
||||||
@ -353,29 +351,29 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="114"/>
|
<TopLine Value="114"/>
|
||||||
<CursorPos X="42" Y="152"/>
|
<CursorPos X="42" Y="152"/>
|
||||||
<UsageCount Value="13"/>
|
<UsageCount Value="11"/>
|
||||||
</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="354"/>
|
||||||
<CursorPos X="3" Y="286"/>
|
<CursorPos X="1" Y="385"/>
|
||||||
<UsageCount Value="13"/>
|
<UsageCount Value="16"/>
|
||||||
</Unit28>
|
</Unit28>
|
||||||
<Unit29>
|
<Unit29>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\controls.pp"/>
|
<Filename Value="d:\lazarus-svn\lcl\controls.pp"/>
|
||||||
<UnitName Value="Controls"/>
|
<UnitName Value="Controls"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1480"/>
|
<TopLine Value="2222"/>
|
||||||
<CursorPos X="15" Y="1498"/>
|
<CursorPos X="14" Y="2242"/>
|
||||||
<UsageCount Value="12"/>
|
<UsageCount Value="11"/>
|
||||||
</Unit29>
|
</Unit29>
|
||||||
<Unit30>
|
<Unit30>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\include\control.inc"/>
|
<Filename Value="d:\lazarus-svn\lcl\include\control.inc"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="4129"/>
|
<TopLine Value="4129"/>
|
||||||
<CursorPos X="1" Y="4161"/>
|
<CursorPos X="1" Y="4161"/>
|
||||||
<UsageCount Value="12"/>
|
<UsageCount Value="10"/>
|
||||||
</Unit30>
|
</Unit30>
|
||||||
<Unit31>
|
<Unit31>
|
||||||
<Filename Value="..\..\fpspreadsheetchart.pas"/>
|
<Filename Value="..\..\fpspreadsheetchart.pas"/>
|
||||||
@ -383,7 +381,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="170"/>
|
<TopLine Value="170"/>
|
||||||
<CursorPos X="37" Y="204"/>
|
<CursorPos X="37" Y="204"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit31>
|
</Unit31>
|
||||||
<Unit32>
|
<Unit32>
|
||||||
<Filename Value="d:\lazarus-svn\components\lazutils\lazutf8.pas"/>
|
<Filename Value="d:\lazarus-svn\components\lazutils\lazutf8.pas"/>
|
||||||
@ -391,7 +389,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="3180"/>
|
<TopLine Value="3180"/>
|
||||||
<CursorPos X="1" Y="3212"/>
|
<CursorPos X="1" Y="3212"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="7"/>
|
||||||
</Unit32>
|
</Unit32>
|
||||||
<Unit33>
|
<Unit33>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\colorbox.pas"/>
|
<Filename Value="d:\lazarus-svn\lcl\colorbox.pas"/>
|
||||||
@ -399,7 +397,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="13"/>
|
<TopLine Value="13"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="7"/>
|
||||||
</Unit33>
|
</Unit33>
|
||||||
<Unit34>
|
<Unit34>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\dialogs.pp"/>
|
<Filename Value="d:\lazarus-svn\lcl\dialogs.pp"/>
|
||||||
@ -407,7 +405,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="222"/>
|
<TopLine Value="222"/>
|
||||||
<CursorPos X="3" Y="253"/>
|
<CursorPos X="3" Y="253"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="7"/>
|
||||||
</Unit34>
|
</Unit34>
|
||||||
<Unit35>
|
<Unit35>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\forms.pp"/>
|
<Filename Value="d:\lazarus-svn\lcl\forms.pp"/>
|
||||||
@ -415,7 +413,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="932"/>
|
<TopLine Value="932"/>
|
||||||
<CursorPos X="3" Y="939"/>
|
<CursorPos X="3" Y="939"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="7"/>
|
||||||
</Unit35>
|
</Unit35>
|
||||||
<Unit36>
|
<Unit36>
|
||||||
<Filename Value="C:\development\lazarus\lcl\graphics.pp"/>
|
<Filename Value="C:\development\lazarus\lcl\graphics.pp"/>
|
||||||
@ -423,7 +421,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="2053"/>
|
<TopLine Value="2053"/>
|
||||||
<CursorPos X="30" Y="1945"/>
|
<CursorPos X="30" Y="1945"/>
|
||||||
<UsageCount Value="12"/>
|
<UsageCount Value="10"/>
|
||||||
</Unit36>
|
</Unit36>
|
||||||
<Unit37>
|
<Unit37>
|
||||||
<Filename Value="C:\development\fpc\packages\fcl-image\src\fpcanvas.pp"/>
|
<Filename Value="C:\development\fpc\packages\fcl-image\src\fpcanvas.pp"/>
|
||||||
@ -431,14 +429,14 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="89"/>
|
<TopLine Value="89"/>
|
||||||
<CursorPos X="15" Y="97"/>
|
<CursorPos X="15" Y="97"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit37>
|
</Unit37>
|
||||||
<Unit38>
|
<Unit38>
|
||||||
<Filename Value="C:\development\fpc\packages\fcl-image\src\fpfont.inc"/>
|
<Filename Value="C:\development\fpc\packages\fcl-image\src\fpfont.inc"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="54"/>
|
<TopLine Value="54"/>
|
||||||
<CursorPos X="3" Y="57"/>
|
<CursorPos X="3" Y="57"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit38>
|
</Unit38>
|
||||||
<Unit39>
|
<Unit39>
|
||||||
<Filename Value="C:\development\lazarus\lcl\graphmath.pp"/>
|
<Filename Value="C:\development\lazarus\lcl\graphmath.pp"/>
|
||||||
@ -446,7 +444,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="584"/>
|
<TopLine Value="584"/>
|
||||||
<CursorPos X="3" Y="439"/>
|
<CursorPos X="3" Y="439"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit39>
|
</Unit39>
|
||||||
<Unit40>
|
<Unit40>
|
||||||
<Filename Value="C:\development\lazarus\lcl\graphtype.pp"/>
|
<Filename Value="C:\development\lazarus\lcl\graphtype.pp"/>
|
||||||
@ -454,7 +452,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="234"/>
|
<TopLine Value="234"/>
|
||||||
<CursorPos X="3" Y="33"/>
|
<CursorPos X="3" Y="33"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit40>
|
</Unit40>
|
||||||
<Unit41>
|
<Unit41>
|
||||||
<Filename Value="C:\development\lazarus\lcl\lcltype.pp"/>
|
<Filename Value="C:\development\lazarus\lcl\lcltype.pp"/>
|
||||||
@ -462,7 +460,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1628"/>
|
<TopLine Value="1628"/>
|
||||||
<CursorPos X="3" Y="1643"/>
|
<CursorPos X="3" Y="1643"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit41>
|
</Unit41>
|
||||||
<Unit42>
|
<Unit42>
|
||||||
<Filename Value="C:\development\lazarus\lcl\graphutil.pp"/>
|
<Filename Value="C:\development\lazarus\lcl\graphutil.pp"/>
|
||||||
@ -470,7 +468,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="128"/>
|
<TopLine Value="128"/>
|
||||||
<CursorPos X="12" Y="143"/>
|
<CursorPos X="12" Y="143"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit42>
|
</Unit42>
|
||||||
<Unit43>
|
<Unit43>
|
||||||
<Filename Value="C:\development\fpc\rtl\objpas\math.pp"/>
|
<Filename Value="C:\development\fpc\rtl\objpas\math.pp"/>
|
||||||
@ -478,14 +476,14 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="144"/>
|
<TopLine Value="144"/>
|
||||||
<CursorPos X="10" Y="159"/>
|
<CursorPos X="10" Y="159"/>
|
||||||
<UsageCount Value="14"/>
|
<UsageCount Value="12"/>
|
||||||
</Unit43>
|
</Unit43>
|
||||||
<Unit44>
|
<Unit44>
|
||||||
<Filename Value="C:\development\fpc\rtl\i386\i386.inc"/>
|
<Filename Value="C:\development\fpc\rtl\i386\i386.inc"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1551"/>
|
<TopLine Value="1551"/>
|
||||||
<CursorPos X="3" Y="1563"/>
|
<CursorPos X="3" Y="1563"/>
|
||||||
<UsageCount Value="12"/>
|
<UsageCount Value="10"/>
|
||||||
</Unit44>
|
</Unit44>
|
||||||
<Unit45>
|
<Unit45>
|
||||||
<Filename Value="C:\development\lazarus\lcl\grids.pas"/>
|
<Filename Value="C:\development\lazarus\lcl\grids.pas"/>
|
||||||
@ -493,7 +491,7 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="794"/>
|
<TopLine Value="794"/>
|
||||||
<CursorPos X="15" Y="1010"/>
|
<CursorPos X="15" Y="1010"/>
|
||||||
<UsageCount Value="18"/>
|
<UsageCount Value="16"/>
|
||||||
</Unit45>
|
</Unit45>
|
||||||
<Unit46>
|
<Unit46>
|
||||||
<Filename Value="..\..\..\spktoolbar\SpkGraphTools\SpkGraphTools.pas"/>
|
<Filename Value="..\..\..\spktoolbar\SpkGraphTools\SpkGraphTools.pas"/>
|
||||||
@ -501,172 +499,154 @@
|
|||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="136"/>
|
<TopLine Value="136"/>
|
||||||
<CursorPos X="1" Y="143"/>
|
<CursorPos X="1" Y="143"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="7"/>
|
||||||
</Unit46>
|
</Unit46>
|
||||||
<Unit47>
|
<Unit47>
|
||||||
<Filename Value="C:\development\fpc\rtl\objpas\classes\lists.inc"/>
|
<Filename Value="C:\development\fpc\rtl\objpas\classes\lists.inc"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="34"/>
|
<TopLine Value="34"/>
|
||||||
<CursorPos X="1" Y="49"/>
|
<CursorPos X="1" Y="49"/>
|
||||||
<UsageCount Value="17"/>
|
<UsageCount Value="15"/>
|
||||||
</Unit47>
|
</Unit47>
|
||||||
<Unit48>
|
<Unit48>
|
||||||
<Filename Value="C:\development\lazarus\lcl\include\canvas.inc"/>
|
<Filename Value="C:\development\lazarus\lcl\include\canvas.inc"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1705"/>
|
<TopLine Value="1705"/>
|
||||||
<CursorPos X="1" Y="1720"/>
|
<CursorPos X="1" Y="1720"/>
|
||||||
<UsageCount Value="17"/>
|
<UsageCount Value="15"/>
|
||||||
</Unit48>
|
</Unit48>
|
||||||
<Unit49>
|
<Unit49>
|
||||||
<Filename Value="C:\development\lazarus\lcl\include\font.inc"/>
|
<Filename Value="C:\development\lazarus\lcl\include\font.inc"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1139"/>
|
<TopLine Value="1139"/>
|
||||||
<CursorPos X="25" Y="1161"/>
|
<CursorPos X="25" Y="1161"/>
|
||||||
<UsageCount Value="17"/>
|
<UsageCount Value="15"/>
|
||||||
</Unit49>
|
</Unit49>
|
||||||
<Unit50>
|
<Unit50>
|
||||||
<Filename Value="C:\development\lazarus\lcl\include\winapih.inc"/>
|
<Filename Value="C:\development\lazarus\lcl\include\winapih.inc"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="156"/>
|
<TopLine Value="156"/>
|
||||||
<CursorPos X="10" Y="171"/>
|
<CursorPos X="10" Y="171"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit50>
|
</Unit50>
|
||||||
<Unit51>
|
<Unit51>
|
||||||
<Filename Value="C:\development\lazarus\lcl\include\intfbasewinapi.inc"/>
|
<Filename Value="C:\development\lazarus\lcl\include\intfbasewinapi.inc"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="1577"/>
|
<TopLine Value="1577"/>
|
||||||
<CursorPos X="3" Y="1579"/>
|
<CursorPos X="3" Y="1579"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit51>
|
</Unit51>
|
||||||
<Unit52>
|
<Unit52>
|
||||||
<Filename Value="C:\development\fpc\rtl\inc\except.inc"/>
|
<Filename Value="C:\development\fpc\rtl\inc\except.inc"/>
|
||||||
<WindowIndex Value="0"/>
|
<WindowIndex Value="0"/>
|
||||||
<TopLine Value="202"/>
|
<TopLine Value="202"/>
|
||||||
<CursorPos X="1" Y="227"/>
|
<CursorPos X="1" Y="227"/>
|
||||||
<UsageCount Value="11"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit52>
|
</Unit52>
|
||||||
|
<Unit53>
|
||||||
|
<Filename Value="d:\lazarus-svn\lcl\include\menuitem.inc"/>
|
||||||
|
<WindowIndex Value="0"/>
|
||||||
|
<TopLine Value="69"/>
|
||||||
|
<CursorPos X="28" Y="82"/>
|
||||||
|
<UsageCount Value="15"/>
|
||||||
|
</Unit53>
|
||||||
|
<Unit54>
|
||||||
|
<Filename Value="d:\lazarus-svn\lcl\include\application.inc"/>
|
||||||
|
<WindowIndex Value="0"/>
|
||||||
|
<TopLine Value="1371"/>
|
||||||
|
<CursorPos X="1" Y="1390"/>
|
||||||
|
<UsageCount Value="14"/>
|
||||||
|
</Unit54>
|
||||||
</Units>
|
</Units>
|
||||||
<JumpHistory Count="30" HistoryIndex="29">
|
<JumpHistory Count="22" HistoryIndex="21">
|
||||||
<Position1>
|
<Position1>
|
||||||
<Filename Value="mainform.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="456" Column="1" TopLine="431"/>
|
<Caret Line="701" Column="22" TopLine="694"/>
|
||||||
</Position1>
|
</Position1>
|
||||||
<Position2>
|
<Position2>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="5203" Column="1" TopLine="5184"/>
|
<Caret Line="701" Column="32" TopLine="681"/>
|
||||||
</Position2>
|
</Position2>
|
||||||
<Position3>
|
<Position3>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="5204" Column="1" TopLine="5184"/>
|
<Caret Line="704" Column="1" TopLine="693"/>
|
||||||
</Position3>
|
</Position3>
|
||||||
<Position4>
|
<Position4>
|
||||||
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1370" Column="1" TopLine="1351"/>
|
<Caret Line="710" Column="1" TopLine="686"/>
|
||||||
</Position4>
|
</Position4>
|
||||||
<Position5>
|
<Position5>
|
||||||
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1371" Column="1" TopLine="1351"/>
|
<Caret Line="748" Column="1" TopLine="715"/>
|
||||||
</Position5>
|
</Position5>
|
||||||
<Position6>
|
<Position6>
|
||||||
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1372" Column="1" TopLine="1351"/>
|
<Caret Line="1709" Column="38" TopLine="1709"/>
|
||||||
</Position6>
|
</Position6>
|
||||||
<Position7>
|
<Position7>
|
||||||
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1373" Column="1" TopLine="1351"/>
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
</Position7>
|
</Position7>
|
||||||
<Position8>
|
<Position8>
|
||||||
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1374" Column="1" TopLine="1351"/>
|
<Caret Line="45" Column="49" TopLine="13"/>
|
||||||
</Position8>
|
</Position8>
|
||||||
<Position9>
|
<Position9>
|
||||||
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1375" Column="1" TopLine="1351"/>
|
<Caret Line="1161" Column="41" TopLine="1135"/>
|
||||||
</Position9>
|
</Position9>
|
||||||
<Position10>
|
<Position10>
|
||||||
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1380" Column="1" TopLine="1351"/>
|
<Caret Line="1164" Column="21" TopLine="1129"/>
|
||||||
</Position10>
|
</Position10>
|
||||||
<Position11>
|
<Position11>
|
||||||
<Filename Value="mainform.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="457" Column="1" TopLine="431"/>
|
<Caret Line="1146" Column="56" TopLine="1127"/>
|
||||||
</Position11>
|
</Position11>
|
||||||
<Position12>
|
<Position12>
|
||||||
<Filename Value="mainform.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="458" Column="1" TopLine="431"/>
|
<Caret Line="1149" Column="53" TopLine="1127"/>
|
||||||
</Position12>
|
</Position12>
|
||||||
<Position13>
|
<Position13>
|
||||||
<Filename Value="mainform.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="459" Column="1" TopLine="431"/>
|
<Caret Line="1158" Column="61" TopLine="1140"/>
|
||||||
</Position13>
|
</Position13>
|
||||||
<Position14>
|
<Position14>
|
||||||
<Filename Value="mainform.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="458" Column="1" TopLine="431"/>
|
<Caret Line="1727" Column="25" TopLine="1708"/>
|
||||||
</Position14>
|
</Position14>
|
||||||
<Position15>
|
<Position15>
|
||||||
<Filename Value="mainform.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="459" Column="1" TopLine="431"/>
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
</Position15>
|
</Position15>
|
||||||
<Position16>
|
<Position16>
|
||||||
<Filename Value="mainform.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="460" Column="17" TopLine="431"/>
|
<Caret Line="45" Column="37" TopLine="13"/>
|
||||||
</Position16>
|
</Position16>
|
||||||
<Position17>
|
<Position17>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="5184" Column="33" TopLine="5184"/>
|
<Caret Line="1137" Column="55" TopLine="1135"/>
|
||||||
</Position17>
|
</Position17>
|
||||||
<Position18>
|
<Position18>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1" Column="1" TopLine="1"/>
|
<Caret Line="1727" Column="22" TopLine="1708"/>
|
||||||
</Position18>
|
</Position18>
|
||||||
<Position19>
|
<Position19>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="310" Column="16" TopLine="278"/>
|
<Caret Line="1755" Column="19" TopLine="1737"/>
|
||||||
</Position19>
|
</Position19>
|
||||||
<Position20>
|
<Position20>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1032" Column="25" TopLine="1002"/>
|
<Caret Line="1154" Column="1" TopLine="1135"/>
|
||||||
</Position20>
|
</Position20>
|
||||||
<Position21>
|
<Position21>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1213" Column="33" TopLine="1181"/>
|
<Caret Line="1142" Column="19" TopLine="1133"/>
|
||||||
</Position21>
|
</Position21>
|
||||||
<Position22>
|
<Position22>
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
<Filename Value="..\..\fpspreadsheetgrid.pas"/>
|
||||||
<Caret Line="1239" Column="25" TopLine="1208"/>
|
<Caret Line="1929" Column="3" TopLine="1898"/>
|
||||||
</Position22>
|
</Position22>
|
||||||
<Position23>
|
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
|
||||||
<Caret Line="1373" Column="85" TopLine="1343"/>
|
|
||||||
</Position23>
|
|
||||||
<Position24>
|
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
|
||||||
<Caret Line="1480" Column="26" TopLine="1450"/>
|
|
||||||
</Position24>
|
|
||||||
<Position25>
|
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
|
||||||
<Caret Line="1699" Column="26" TopLine="1669"/>
|
|
||||||
</Position25>
|
|
||||||
<Position26>
|
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
|
||||||
<Caret Line="3692" Column="32" TopLine="3660"/>
|
|
||||||
</Position26>
|
|
||||||
<Position27>
|
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
|
||||||
<Caret Line="7048" Column="20" TopLine="7032"/>
|
|
||||||
</Position27>
|
|
||||||
<Position28>
|
|
||||||
<Filename Value="d:\lazarus-svn\lcl\grids.pas"/>
|
|
||||||
<Caret Line="6948" Column="3" TopLine="6942"/>
|
|
||||||
</Position28>
|
|
||||||
<Position29>
|
|
||||||
<Filename Value="mainform.pas"/>
|
|
||||||
<Caret Line="377" Column="31" TopLine="377"/>
|
|
||||||
</Position29>
|
|
||||||
<Position30>
|
|
||||||
<Filename Value="mainform.pas"/>
|
|
||||||
<Caret Line="2" Column="37" TopLine="76"/>
|
|
||||||
</Position30>
|
|
||||||
</JumpHistory>
|
</JumpHistory>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
@ -695,15 +675,6 @@
|
|||||||
</Other>
|
</Other>
|
||||||
</CompilerOptions>
|
</CompilerOptions>
|
||||||
<Debugging>
|
<Debugging>
|
||||||
<BreakPoints Count="1">
|
|
||||||
<Item1>
|
|
||||||
<Kind Value="bpkSource"/>
|
|
||||||
<WatchScope Value="wpsLocal"/>
|
|
||||||
<WatchKind Value="wpkWrite"/>
|
|
||||||
<Source Value="mainform.pas"/>
|
|
||||||
<Line Value="456"/>
|
|
||||||
</Item1>
|
|
||||||
</BreakPoints>
|
|
||||||
<Watches Count="2">
|
<Watches Count="2">
|
||||||
<Item1>
|
<Item1>
|
||||||
<Expression Value="acol"/>
|
<Expression Value="acol"/>
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -33,6 +33,16 @@ type
|
|||||||
AcBorderBottomMedium: TAction;
|
AcBorderBottomMedium: TAction;
|
||||||
AcBorderLeft: TAction;
|
AcBorderLeft: TAction;
|
||||||
AcBorderRight: TAction;
|
AcBorderRight: TAction;
|
||||||
|
AcBorderNone: TAction;
|
||||||
|
AcBorderHCenter: TAction;
|
||||||
|
AcBorderVCenter: TAction;
|
||||||
|
AcBorderTopBottom: TAction;
|
||||||
|
AcBorderTopBottomThick: TAction;
|
||||||
|
AcBorderInner: TAction;
|
||||||
|
AcBorderAll: TAction;
|
||||||
|
AcBorderOuter: TAction;
|
||||||
|
AcBorderOuterMedium: TAction;
|
||||||
|
AcWordwrap: TAction;
|
||||||
AcVAlignDefault: TAction;
|
AcVAlignDefault: TAction;
|
||||||
AcVAlignTop: TAction;
|
AcVAlignTop: TAction;
|
||||||
AcVAlignCenter: TAction;
|
AcVAlignCenter: TAction;
|
||||||
@ -49,12 +59,34 @@ type
|
|||||||
Label2: TLabel;
|
Label2: TLabel;
|
||||||
MainMenu1: TMainMenu;
|
MainMenu1: TMainMenu;
|
||||||
MenuItem1: TMenuItem;
|
MenuItem1: TMenuItem;
|
||||||
|
MenuItem10: TMenuItem;
|
||||||
|
MenuItem11: TMenuItem;
|
||||||
|
MenuItem12: TMenuItem;
|
||||||
|
MenuItem13: TMenuItem;
|
||||||
|
MenuItem14: TMenuItem;
|
||||||
|
MenuItem15: TMenuItem;
|
||||||
|
MenuItem16: TMenuItem;
|
||||||
|
MenuItem17: TMenuItem;
|
||||||
|
MenuItem18: TMenuItem;
|
||||||
|
MenuItem19: TMenuItem;
|
||||||
MenuItem2: TMenuItem;
|
MenuItem2: TMenuItem;
|
||||||
|
MenuItem20: TMenuItem;
|
||||||
|
MenuItem21: TMenuItem;
|
||||||
|
MenuItem22: TMenuItem;
|
||||||
|
MenuItem23: TMenuItem;
|
||||||
|
MenuItem24: TMenuItem;
|
||||||
|
MenuItem25: TMenuItem;
|
||||||
|
MenuItem26: TMenuItem;
|
||||||
|
MenuItem27: TMenuItem;
|
||||||
|
MenuItem28: TMenuItem;
|
||||||
MenuItem3: TMenuItem;
|
MenuItem3: TMenuItem;
|
||||||
MenuItem4: TMenuItem;
|
MenuItem4: TMenuItem;
|
||||||
MenuItem5: TMenuItem;
|
MenuItem5: TMenuItem;
|
||||||
MenuItem6: TMenuItem;
|
MenuItem6: TMenuItem;
|
||||||
MenuItem7: TMenuItem;
|
MenuItem7: TMenuItem;
|
||||||
|
MenuItem8: TMenuItem;
|
||||||
|
MenuItem9: TMenuItem;
|
||||||
|
MnuWordwrap: TMenuItem;
|
||||||
MnuVertBottom: TMenuItem;
|
MnuVertBottom: TMenuItem;
|
||||||
MnuVertCentered: TMenuItem;
|
MnuVertCentered: TMenuItem;
|
||||||
MnuVertTop: TMenuItem;
|
MnuVertTop: TMenuItem;
|
||||||
@ -72,6 +104,7 @@ type
|
|||||||
OpenDialog1: TOpenDialog;
|
OpenDialog1: TOpenDialog;
|
||||||
PageControl1: TPageControl;
|
PageControl1: TPageControl;
|
||||||
Panel1: TPanel;
|
Panel1: TPanel;
|
||||||
|
BordersPopupMenu: TPopupMenu;
|
||||||
SaveDialog1: TSaveDialog;
|
SaveDialog1: TSaveDialog;
|
||||||
EdFrozenCols: TSpinEdit;
|
EdFrozenCols: TSpinEdit;
|
||||||
sWorksheetGrid1: TsWorksheetGrid;
|
sWorksheetGrid1: TsWorksheetGrid;
|
||||||
@ -90,12 +123,8 @@ type
|
|||||||
ToolButton18: TToolButton;
|
ToolButton18: TToolButton;
|
||||||
ToolButton19: TToolButton;
|
ToolButton19: TToolButton;
|
||||||
ToolButton2: TToolButton;
|
ToolButton2: TToolButton;
|
||||||
|
TbBorders: TToolButton;
|
||||||
ToolButton20: TToolButton;
|
ToolButton20: TToolButton;
|
||||||
ToolButton21: TToolButton;
|
|
||||||
ToolButton22: TToolButton;
|
|
||||||
ToolButton23: TToolButton;
|
|
||||||
ToolButton24: TToolButton;
|
|
||||||
ToolButton25: TToolButton;
|
|
||||||
ToolButton3: TToolButton;
|
ToolButton3: TToolButton;
|
||||||
ToolButton4: TToolButton;
|
ToolButton4: TToolButton;
|
||||||
ToolButton5: TToolButton;
|
ToolButton5: TToolButton;
|
||||||
@ -109,11 +138,12 @@ type
|
|||||||
procedure AcFontStyleExecute(Sender: TObject);
|
procedure AcFontStyleExecute(Sender: TObject);
|
||||||
procedure AcHorAlignmentExecute(Sender: TObject);
|
procedure AcHorAlignmentExecute(Sender: TObject);
|
||||||
procedure AcVertAlignmentExecute(Sender: TObject);
|
procedure AcVertAlignmentExecute(Sender: TObject);
|
||||||
|
procedure AcWordwrapExecute(Sender: TObject);
|
||||||
procedure CbShowHeadersClick(Sender: TObject);
|
procedure CbShowHeadersClick(Sender: TObject);
|
||||||
procedure CbShowGridLinesClick(Sender: TObject);
|
procedure CbShowGridLinesClick(Sender: TObject);
|
||||||
procedure acOpenExecute(Sender: TObject);
|
procedure AcOpenExecute(Sender: TObject);
|
||||||
procedure acQuitExecute(Sender: TObject);
|
procedure AcQuitExecute(Sender: TObject);
|
||||||
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 FontComboBoxSelect(Sender: TObject);
|
||||||
@ -124,10 +154,10 @@ type
|
|||||||
private
|
private
|
||||||
{ private declarations }
|
{ private declarations }
|
||||||
procedure LoadFile(const AFileName: String);
|
procedure LoadFile(const AFileName: String);
|
||||||
procedure UpdateBorderActions(ACell: PCell);
|
|
||||||
procedure UpdateHorAlignmentActions;
|
|
||||||
procedure UpdateFontActions(AFont: TsFont);
|
procedure UpdateFontActions(AFont: TsFont);
|
||||||
|
procedure UpdateHorAlignmentActions;
|
||||||
procedure UpdateVertAlignmentActions;
|
procedure UpdateVertAlignmentActions;
|
||||||
|
procedure UpdateWordwraps;
|
||||||
public
|
public
|
||||||
{ public declarations }
|
{ public declarations }
|
||||||
end;
|
end;
|
||||||
@ -144,6 +174,24 @@ const
|
|||||||
HORALIGN_TAG = 100;
|
HORALIGN_TAG = 100;
|
||||||
VERTALIGN_TAG = 110;
|
VERTALIGN_TAG = 110;
|
||||||
|
|
||||||
|
LEFT_BORDER_THIN = $0001;
|
||||||
|
LEFT_BORDER_THICK = $0002;
|
||||||
|
LR_INNER_BORDER_THIN = $0008;
|
||||||
|
RIGHT_BORDER_THIN = $0010;
|
||||||
|
RIGHT_BORDER_THICK = $0020;
|
||||||
|
TOP_BORDER_THIN = $0100;
|
||||||
|
TOP_BORDER_THICK = $0200;
|
||||||
|
TB_INNER_BORDER_THIN = $0800;
|
||||||
|
BOTTOM_BORDER_THIN = $1000;
|
||||||
|
BOTTOM_BORDER_THICK = $2000;
|
||||||
|
BOTTOM_BORDER_DOUBLE = $3000;
|
||||||
|
LEFT_BORDER_MASK = $0007;
|
||||||
|
RIGHT_BORDER_MASK = $0070;
|
||||||
|
TOP_BORDER_MASK = $0700;
|
||||||
|
BOTTOM_BORDER_MASK = $7000;
|
||||||
|
LR_INNER_BORDER = $0008;
|
||||||
|
TB_INNER_BORDER = $0800;
|
||||||
|
// Use a combination of these bits for the "Tag" of the Border actions.
|
||||||
|
|
||||||
{ TForm1 }
|
{ TForm1 }
|
||||||
|
|
||||||
@ -156,28 +204,85 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TForm1.AcBorderExecute(Sender: TObject);
|
procedure TForm1.AcBorderExecute(Sender: TObject);
|
||||||
|
const
|
||||||
|
LINESTYLES: Array[1..3] of TsLinestyle = (lsThin, lsMedium, lsDouble);
|
||||||
var
|
var
|
||||||
r,c: Cardinal;
|
r,c: Integer;
|
||||||
borders: TsCellBorders;
|
ls: integer;
|
||||||
lCell: PCell;
|
bs: TsCellBorderStyle;
|
||||||
begin
|
begin
|
||||||
|
bs.Color := scBlack;
|
||||||
|
|
||||||
with sWorksheetGrid1 do begin
|
with sWorksheetGrid1 do begin
|
||||||
if Worksheet <> nil then begin
|
TbBorders.Action := TAction(Sender);
|
||||||
c := GetWorksheetCol(Col);
|
|
||||||
r := GetWorksheetRow(Row);
|
BeginUpdate;
|
||||||
borders := [];
|
try
|
||||||
if AcBorderTop.Checked then borders := borders + [cbNorth];
|
if TAction(Sender).Tag = 0 then begin
|
||||||
if AcBorderLeft.Checked then borders := borders + [cbWest];
|
CellBorders[Selection] := [];
|
||||||
if AcBorderRight.Checked then borders := borders + [cbEast];
|
exit;
|
||||||
if AcBorderBottom.Checked or AcBorderBottomDbl.Checked or AcBorderBottomMedium.Checked then
|
end;
|
||||||
borders := borders + [cbSouth];
|
// Top and bottom edges
|
||||||
Worksheet.WriteBorders(r, c, borders);
|
for c := Selection.Left to Selection.Right do begin
|
||||||
if AcBorderBottom.Checked then
|
ls := (TAction(Sender).Tag and TOP_BORDER_MASK) shr 8;
|
||||||
Worksheet.WriteBorderLineStyle(r, c, cbSouth, lsThin);
|
if (ls <> 0) then begin
|
||||||
if AcBorderBottomMedium.Checked then
|
CellBorder[c, Selection.Top] := CellBorder[c, Selection.Top] + [cbNorth];
|
||||||
Worksheet.WriteBorderLineStyle(r, c, cbSouth, lsMedium);
|
bs.LineStyle := LINESTYLES[ls];
|
||||||
if AcBorderBottomDbl.Checked then
|
CellBorderStyle[c, Selection.Top, cbNorth] := bs;
|
||||||
Worksheet.WriteBorderLineStyle(r, c, cbSouth, lsDouble);
|
end;
|
||||||
|
ls := (TAction(Sender).Tag and BOTTOM_BORDER_MASK) shr 12;
|
||||||
|
if ls <> 0 then begin
|
||||||
|
CellBorder[c, Selection.Bottom] := CellBorder[c, Selection.Bottom] + [cbSouth];
|
||||||
|
bs.LineStyle := LINESTYLES[ls];
|
||||||
|
CellBorderStyle[c, Selection.Bottom, cbSouth] := bs;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
// Left and right edges
|
||||||
|
for r := Selection.Top to Selection.Bottom do begin
|
||||||
|
ls := (TAction(Sender).Tag and LEFT_BORDER_MASK);
|
||||||
|
if ls <> 0 then begin
|
||||||
|
CellBorder[Selection.Left, r] := CellBorder[Selection.Left, r] + [cbWest];
|
||||||
|
bs.LineStyle := LINESTYLES[ls];
|
||||||
|
CellBorderStyle[Selection.Left, r, cbWest] := bs;
|
||||||
|
end;
|
||||||
|
ls := (TAction(Sender).Tag and RIGHT_BORDER_MASK) shr 4;
|
||||||
|
if ls <> 0 then begin
|
||||||
|
CellBorder[Selection.Right, r] := CellBorder[Selection.Right, r] + [cbEast];
|
||||||
|
bs.LineStyle := LINESTYLES[ls];
|
||||||
|
CellBorderStyle[Selection.Right, r, cbEast] := bs;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
// Inner edges along row (vertical border lines) - we assume only thin lines.
|
||||||
|
bs.LineStyle := lsThin;
|
||||||
|
if (TAction(Sender).Tag and LR_INNER_BORDER <> 0) and (Selection.Right > Selection.Left)
|
||||||
|
then
|
||||||
|
for r := Selection.Top to Selection.Bottom do begin
|
||||||
|
CellBorder[Selection.Left, r] := CellBorder[Selection.Left, r] + [cbEast];
|
||||||
|
CellBorderStyle[Selection.Left, r, cbEast] := bs;
|
||||||
|
for c := Selection.Left+1 to Selection.Right-1 do begin
|
||||||
|
CellBorder[c,r] := CellBorder[c, r] + [cbEast, cbWest];
|
||||||
|
CellBorderStyle[c, r, cbEast] := bs;
|
||||||
|
CellBorderStyle[c, r, cbWest] := bs;
|
||||||
|
end;
|
||||||
|
CellBorder[Selection.Right, r] := CellBorder[Selection.Right, r] + [cbWest];
|
||||||
|
CellBorderStyle[Selection.Right, r, cbWest] := bs;
|
||||||
|
end;
|
||||||
|
// Inner edges along column (horizontal border lines)
|
||||||
|
if (TAction(Sender).Tag and TB_INNER_BORDER <> 0) and (Selection.Bottom > Selection.Top)
|
||||||
|
then
|
||||||
|
for c := Selection.Left to Selection.Right do begin
|
||||||
|
CellBorder[c, Selection.Top] := CellBorder[c, Selection.Top] + [cbSouth];
|
||||||
|
CellBorderStyle[c, Selection.Top, cbSouth] := bs;
|
||||||
|
for r := Selection.Top+1 to Selection.Bottom-1 do begin
|
||||||
|
CellBorder[c, r] := CellBorder[c, r] + [cbNorth, cbSouth];
|
||||||
|
CellBorderStyle[c, r, cbNorth] := bs;
|
||||||
|
CellBorderStyle[c, r, cbSouth] := bs;
|
||||||
|
end;
|
||||||
|
CellBorder[c, Selection.Bottom] := CellBorder[c, Selection.Bottom] + [cbNorth];
|
||||||
|
CellBorderStyle[c, Selection.Bottom, cbNorth] := bs;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -259,6 +364,11 @@ begin
|
|||||||
UpdateVertAlignmentActions;
|
UpdateVertAlignmentActions;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.AcWordwrapExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
with sWorksheetGrid1 do Wordwraps[Selection] := TAction(Sender).Checked;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TForm1.CbShowHeadersClick(Sender: TObject);
|
procedure TForm1.CbShowHeadersClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
sWorksheetGrid1.ShowHeaders := CbShowHeaders.Checked;
|
sWorksheetGrid1.ShowHeaders := CbShowHeaders.Checked;
|
||||||
@ -339,8 +449,29 @@ end;
|
|||||||
|
|
||||||
procedure TForm1.FormCreate(Sender: TObject);
|
procedure TForm1.FormCreate(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
|
// Adjust format toolbar height, looks strange at 120 dpi
|
||||||
|
FormatToolbar.Height := FontCombobox.Height + 2*FontCombobox.Top;
|
||||||
|
FormatToolbar.ButtonHeight := FormatToolbar.Height - 4;
|
||||||
|
|
||||||
// Populate font combobox
|
// Populate font combobox
|
||||||
FontCombobox.Items.Assign(Screen.Fonts);
|
FontCombobox.Items.Assign(Screen.Fonts);
|
||||||
|
|
||||||
|
// Set the Tags of the Border actions
|
||||||
|
AcBorderNone.Tag := 0;
|
||||||
|
AcBorderLeft.Tag := LEFT_BORDER_THIN;
|
||||||
|
AcBorderHCenter.Tag := LR_INNER_BORDER_THIN;
|
||||||
|
AcBorderRight.Tag := RIGHT_BORDER_THIN;
|
||||||
|
AcBorderTop.Tag := TOP_BORDER_THIN;
|
||||||
|
AcBorderVCenter.Tag := TB_INNER_BORDER_THIN;
|
||||||
|
AcBorderBottom.Tag := BOTTOM_BORDER_THIN;
|
||||||
|
AcBorderBottomDbl.Tag := BOTTOM_BORDER_DOUBLE;
|
||||||
|
AcBorderBottomMedium.Tag := BOTTOM_BORDER_THICK;
|
||||||
|
AcBorderTopBottom.Tag := TOP_BORDER_THIN + BOTTOM_BORDER_THIN;
|
||||||
|
AcBorderTopBottomThick.Tag := TOP_BORDER_THIN + BOTTOM_BORDER_THICK;
|
||||||
|
AcBorderInner.Tag := LR_INNER_BORDER_THIN + TB_INNER_BORDER_THIN;
|
||||||
|
AcBorderOuter.Tag := LEFT_BORDER_THIN + RIGHT_BORDER_THIN + TOP_BORDER_THIN + BOTTOM_BORDER_THIN;
|
||||||
|
AcBorderOuterMedium.Tag := LEFT_BORDER_THICK + RIGHT_BORDER_THICK + TOP_BORDER_THICK + BOTTOM_BORDER_THICK;
|
||||||
|
AcBorderAll.Tag := AcBorderOuter.Tag + AcBorderInner.Tag;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TForm1.LoadFile(const AFileName: String);
|
procedure TForm1.LoadFile(const AFileName: String);
|
||||||
@ -399,26 +530,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
UpdateHorAlignmentActions;
|
UpdateHorAlignmentActions;
|
||||||
UpdateVertAlignmentActions;
|
UpdateVertAlignmentActions;
|
||||||
UpdateBorderactions(cell);
|
UpdateWordwraps;
|
||||||
if cell = nil then
|
if cell = nil then
|
||||||
exit;
|
exit;
|
||||||
lFont := sWorksheetGrid1.Workbook.GetFont(cell^.FontIndex);
|
lFont := sWorksheetGrid1.Workbook.GetFont(cell^.FontIndex);
|
||||||
UpdateFontActions(lFont);
|
UpdateFontActions(lFont);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TForm1.UpdateBorderActions(ACell: PCell);
|
|
||||||
begin
|
|
||||||
AcBorderTop.Checked := (ACell <> nil) and (cbNorth in ACell^.Border);
|
|
||||||
AcBorderLeft.Checked := (ACell <> nil) and (cbWest in ACell^.Border);
|
|
||||||
AcBorderRight.Checked := (ACell <> nil) and (cbEast in ACell^.Border);
|
|
||||||
AcBorderBottom.Checked := (ACell <> nil) and (cbSouth in ACell^.Border) and
|
|
||||||
(ACell^.BorderStyles[cbSouth].LineStyle = lsThin);
|
|
||||||
AcBorderBottomDbl.Checked := (ACell <> nil) and (cbSouth in ACell^.Border) and
|
|
||||||
(ACell^.BorderStyles[cbSouth].LineStyle = lsDouble);
|
|
||||||
AcBorderBottomMedium.Checked := (ACell <> nil) and (cbSouth in ACell^.Border) and
|
|
||||||
(ACell^.BorderStyles[cbSouth].LineStyle = lsMedium);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TForm1.UpdateHorAlignmentActions;
|
procedure TForm1.UpdateHorAlignmentActions;
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
@ -459,6 +577,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.UpdateWordwraps;
|
||||||
|
var
|
||||||
|
wrapped: Boolean;
|
||||||
|
begin
|
||||||
|
with sWorksheetGrid1 do wrapped := Wordwraps[Selection];
|
||||||
|
AcWordwrap.Checked := wrapped;
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
{$I mainform.lrs}
|
{$I mainform.lrs}
|
||||||
|
@ -237,7 +237,7 @@ type
|
|||||||
TsCellBorders = set of TsCellBorder;
|
TsCellBorders = set of TsCellBorder;
|
||||||
|
|
||||||
{@@ Line style (for cell borders) }
|
{@@ Line style (for cell borders) }
|
||||||
TsLineStyle = (lsThin, lsMedium, lsDashed, lsDotted, lsThick, lsDouble);
|
TsLineStyle = (lsThin, lsMedium, lsDashed, lsDotted, lsThick, lsDouble, lsHair);
|
||||||
|
|
||||||
{@@ Cell border style }
|
{@@ Cell border style }
|
||||||
TsCellBorderStyle = record
|
TsCellBorderStyle = record
|
||||||
|
@ -42,14 +42,23 @@ type
|
|||||||
function CalcRowHeight(AHeight: Single): Integer;
|
function CalcRowHeight(AHeight: Single): Integer;
|
||||||
procedure ChangedCellHandler(ASender: TObject; ARow, ACol: Cardinal);
|
procedure ChangedCellHandler(ASender: TObject; ARow, ACol: Cardinal);
|
||||||
procedure ChangedFontHandler(ASender: TObject; ARow, ACol: Cardinal);
|
procedure ChangedFontHandler(ASender: TObject; ARow, ACol: Cardinal);
|
||||||
|
procedure FixNeighborCellBorders(ACol, ARow: Integer);
|
||||||
|
function GetCellBorder(ACol, ARow: Integer): TsCellBorders;
|
||||||
|
function GetCellBorders(ARect: TGridRect): TsCellBorders;
|
||||||
|
function GetCellBorderStyle(ACol, ARow: Integer; ABorder: TsCellBorder): TsCellBorderStyle;
|
||||||
|
function GetCellBorderStyles(ARect: TGridRect; ABorder: TsCellBorder): TsCellBorderStyle;
|
||||||
function GetHorAlignment(ACol, ARow: Integer): TsHorAlignment;
|
function GetHorAlignment(ACol, ARow: Integer): TsHorAlignment;
|
||||||
function GetHorAlignments(ARect: TGridRect): TsHorAlignment;
|
function GetHorAlignments(ARect: TGridRect): TsHorAlignment;
|
||||||
function GetShowGridLines: Boolean;
|
function GetShowGridLines: Boolean;
|
||||||
function GetShowHeaders: Boolean;
|
function GetShowHeaders: Boolean;
|
||||||
function GetVertAlignment(ACol, ARow: Integer): TsVertAlignment;
|
function GetVertAlignment(ACol, ARow: Integer): TsVertAlignment;
|
||||||
function GetVertAlignments(ARect: TGridRect): TsVertAlignment;
|
function GetVertAlignments(ARect: TGridRect): TsVertAlignment;
|
||||||
function IsSelection(ACol, ARow: Integer; ABorder: TsCellBorder): Boolean;
|
function GetWordwrap(ACol, ARow: Integer): Boolean;
|
||||||
function IsSelectionNeighbor(ACol, ARow: Integer; ABorder: TsCellBorder): Boolean;
|
function GetWordwraps(ARect: TGridRect): Boolean;
|
||||||
|
procedure SetCellBorder(ACol, ARow: Integer; AValue: TsCellBorders);
|
||||||
|
procedure SetCellBorders(ARect: TGridRect; AValue: TsCellBorders);
|
||||||
|
procedure SetCellBorderStyle(ACol, ARow: Integer; ABorder: TsCellBorder; AValue: TsCellBorderStyle);
|
||||||
|
procedure SetCellBorderStyles(ARect: TGridRect; ABorder: TsCellBorder; AValue: TsCellBorderStyle);
|
||||||
procedure SetFrozenCols(AValue: Integer);
|
procedure SetFrozenCols(AValue: Integer);
|
||||||
procedure SetFrozenRows(AValue: Integer);
|
procedure SetFrozenRows(AValue: Integer);
|
||||||
procedure SetHorAlignment(ACol, ARow: Integer; AValue: TsHorAlignment);
|
procedure SetHorAlignment(ACol, ARow: Integer; AValue: TsHorAlignment);
|
||||||
@ -58,21 +67,25 @@ type
|
|||||||
procedure SetShowHeaders(AValue: Boolean);
|
procedure SetShowHeaders(AValue: Boolean);
|
||||||
procedure SetVertAlignment(ACol, ARow: Integer; AValue: TsVertAlignment);
|
procedure SetVertAlignment(ACol, ARow: Integer; AValue: TsVertAlignment);
|
||||||
procedure SetVertAlignments(ARect: TGridRect; AValue: TsVertAlignment);
|
procedure SetVertAlignments(ARect: TGridRect; AValue: TsVertAlignment);
|
||||||
|
procedure SetWordwrap(ACol, ARow: Integer; AValue: boolean);
|
||||||
|
procedure SetWordwraps(ARect: TGridRect; AValue: boolean);
|
||||||
|
|
||||||
protected
|
protected
|
||||||
{ Protected declarations }
|
{ Protected declarations }
|
||||||
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 DrawCellBorders(ACol, ARow: Integer; ARect: TRect);
|
procedure DrawAllRows; override;
|
||||||
procedure DrawCellGrid(aCol,aRow: Integer; aRect: TRect; aState: TGridDrawState); override;
|
procedure DrawCellBorders; overload;
|
||||||
|
procedure DrawCellBorders(ACol, ARow: Integer; ARect: TRect); overload;
|
||||||
procedure DrawFocusRect(aCol,aRow:Integer; ARect:TRect); override;
|
procedure DrawFocusRect(aCol,aRow:Integer; ARect:TRect); override;
|
||||||
procedure DrawSelectionBorders(ACol, ARow: Integer; ARect: TRect);
|
procedure DrawSelection;
|
||||||
procedure DrawTextInCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); override;
|
procedure DrawTextInCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); override;
|
||||||
function GetBorderStyle(ACol, ARow, ADeltaCol, ADeltaRow: Integer;
|
function GetBorderStyle(ACol, ARow, ADeltaCol, ADeltaRow: Integer;
|
||||||
var ABorderStyle: TsCellBorderStyle): Boolean;
|
var ABorderStyle: TsCellBorderStyle): Boolean;
|
||||||
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;
|
function GetEditText(ACol, ARow: Integer): String; override;
|
||||||
|
function HasBorder(ACell: PCell; ABorder: TsCellBorder): Boolean;
|
||||||
procedure HeaderSized(IsColumn: Boolean; index: Integer); override;
|
procedure HeaderSized(IsColumn: Boolean; index: Integer); override;
|
||||||
procedure KeyDown(var Key : Word; Shift : TShiftState); override;
|
procedure KeyDown(var Key : Word; Shift : TShiftState); override;
|
||||||
procedure Loaded; override;
|
procedure Loaded; override;
|
||||||
@ -118,6 +131,14 @@ type
|
|||||||
property HeaderCount: Integer read FHeaderCount;
|
property HeaderCount: Integer read FHeaderCount;
|
||||||
|
|
||||||
{ maybe these should become published ... }
|
{ maybe these should become published ... }
|
||||||
|
property CellBorder[ACol, ARow: Integer]: TsCellBorders
|
||||||
|
read GetCellBorder write SetCellBorder;
|
||||||
|
property CellBorders[ARect: TGridRect]: TsCellBorders
|
||||||
|
read GetCellBorders write SetCellBorders;
|
||||||
|
property CellBorderStyle[ACol, ARow: Integer; ABorder: TsCellBorder]: TsCellBorderStyle
|
||||||
|
read GetCellBorderStyle write SetCellBorderStyle;
|
||||||
|
property CellBorderStyles[ARect: TGridRect; ABorder: TsCellBorder]: TsCellBorderStyle
|
||||||
|
read GetCellBorderStyles write SetCellBorderStyles;
|
||||||
property HorAlignment[ACol, ARow: Integer]: TsHorAlignment
|
property HorAlignment[ACol, ARow: Integer]: TsHorAlignment
|
||||||
read GetHorAlignment write SetHorAlignment;
|
read GetHorAlignment write SetHorAlignment;
|
||||||
property HorAlignments[ARect: TGridRect]: TsHorAlignment
|
property HorAlignments[ARect: TGridRect]: TsHorAlignment
|
||||||
@ -126,6 +147,10 @@ type
|
|||||||
read GetVertAlignment write SetVertAlignment;
|
read GetVertAlignment write SetVertAlignment;
|
||||||
property VertAlignments[ARect: TGridRect]: TsVertAlignment
|
property VertAlignments[ARect: TGridRect]: TsVertAlignment
|
||||||
read GetVertAlignments write SetVertAlignments;
|
read GetVertAlignments write SetVertAlignments;
|
||||||
|
property Wordwrap[ACol, ARow: Integer]: Boolean
|
||||||
|
read GetWordwrap write SetWordwrap;
|
||||||
|
property Wordwraps[ARect: TGridRect]: Boolean
|
||||||
|
read GetWordwraps write SetWordwraps;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TsWorksheetGrid }
|
{ TsWorksheetGrid }
|
||||||
@ -257,6 +282,34 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure DrawHairLineHor(ACanvas: TCanvas; x1, x2, y: Integer);
|
||||||
|
var
|
||||||
|
clr: TColor;
|
||||||
|
x: Integer;
|
||||||
|
begin
|
||||||
|
if odd(x1) then inc(x1);
|
||||||
|
x := x1;
|
||||||
|
clr := ACanvas.Pen.Color;
|
||||||
|
while (x <= x2) do begin
|
||||||
|
ACanvas.Pixels[x, y] := clr;
|
||||||
|
inc(x, 2);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure DrawHairLineVert(ACanvas: TCanvas; x, y1, y2: Integer);
|
||||||
|
var
|
||||||
|
clr: TColor;
|
||||||
|
y: Integer;
|
||||||
|
begin
|
||||||
|
if odd(y1) then inc(y1);
|
||||||
|
y := y1;
|
||||||
|
clr := ACanvas.Pen.Color;
|
||||||
|
while (y <= y2) do begin
|
||||||
|
ACanvas.Pixels[x, y] := clr;
|
||||||
|
inc(y, 2);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function WrapText(ACanvas: TCanvas; const AText: string; AMaxWidth: integer): string;
|
function WrapText(ACanvas: TCanvas; const AText: string; AMaxWidth: integer): string;
|
||||||
// code posted by taazz in the Lazarus Forum:
|
// code posted by taazz in the Lazarus Forum:
|
||||||
// http://forum.lazarus.freepascal.org/index.php/topic,21305.msg124743.html#msg124743
|
// http://forum.lazarus.freepascal.org/index.php/topic,21305.msg124743.html#msg124743
|
||||||
@ -366,9 +419,9 @@ begin
|
|||||||
inc(FLockCount);
|
inc(FLockCount);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Converts the column width, given in "characters" of the default font, to pixels
|
{ Converts the column width, given in "characters" of the default font, 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. }
|
||||||
function TsCustomWorksheetGrid.CalcColWidth(AWidth: Single): Integer;
|
function TsCustomWorksheetGrid.CalcColWidth(AWidth: Single): Integer;
|
||||||
var
|
var
|
||||||
w0: Integer;
|
w0: Integer;
|
||||||
@ -456,6 +509,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ Is overridden to show "frozen" cells in the same style as normal cells.
|
||||||
|
"Frozen" cells are internally "fixed" cells of the grid. }
|
||||||
procedure TsCustomWorksheetGrid.DefaultDrawCell(aCol, aRow: Integer; var aRect: TRect;
|
procedure TsCustomWorksheetGrid.DefaultDrawCell(aCol, aRow: Integer; var aRect: TRect;
|
||||||
AState: TGridDrawState);
|
AState: TGridDrawState);
|
||||||
var
|
var
|
||||||
@ -565,6 +620,59 @@ begin
|
|||||||
inherited DoPrepareCanvas(ACol, ARow, AState);
|
inherited DoPrepareCanvas(ACol, ARow, AState);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ Is overridden in order to paint the cell borders and the selection rectangle.
|
||||||
|
Both features can extend into the neighbor cells and thus are clipped at the
|
||||||
|
cell borders by the standard painting mechanism. In DrawAllRows, clipping at
|
||||||
|
cell borders is no longer active. }
|
||||||
|
procedure TsCustomWorksheetGrid.DrawAllRows;
|
||||||
|
var
|
||||||
|
cliprect: TRect;
|
||||||
|
rgn: HRGN;
|
||||||
|
tmp: Integer;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
Canvas.SaveHandleState;
|
||||||
|
try
|
||||||
|
// Avoid painting into the fixed cells
|
||||||
|
cliprect := ClientRect;
|
||||||
|
if FixedCols > 0 then
|
||||||
|
ColRowToOffset(True, True, FixedCols-1, tmp, cliprect.Left);
|
||||||
|
if FixedRows > 0 then
|
||||||
|
ColRowToOffset(False, True, FixedRows-1, tmp, cliprect.Top);
|
||||||
|
rgn := CreateRectRgn(cliprect.Left, cliprect.top, cliprect.Right, cliprect.Bottom);
|
||||||
|
SelectClipRgn(Canvas.Handle, Rgn);
|
||||||
|
|
||||||
|
DrawCellBorders;
|
||||||
|
DrawSelection;
|
||||||
|
|
||||||
|
DeleteObject(rgn);
|
||||||
|
finally
|
||||||
|
Canvas.RestoreHandleState;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ Draws the borders of all cells. }
|
||||||
|
procedure TsCustomWorksheetGrid.DrawCellBorders;
|
||||||
|
var
|
||||||
|
cell: PCell;
|
||||||
|
c, r: Integer;
|
||||||
|
rect: TRect;
|
||||||
|
begin
|
||||||
|
if FWorksheet = nil then exit;
|
||||||
|
|
||||||
|
cell := FWorksheet.GetFirstCell;
|
||||||
|
while cell <> nil do begin
|
||||||
|
if (uffBorder in cell^.UsedFormattingFields) then begin
|
||||||
|
c := cell^.Col + FHeaderCount;
|
||||||
|
r := cell^.Row + FHeaderCount;
|
||||||
|
rect := CellRect(c, r);
|
||||||
|
DrawCellBorders(c, r, rect);
|
||||||
|
end;
|
||||||
|
cell := FWorksheet.GetNextCell;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ Draws the border lines around a given cell. Note that when this procedure is
|
{ Draws the border lines around a given cell. Note that when this procedure is
|
||||||
called the output is clipped by the cell rectangle, but thick and double
|
called the output is clipped by the cell rectangle, but thick and double
|
||||||
border styles extend into the neighbor cell. Therefore, these border lines
|
border styles extend into the neighbor cell. Therefore, these border lines
|
||||||
@ -574,30 +682,61 @@ procedure TsCustomWorksheetGrid.DrawCellBorders(ACol, ARow: Integer; ARect: TRec
|
|||||||
procedure DrawBorderLine(ACoord: Integer; ARect: TRect; IsHor: Boolean;
|
procedure DrawBorderLine(ACoord: Integer; ARect: TRect; IsHor: Boolean;
|
||||||
ABorderStyle: TsCellBorderStyle);
|
ABorderStyle: TsCellBorderStyle);
|
||||||
const
|
const
|
||||||
// TsLineStyle = (lsThin, lsMedium, lsDashed, lsDotted, lsThick, lsDouble);
|
// TsLineStyle = (lsThin, lsMedium, lsDashed, lsDotted, lsThick, lsDouble, lsHair);
|
||||||
PEN_STYLES: array[TsLineStyle] of TPenStyle =
|
PEN_STYLES: array[TsLineStyle] of TPenStyle =
|
||||||
(psSolid, psSolid, psDash, psDot, psSolid, psSolid);
|
(psSolid, psSolid, psDash, psDot, psSolid, psSolid, psSolid);
|
||||||
{
|
PEN_WIDTHS: array[TsLineStyle] of Integer =
|
||||||
PEN_PATTERNS: array[TsLineStyle] of TPenPattern =
|
(1, 2, 1, 1, 3, 1, 1);
|
||||||
($FFFFFFFF, $FFFFFFFF, $07070707, $AAAAAAAA, $FFFFFFFF, $FFFFFFFF); }
|
var
|
||||||
|
width3: Boolean; // line is 3 pixels wide
|
||||||
begin
|
begin
|
||||||
Canvas.Pen.Style := PEN_STYLES[ABorderStyle.LineStyle];
|
Canvas.Pen.Style := PEN_STYLES[ABorderStyle.LineStyle];
|
||||||
Canvas.Pen.Width := 1;
|
Canvas.Pen.Width := PEN_WIDTHS[ABorderStyle.LineStyle];
|
||||||
Canvas.Pen.Color := FWorkbook.GetPaletteColor(ABorderStyle.Color);
|
Canvas.Pen.Color := FWorkbook.GetPaletteColor(ABorderStyle.Color);
|
||||||
if IsHor then begin
|
Canvas.Pen.EndCap := pecSquare;
|
||||||
if ABorderStyle.LineStyle <> lsDouble then
|
width3 := (ABorderStyle.LineStyle in [lsThick, lsDouble]);
|
||||||
Canvas.Line(ARect.Left, ACoord, ARect.Right, ACoord);
|
|
||||||
if (ACoord = ARect.Top-1) and (ABorderStyle.LineStyle in [lsDouble, lsThick]) then
|
// Tuning the rectangle to avoid issues at the grid borders and to get nice corners
|
||||||
Canvas.Line(ARect.Left, ACoord+1, ARect.Right, ACoord+1);
|
if (ABorderStyle.LineStyle in [lsMedium, lsThick, lsDouble]) then begin
|
||||||
if (ACoord = ARect.Bottom-1) and (ABorderStyle.LineStyle in [lsDouble, lsMedium, lsThick]) then
|
if ACol = ColCount-1 then begin
|
||||||
Canvas.Line(ARect.Left, ACoord-1, ARect.Right, ACoord-1);
|
if not IsHor and (ACoord = ARect.Right-1) and width3 then dec(ACoord);
|
||||||
end else begin
|
dec(ARect.Right);
|
||||||
if ABorderStyle.LineStyle <> lsDouble then
|
end;
|
||||||
Canvas.Line(ACoord, ARect.Top, ACoord, ARect.Bottom);
|
if ARow = RowCount-1 then begin
|
||||||
if (ACoord = ARect.Left-1) and (ABorderStyle.LineStyle in [lsDouble, lsThick]) then
|
if IsHor and (ACoord = ARect.Bottom-1) and width3 then dec(ACoord);
|
||||||
Canvas.Line(ACoord+1, ARect.Top, ACoord+1, ARect.Bottom);
|
dec(ARect.Bottom);
|
||||||
if (ACoord = ARect.Right-1) and (ABorderStyle.LineStyle in [lsDouble, lsMedium, lsThick]) then
|
end;
|
||||||
Canvas.Line(ACoord-1, ARect.Top, ACoord-1, ARect.Bottom);
|
end;
|
||||||
|
if ABorderStyle.LineStyle in [lsMedium, lsThick] then begin
|
||||||
|
if IsHor then dec(ARect.Right, 1) else dec(ARect.Bottom, 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Painting
|
||||||
|
case ABorderStyle.LineStyle of
|
||||||
|
lsThin, lsMedium, lsThick, lsDotted, lsDashed:
|
||||||
|
if IsHor then
|
||||||
|
Canvas.Line(ARect.Left, ACoord, ARect.Right, ACoord)
|
||||||
|
else
|
||||||
|
Canvas.Line(ACoord, ARect.Top, ACoord, ARect.Bottom);
|
||||||
|
|
||||||
|
lsHair:
|
||||||
|
if IsHor then
|
||||||
|
DrawHairLineHor(Canvas, ARect.Left, ARect.Right, ACoord)
|
||||||
|
else
|
||||||
|
DrawHairLineVert(Canvas, ACoord, ARect.Top, ARect.Bottom);
|
||||||
|
|
||||||
|
lsDouble:
|
||||||
|
if IsHor then begin
|
||||||
|
Canvas.Line(ARect.Left, ACoord-1, ARect.Right, ACoord-1);
|
||||||
|
Canvas.Line(ARect.Left, ACoord+1, ARect.Right, ACoord+1);
|
||||||
|
Canvas.Pen.Color := Color;
|
||||||
|
Canvas.Line(ARect.Left, ACoord, ARect.Right, ACoord);
|
||||||
|
end else begin
|
||||||
|
Canvas.Line(ACoord-1, ARect.Top, ACoord-1, ARect.Bottom);
|
||||||
|
Canvas.Line(ACoord+1, ARect.Top, ACoord+1, ARect.Bottom);
|
||||||
|
Canvas.Pen.Color := Color;
|
||||||
|
Canvas.Line(ACoord, ARect.Top, ACoord, ARect.Bottom);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -620,214 +759,38 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TsCustomWorksheetGrid.DrawCellGrid(ACol, ARow: Integer; ARect: TRect;
|
{ Is responsible for painting of the focus rectangle. We don't want the red
|
||||||
AState: TGridDrawState);
|
dashed rectangle here, but the thick Excel-like rectangle. }
|
||||||
const
|
|
||||||
// TsLineStyle = (lsThin, lsMedium, lsDashed, lsDotted, lsThick, lsDouble);
|
|
||||||
PEN_WIDTHS: array[TsLineStyle] of Byte =
|
|
||||||
(1, 2, 1, 1, 3, 1);
|
|
||||||
PEN_STYLES: array[TsLineStyle] of TPenStyle =
|
|
||||||
(psSolid, psSolid, psDash, psDot, psSolid, psSolid);
|
|
||||||
// (psSolid, psSolid, psPattern, psPattern, psSolid, psSolid);
|
|
||||||
PEN_PATTERNS: array[TsLineStyle] of TPenPattern =
|
|
||||||
($FFFFFFFF, $FFFFFFFF, $07070707, $AAAAAAAA, $FFFFFFFF, $FFFFFFFF);
|
|
||||||
|
|
||||||
procedure DrawHorBorderLine(x1, x2, y: Integer; ABorderStyle: TsCellBorderStyle;
|
|
||||||
IsAtBottom: Boolean);
|
|
||||||
begin
|
|
||||||
Canvas.Pen.Style := PEN_STYLES[ABorderStyle.LineStyle];
|
|
||||||
Canvas.Pen.Width := 1;
|
|
||||||
Canvas.Pen.Color := FWorkBook.GetPaletteColor(ABorderStyle.Color);
|
|
||||||
case ABorderStyle.LineStyle of
|
|
||||||
lsThin, lsDashed, lsDotted:
|
|
||||||
Canvas.Line(x1, y, x2, y);
|
|
||||||
lsMedium:
|
|
||||||
begin
|
|
||||||
Canvas.Line(x1, y, x2, y);
|
|
||||||
if IsAtBottom then Canvas.Line(x1, y-1, x2, y-1);
|
|
||||||
end;
|
|
||||||
lsThick:
|
|
||||||
begin
|
|
||||||
Canvas.Line(x1, y, x2, y);
|
|
||||||
if IsAtBottom
|
|
||||||
then Canvas.Line(x1, y-1, x2, y-1)
|
|
||||||
else Canvas.Line(x1, y+1, x2, y+1);
|
|
||||||
end;
|
|
||||||
lsDouble:
|
|
||||||
if IsAtBottom
|
|
||||||
then Canvas.Line(x1, y-1, x2, y-1)
|
|
||||||
else Canvas.Line(x1, y+1, x2, y+1);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure DrawVertBorderLine(x, y1, y2: Integer; ABorderStyle: TsCellBorderStyle;
|
|
||||||
IsAtRight: Boolean);
|
|
||||||
begin
|
|
||||||
Canvas.Pen.Style := PEN_STYLES[ABorderStyle.LineStyle];
|
|
||||||
Canvas.Pen.Width := 1;
|
|
||||||
Canvas.Pen.Color := FWorkBook.GetPaletteColor(ABorderStyle.Color);
|
|
||||||
case ABorderStyle.LineStyle of
|
|
||||||
lsThin, lsDashed, lsDotted:
|
|
||||||
Canvas.Line(x, y1, x, y2);
|
|
||||||
lsMedium:
|
|
||||||
begin
|
|
||||||
Canvas.Line(x, y1, x, y2);
|
|
||||||
if IsAtRight then Canvas.Line(x-1, y1, x-1, y2);
|
|
||||||
end;
|
|
||||||
lsThick:
|
|
||||||
begin
|
|
||||||
Canvas.Line(x, y1, x, y2);
|
|
||||||
if IsAtRight
|
|
||||||
then Canvas.Line(x-1, y1, x-1, y2)
|
|
||||||
else Canvas.Line(x+1, y1, x+1, y2);
|
|
||||||
end;
|
|
||||||
lsDouble:
|
|
||||||
if IsAtRight
|
|
||||||
then Canvas.Line(x-1, y1, x-1, y2)
|
|
||||||
else Canvas.Line(x+2, y1, x+2, y2);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
var
|
|
||||||
dv,dh: Boolean;
|
|
||||||
isSelH, isSelV: Boolean;
|
|
||||||
isSelNeighbor: Boolean;
|
|
||||||
// cell: PCell;
|
|
||||||
c, r: Cardinal;
|
|
||||||
|
|
||||||
begin
|
|
||||||
|
|
||||||
with Canvas, ARect do begin
|
|
||||||
|
|
||||||
// fixed cells
|
|
||||||
if (gdFixed in aState) then begin
|
|
||||||
Dv := goFixedVertLine in Options;
|
|
||||||
Dh := goFixedHorzLine in Options;
|
|
||||||
Pen.Style := psSolid;
|
|
||||||
if GridLineWidth > 0 then
|
|
||||||
Pen.Width := 1
|
|
||||||
else
|
|
||||||
Pen.Width := 0;
|
|
||||||
if not Flat then begin
|
|
||||||
if TitleStyle = tsNative then
|
|
||||||
exit
|
|
||||||
else
|
|
||||||
if GridLineWidth > 0 then begin
|
|
||||||
if gdPushed in aState then
|
|
||||||
Pen.Color := cl3DShadow
|
|
||||||
else
|
|
||||||
Pen.Color := cl3DHilight;
|
|
||||||
if UseRightToLeftAlignment then begin
|
|
||||||
//the light still on the left but need to new x
|
|
||||||
MoveTo(Right, Top);
|
|
||||||
LineTo(Left + 1, Top);
|
|
||||||
LineTo(Left + 1, Bottom);
|
|
||||||
end else begin
|
|
||||||
MoveTo(Right - 1, Top);
|
|
||||||
LineTo(Left, Top);
|
|
||||||
LineTo(Left, Bottom);
|
|
||||||
end;
|
|
||||||
if TitleStyle=tsStandard then begin
|
|
||||||
// more contrast
|
|
||||||
if gdPushed in aState then
|
|
||||||
Pen.Color := cl3DHilight
|
|
||||||
else
|
|
||||||
Pen.Color := cl3DShadow;
|
|
||||||
if UseRightToLeftAlignment then begin
|
|
||||||
MoveTo(Left+2, Bottom-2);
|
|
||||||
LineTo(Right, Bottom-2);
|
|
||||||
LineTo(Right, Top);
|
|
||||||
end else begin
|
|
||||||
MoveTo(Left+1, Bottom-2);
|
|
||||||
LineTo(Right-2, Bottom-2);
|
|
||||||
LineTo(Right-2, Top);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
Pen.Color := cl3DDKShadow;
|
|
||||||
end else begin
|
|
||||||
Dv := (goVertLine in Options);
|
|
||||||
Dh := (goHorzLine in Options);
|
|
||||||
Pen.Style := GridLineStyle;
|
|
||||||
Pen.Color := GridLineColor;
|
|
||||||
Pen.Width := GridLineWidth;
|
|
||||||
end;
|
|
||||||
|
|
||||||
// non-fixed cells
|
|
||||||
if (GridLineWidth > 0) then begin
|
|
||||||
if Dh then begin
|
|
||||||
MoveTo(Left, Bottom - 1);
|
|
||||||
LineTo(Right, Bottom - 1);
|
|
||||||
end;
|
|
||||||
if Dv then begin
|
|
||||||
if UseRightToLeftAlignment then begin
|
|
||||||
MoveTo(Left, Top);
|
|
||||||
LineTo(Left, Bottom);
|
|
||||||
end else begin
|
|
||||||
MoveTo(Right - 1, Top);
|
|
||||||
LineTo(Right - 1, Bottom);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
// Draw cell border
|
|
||||||
DrawCellBorders(ACol, ARow, ARect);
|
|
||||||
|
|
||||||
// Draw Selection
|
|
||||||
DrawSelectionBorders(ACol, ARow, ARect);
|
|
||||||
end; // with canvas,rect
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TsCustomWorksheetGrid.DrawFocusRect(aCol, aRow: Integer; ARect: TRect);
|
procedure TsCustomWorksheetGrid.DrawFocusRect(aCol, aRow: Integer; ARect: TRect);
|
||||||
begin
|
begin
|
||||||
// We don't want the red dashed focus rectangle here, but the thick Excel-like
|
// Nothing do to
|
||||||
// border line. Since this frame extends into neighboring cells painting of
|
|
||||||
// focus rect has been added to the DrawCellGrid method.
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Draws the selection rectangle.
|
{ Draws the selection rectangle, 3 pixels wide as in Excel. }
|
||||||
Note that painting is clipped at the edges of ARect. Since the selection
|
procedure TsCustomWorksheetGrid.DrawSelection;
|
||||||
rectangle is 3 pixels wide and extends into the neighboring cell this
|
var
|
||||||
method is called from several cells to complete. }
|
P1, P2: TPoint;
|
||||||
procedure TsCustomWorksheetGrid.DrawSelectionBorders(ACol, ARow: Integer;
|
selrect: TRect;
|
||||||
ARect: TRect);
|
|
||||||
begin
|
begin
|
||||||
with Canvas, ARect do begin
|
// Cosmetics at the edges of the grid to avoid spurious rests
|
||||||
Pen.Color := clBlack;
|
P1 := CellRect(Selection.Left, Selection.Top).TopLeft;
|
||||||
Pen.Width := 1;
|
P2 := CellRect(Selection.Right, Selection.Bottom).BottomRight;
|
||||||
Pen.Style := psSolid;
|
if Selection.Top > TopRow then dec(P1.Y) else inc(P1.Y);
|
||||||
|
if Selection.Left > LeftCol then dec(P1.X) else inc(P1.X);
|
||||||
if IsSelection(ACol, ARow, cbNorth) then begin
|
if Selection.Right = ColCount-1 then dec(P2.X);
|
||||||
Line(Left, Top, Right, Top);
|
if Selection.Bottom = RowCount-1 then dec(P2.Y);
|
||||||
Line(Left, Top+1, Right, Top+1);
|
// Set up the canvas
|
||||||
if ARow = TopRow then
|
Canvas.Pen.Style := psSolid;
|
||||||
Line(Left, Top+2, Right, Top+2);
|
Canvas.Pen.Width := 3;
|
||||||
end;
|
Canvas.Pen.JoinStyle := pjsMiter;
|
||||||
if IsSelection(ACol, ARow, cbSouth) then begin
|
if UseXORFeatures then begin
|
||||||
Line(Left, Bottom-1, Right, Bottom-1);
|
Canvas.Pen.Color := clWhite;
|
||||||
Line(Left, Bottom-2, Right, Bottom-2);
|
Canvas.Pen.Mode := pmXOR;
|
||||||
end;
|
end else
|
||||||
if IsSelection(ACol, ARow, cbWest) then begin
|
Canvas.Pen.Color := clBlack;
|
||||||
Line(Left, Top, Left, Bottom);
|
Canvas.Brush.Style := bsClear;
|
||||||
Line(Left+1, Top, Left+1, Bottom);
|
// Paint
|
||||||
if ACol = LeftCol then
|
Canvas.Rectangle(P1.X, P1.Y, P2.X, P2.Y);
|
||||||
Line(Left+2, Top, Left+2, Bottom);
|
|
||||||
end;
|
|
||||||
if IsSelection(ACol, ARow, cbEast) then begin
|
|
||||||
Line(Right-1, Top, Right-1, Bottom);
|
|
||||||
Line(Right-2, Top, Right-2, Bottom);
|
|
||||||
end;
|
|
||||||
|
|
||||||
if IsSelectionNeighbor(ACol, ARow, cbEast) then
|
|
||||||
Line(Right-1, Top, Right-1, Bottom);
|
|
||||||
if IsSelectionNeighbor(ACol, ARow, cbWest) then
|
|
||||||
Line(Left, Top, Left, Bottom);
|
|
||||||
if IsSelectionNeighbor(ACol, ARow, cbNorth) then
|
|
||||||
Line(Left, Top, Right, Top);
|
|
||||||
if IsSelectionNeighbor(ACol, ARow, cbSouth) then
|
|
||||||
Line(Left, Bottom-1, Right, Bottom-1);
|
|
||||||
end;
|
|
||||||
end;
|
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.
|
||||||
@ -852,7 +815,7 @@ var
|
|||||||
i: Integer;
|
i: Integer;
|
||||||
L: TStrings;
|
L: TStrings;
|
||||||
c, r: Integer;
|
c, r: Integer;
|
||||||
wordwrap: Boolean;
|
wrapped: Boolean;
|
||||||
horAlign: TsHorAlignment;
|
horAlign: TsHorAlignment;
|
||||||
vertAlign: TsVertAlignment;
|
vertAlign: TsVertAlignment;
|
||||||
lCell: PCell;
|
lCell: PCell;
|
||||||
@ -890,7 +853,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
vertAlign := lCell^.VertAlignment;
|
vertAlign := lCell^.VertAlignment;
|
||||||
wordwrap := (uffWordWrap in lCell^.UsedFormattingFields)
|
wrapped := (uffWordWrap in lCell^.UsedFormattingFields)
|
||||||
or (lCell^.TextRotation = rtStacked);
|
or (lCell^.TextRotation = rtStacked);
|
||||||
|
|
||||||
InflateRect(ARect, -constCellPadding, -constCellPadding);
|
InflateRect(ARect, -constCellPadding, -constCellPadding);
|
||||||
@ -900,7 +863,7 @@ begin
|
|||||||
then begin
|
then begin
|
||||||
// HORIZONAL TEXT DRAWING DIRECTION
|
// HORIZONAL TEXT DRAWING DIRECTION
|
||||||
ts := Canvas.TextStyle;
|
ts := Canvas.TextStyle;
|
||||||
if wordwrap then begin
|
if wrapped then begin
|
||||||
ts.Wordbreak := true;
|
ts.Wordbreak := true;
|
||||||
ts.SingleLine := false;
|
ts.SingleLine := false;
|
||||||
flags := DT_WORDBREAK and not DT_SINGLELINE;
|
flags := DT_WORDBREAK and not DT_SINGLELINE;
|
||||||
@ -933,7 +896,7 @@ begin
|
|||||||
try
|
try
|
||||||
txtRect := Bounds(ARect.Left, ARect.Top, ARect.Bottom - ARect.Top, ARect.Right - ARect.Left);
|
txtRect := Bounds(ARect.Left, ARect.Top, ARect.Bottom - ARect.Top, ARect.Right - ARect.Left);
|
||||||
hline := Canvas.TextHeight('Tg');
|
hline := Canvas.TextHeight('Tg');
|
||||||
if wordwrap then begin
|
if wrapped then begin
|
||||||
L.Text := WrapText(Canvas, txt, txtRect.Right - txtRect.Left);
|
L.Text := WrapText(Canvas, txt, txtRect.Right - txtRect.Left);
|
||||||
flags := DT_WORDBREAK and not DT_SINGLELINE;
|
flags := DT_WORDBREAK and not DT_SINGLELINE;
|
||||||
LCLIntf.DrawText(Canvas.Handle, PChar(L.Text), Length(L.Text), txtRect,
|
LCLIntf.DrawText(Canvas.Handle, PChar(L.Text), Length(L.Text), txtRect,
|
||||||
@ -1045,6 +1008,43 @@ begin
|
|||||||
if FLockCount = 0 then Invalidate;
|
if FLockCount = 0 then Invalidate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ Copies the borders of a cell to its neighbors. This avoids the nightmare of
|
||||||
|
changing borders due to border conflicts of adjacent cells. }
|
||||||
|
procedure TsCustomWorksheetGrid.FixNeighborCellBorders(ACol, ARow: Integer);
|
||||||
|
|
||||||
|
procedure SetNeighborBorder(NewRow, NewCol: Integer;
|
||||||
|
ANewBorder: TsCellBorder; const ANewBorderStyle: TsCellBorderStyle;
|
||||||
|
AInclude: Boolean);
|
||||||
|
var
|
||||||
|
neighbor: PCell;
|
||||||
|
border: TsCellBorders;
|
||||||
|
begin
|
||||||
|
neighbor := FWorksheet.FindCell(NewRow, NewCol);
|
||||||
|
if neighbor <> nil then begin
|
||||||
|
border := neighbor^.Border;
|
||||||
|
if AInclude then begin
|
||||||
|
Include(border, ANewBorder);
|
||||||
|
FWorksheet.WriteBorderStyle(NewRow, NewCol, ANewBorder, ANewBorderStyle);
|
||||||
|
end else
|
||||||
|
Exclude(border, ANewBorder);
|
||||||
|
FWorksheet.WriteBorders(NewRow, NewCol, border);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
cell: PCell;
|
||||||
|
begin
|
||||||
|
if FWorksheet = nil then exit;
|
||||||
|
cell := FWorksheet.FindCell(GetWorksheetRow(ARow), GetWorksheetCol(ACol));
|
||||||
|
if (FWorksheet <> nil) and (cell <> nil) then
|
||||||
|
with cell^ do begin
|
||||||
|
SetNeighborBorder(Row, Col-1, cbEast, BorderStyles[cbWest], cbWest in Border);
|
||||||
|
SetNeighborBorder(Row, Col+1, cbWest, BorderStyles[cbEast], cbEast in Border);
|
||||||
|
SetNeighborBorder(Row-1, Col, cbSouth, BorderStyles[cbNorth], cbNorth in Border);
|
||||||
|
SetNeighborBorder(Row+1, Col, cbNorth, BorderStyles[cbSouth], cbSouth in Border);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ The "colors" used by the spreadsheet are indexes into the workbook's color
|
{ The "colors" used by the spreadsheet are indexes into the workbook's color
|
||||||
palette. If the user wants to set a color to a particular rgb value this is
|
palette. If the user wants to set a color to a particular rgb value this is
|
||||||
not possible in general. The method FindNearestPaletteIndex finds the bast
|
not possible in general. The method FindNearestPaletteIndex finds the bast
|
||||||
@ -1104,7 +1104,7 @@ function TsCustomWorksheetGrid.FindNearestPaletteIndex(AColor: TColor): TsColor;
|
|||||||
Result := sqr(H1-H2) + sqr(S1-S2) + sqr(L1-L2);
|
Result := sqr(H1-H2) + sqr(S1-S2) + sqr(L1-L2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(*
|
{
|
||||||
// will be activated when Lazarus 1.4 is available. (RgbToHLS bug in Laz < 1.3)
|
// will be activated when Lazarus 1.4 is available. (RgbToHLS bug in Laz < 1.3)
|
||||||
|
|
||||||
function ColorDistance(color1, color2: TColor): Integer;
|
function ColorDistance(color1, color2: TColor): Integer;
|
||||||
@ -1116,7 +1116,8 @@ function TsCustomWorksheetGrid.FindNearestPaletteIndex(AColor: TColor): TsColor;
|
|||||||
ColorToHLS(color1, H1,L1,S1);
|
ColorToHLS(color1, H1,L1,S1);
|
||||||
ColorToHLS(color2, H2,L2,S2);
|
ColorToHLS(color2, H2,L2,S2);
|
||||||
result := sqr(Integer(H1)-H2) + sqr(Integer(L1)-L2) + sqr(Integer(S1)-S2);
|
result := sqr(Integer(H1)-H2) + sqr(Integer(L1)-L2) + sqr(Integer(S1)-S2);
|
||||||
end; *)
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
@ -1135,13 +1136,72 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TsCustomWorksheetGrid.GetCellBorder(ACol, ARow: Integer): TsCellBorders;
|
||||||
|
var
|
||||||
|
cell: PCell;
|
||||||
|
begin
|
||||||
|
Result := [];
|
||||||
|
if Assigned(FWorksheet) then begin
|
||||||
|
cell := FWorksheet.FindCell(GetWorksheetRow(ARow), GetWorksheetCol(ACol));
|
||||||
|
if (cell <> nil) and (uffBorder in cell^.UsedFormattingFields) then
|
||||||
|
Result := cell^.Border;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TsCustomWorksheetGrid.GetCellBorders(ARect: TGridRect): TsCellBorders;
|
||||||
|
var
|
||||||
|
c, r: Integer;
|
||||||
|
b: TsCellBorders;
|
||||||
|
begin
|
||||||
|
Result := GetCellBorder(ARect.Left, ARect.Top);
|
||||||
|
b := Result;
|
||||||
|
for c := ARect.Left to ARect.Right do
|
||||||
|
for r := ARect.Top to ARect.Bottom do begin
|
||||||
|
Result := GetCellBorder(c, r);
|
||||||
|
if Result <> b then begin
|
||||||
|
Result := [];
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TsCustomWorksheetGrid.GetCellBorderStyle(ACol, ARow: Integer;
|
||||||
|
ABorder: TsCellBorder): TsCellBorderStyle;
|
||||||
|
var
|
||||||
|
cell: PCell;
|
||||||
|
begin
|
||||||
|
Result := DEFAULT_BORDERSTYLES[ABorder];
|
||||||
|
if Assigned(FWorksheet) then begin
|
||||||
|
cell := FWorksheet.FindCell(GetWorksheetRow(ARow), GetWorksheetCol(ACol));
|
||||||
|
if (cell <> nil) then
|
||||||
|
Result := cell^.BorderStyles[ABorder];
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TsCustomWorksheetGrid.GetCellBorderStyles(ARect: TGridRect;
|
||||||
|
ABorder: TsCellBorder): TsCellBorderStyle;
|
||||||
|
var
|
||||||
|
c, r: Integer;
|
||||||
|
bs: TsCellBorderStyle;
|
||||||
|
begin
|
||||||
|
Result := GetCellBorderStyle(ARect.Left, ARect.Top, ABorder);
|
||||||
|
bs := Result;
|
||||||
|
for c := ARect.Left to ARect.Right do
|
||||||
|
for r := ARect.Top to ARect.Bottom do begin
|
||||||
|
Result := GetCellBorderStyle(c, r, ABorder);
|
||||||
|
if (Result.LineStyle <> bs.LineStyle) or (Result.Color <> bs.Color) then begin
|
||||||
|
Result := DEFAULT_BORDERSTYLES[ABorder];
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ Returns the height (in pixels) of the cell at ACol/ARow (of the grid). }
|
{ Returns the height (in pixels) of the cell at ACol/ARow (of the grid). }
|
||||||
function TsCustomWorksheetGrid.GetCellHeight(ACol, ARow: Integer): Integer;
|
function TsCustomWorksheetGrid.GetCellHeight(ACol, ARow: Integer): Integer;
|
||||||
var
|
var
|
||||||
lCell: PCell;
|
lCell: PCell;
|
||||||
s: String;
|
s: String;
|
||||||
wordwrap: Boolean;
|
wrapped: Boolean;
|
||||||
txtR: TRect;
|
txtR: TRect;
|
||||||
cellR: TRect;
|
cellR: TRect;
|
||||||
flags: Cardinal;
|
flags: Cardinal;
|
||||||
@ -1158,10 +1218,10 @@ begin
|
|||||||
if s = '' then
|
if s = '' then
|
||||||
exit;
|
exit;
|
||||||
DoPrepareCanvas(ACol, ARow, []);
|
DoPrepareCanvas(ACol, ARow, []);
|
||||||
wordwrap := (uffWordWrap in lCell^.UsedFormattingFields)
|
wrapped := (uffWordWrap in lCell^.UsedFormattingFields)
|
||||||
or (lCell^.TextRotation = rtStacked);
|
or (lCell^.TextRotation = rtStacked);
|
||||||
// *** multi-line text ***
|
// *** multi-line text ***
|
||||||
if wordwrap then begin
|
if wrapped then begin
|
||||||
// horizontal
|
// horizontal
|
||||||
if ( (uffTextRotation in lCell^.UsedFormattingFields) and
|
if ( (uffTextRotation in lCell^.UsedFormattingFields) and
|
||||||
(lCell^.TextRotation in [trHorizontal, rtStacked]))
|
(lCell^.TextRotation in [trHorizontal, rtStacked]))
|
||||||
@ -1230,7 +1290,6 @@ begin
|
|||||||
Result := '';
|
Result := '';
|
||||||
for i:=1 to Length(s) do
|
for i:=1 to Length(s) do
|
||||||
Result := Result + s[i] + LineEnding;
|
Result := Result + s[i] + LineEnding;
|
||||||
// Result := Result + s[Length(s)];
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -1379,6 +1438,35 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TsCustomWorksheetGrid.GetWordwrap(ACol, ARow: Integer): Boolean;
|
||||||
|
var
|
||||||
|
cell: PCell;
|
||||||
|
begin
|
||||||
|
Result := false;
|
||||||
|
if Assigned(FWorksheet) then begin
|
||||||
|
cell := FWorksheet.FindCell(GetWorksheetRow(ARow), GetWorksheetCol(ACol));
|
||||||
|
if (cell <> nil) and (uffWordwrap in cell^.UsedFormattingFields) then
|
||||||
|
Result := true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TsCustomWorksheetGrid.GetWordwraps(ARect: TGridRect): Boolean;
|
||||||
|
var
|
||||||
|
c, r: Integer;
|
||||||
|
wrapped: Boolean;
|
||||||
|
begin
|
||||||
|
Result := GetWordwrap(ARect.Left, ARect.Top);
|
||||||
|
wrapped := Result;
|
||||||
|
for c := ARect.Left to ARect.Right do
|
||||||
|
for r := ARect.Top to ARect.Bottom do begin
|
||||||
|
Result := GetWordwrap(c, r);
|
||||||
|
if Result <> wrapped then begin
|
||||||
|
Result := false;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ Calculates the index of the worksheet column that is displayed in the
|
{ Calculates the index of the worksheet column that is displayed in the
|
||||||
given column of the grid. If the sheet headers are turned on, both numbers
|
given column of the grid. If the sheet headers are turned on, both numbers
|
||||||
differ by 1, otherwise they are equal. Saves an "if" in cases. }
|
differ by 1, otherwise they are equal. Saves an "if" in cases. }
|
||||||
@ -1395,6 +1483,13 @@ begin
|
|||||||
Result := AGridRow - FHeaderCount;
|
Result := AGridRow - FHeaderCount;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ Returns if the cell has the given border }
|
||||||
|
function TsCustomWorksheetGrid.HasBorder(ACell: PCell; ABorder: TsCellBorder): Boolean;
|
||||||
|
begin
|
||||||
|
Result := (ACell <> nil) and (uffBorder in ACell^.UsedFormattingfields) and
|
||||||
|
(ABorder in ACell^.Border);
|
||||||
|
end;
|
||||||
|
|
||||||
{ Column width or row heights have changed. Stores the new number in the
|
{ Column width or row heights have changed. Stores the new number in the
|
||||||
worksheet. }
|
worksheet. }
|
||||||
procedure TsCustomWorksheetGrid.HeaderSized(IsColumn: Boolean; index: Integer);
|
procedure TsCustomWorksheetGrid.HeaderSized(IsColumn: Boolean; index: Integer);
|
||||||
@ -1419,49 +1514,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Determines if the current cell is at the given edge of the selection. }
|
|
||||||
function TsCustomWorksheetGrid.IsSelection(ACol, ARow: Integer;
|
|
||||||
ABorder: TsCellBorder): Boolean;
|
|
||||||
var
|
|
||||||
selRect: TGridRect;
|
|
||||||
begin
|
|
||||||
selRect := Selection;
|
|
||||||
case ABorder of
|
|
||||||
cbNorth:
|
|
||||||
Result := InRange(ACol, selRect.Left, selRect.Right) and (ARow = selRect.Top);
|
|
||||||
cbSouth:
|
|
||||||
Result := InRange(ACol, selRect.Left, selRect.Right) and (ARow = selRect.Bottom);
|
|
||||||
cbEast:
|
|
||||||
Result := InRange(ARow, selRect.Top, selRect.Bottom) and (ACol = selRect.Right);
|
|
||||||
cbWest:
|
|
||||||
Result := InRange(ARow, selRect.Top, selRect.Bottom) and (ACol = selRect.Left);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{ Determines if the neighbor cell is selected (for drawing of the rest of the
|
|
||||||
thick selection border that extends into the current cell):
|
|
||||||
ABorder = cbNorth: look for the top neighbor
|
|
||||||
ABorder = cbSouth: look for the bottom neighbor
|
|
||||||
ABorder = cbLeft: look for the left neighbor
|
|
||||||
ABorder = cbRight: look for the right neighbor }
|
|
||||||
function TsCustomWorksheetGrid.IsSelectionNeighbor(ACol, ARow: Integer;
|
|
||||||
ABorder: TsCellBorder): Boolean;
|
|
||||||
var
|
|
||||||
selRect: TGridRect;
|
|
||||||
begin
|
|
||||||
selRect := Selection;
|
|
||||||
case ABorder of
|
|
||||||
cbNorth :
|
|
||||||
Result := InRange(ACol, selRect.Left, selRect.Right) and (ARow - 1 = selRect.Bottom);
|
|
||||||
cbSouth :
|
|
||||||
Result := InRange(ACol, selRect.Left, selRect.Right) and (ARow + 1 = selRect.Top);
|
|
||||||
cbEast :
|
|
||||||
Result := InRange(ARow, selRect.Top, selRect.Bottom) and (ACol + 1 = selRect.Left);
|
|
||||||
cbWest :
|
|
||||||
Result := InRange(ARow, selRect.Top, selRect.Bottom) and (ACol - 1 = selRect.Right);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{ Catches the ESC key during editing in order to restore the old cell text }
|
{ Catches the ESC key during editing in order to restore the old cell text }
|
||||||
procedure TsCustomWorksheetGrid.KeyDown(var Key : Word; Shift : TShiftState);
|
procedure TsCustomWorksheetGrid.KeyDown(var Key : Word; Shift : TShiftState);
|
||||||
begin
|
begin
|
||||||
@ -1481,8 +1533,9 @@ end;
|
|||||||
selection border. }
|
selection border. }
|
||||||
procedure TsCustomWorksheetGrid.MoveSelection;
|
procedure TsCustomWorksheetGrid.MoveSelection;
|
||||||
begin
|
begin
|
||||||
|
//Refresh;
|
||||||
|
inherited;
|
||||||
Refresh;
|
Refresh;
|
||||||
Inherited;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Is called when editing starts. Stores the old text just for the case that
|
{ Is called when editing starts. Stores the old text just for the case that
|
||||||
@ -1493,6 +1546,77 @@ begin
|
|||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TsCustomWorksheetGrid.SetCellBorder(ACol, ARow: Integer;
|
||||||
|
AValue: TsCellBorders);
|
||||||
|
var
|
||||||
|
c, r: Cardinal;
|
||||||
|
begin
|
||||||
|
if Assigned(FWorkbook) then begin
|
||||||
|
BeginUpdate;
|
||||||
|
try
|
||||||
|
c := GetWorksheetCol(ACol);
|
||||||
|
r := GetWorksheetRow(ARow);
|
||||||
|
FWorksheet.WriteBorders(r, c, AValue);
|
||||||
|
FixNeighborCellBorders(ACol, ARow);
|
||||||
|
finally
|
||||||
|
EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TsCustomWorksheetGrid.SetCellBorders(ARect: TGridRect;
|
||||||
|
AValue: TsCellBorders);
|
||||||
|
var
|
||||||
|
c,r: Integer;
|
||||||
|
begin
|
||||||
|
BeginUpdate;
|
||||||
|
try
|
||||||
|
for c := ARect.Left to ARect.Right do
|
||||||
|
for r := ARect.Top to ARect.Bottom do
|
||||||
|
SetCellBorder(c, r, AValue);
|
||||||
|
finally
|
||||||
|
EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TsCustomWorksheetGrid.SetCellBorderStyle(ACol, ARow: Integer;
|
||||||
|
ABorder: TsCellBorder; AValue: TsCellBorderStyle);
|
||||||
|
begin
|
||||||
|
if Assigned(FWorkbook) then begin
|
||||||
|
BeginUpdate;
|
||||||
|
try
|
||||||
|
FWorksheet.WriteBorderStyle(GetWorksheetRow(ARow), GetWorksheetCol(ACol), ABorder, AValue);
|
||||||
|
FixNeighborCellBorders(ACol, ARow);
|
||||||
|
finally
|
||||||
|
EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TsCustomWorksheetGrid.SetCellBorderStyles(ARect: TGridRect;
|
||||||
|
ABorder: TsCellBorder; AValue: TsCellBorderStyle);
|
||||||
|
var
|
||||||
|
c,r: Integer;
|
||||||
|
begin
|
||||||
|
BeginUpdate;
|
||||||
|
try
|
||||||
|
for c := ARect.Left to ARect.Right do
|
||||||
|
for r := ARect.Top to ARect.Bottom do
|
||||||
|
SetCellBorderStyle(c, r, ABorder, AValue);
|
||||||
|
finally
|
||||||
|
EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ Fetches the text that is currently in the editor. It is not yet transferred
|
||||||
|
to the Worksheet because input is checked only at the end of editing. }
|
||||||
|
procedure TsCustomWorksheetGrid.SetEditText(ACol, ARow: Longint; const AValue: string);
|
||||||
|
begin
|
||||||
|
FEditText := AValue;
|
||||||
|
FEditing := true;
|
||||||
|
inherited SetEditText(aCol, aRow, aValue);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TsCustomWorksheetGrid.SetFrozenCols(AValue: Integer);
|
procedure TsCustomWorksheetGrid.SetFrozenCols(AValue: Integer);
|
||||||
begin
|
begin
|
||||||
FFrozenCols := AValue;
|
FFrozenCols := AValue;
|
||||||
@ -1530,7 +1654,9 @@ end;
|
|||||||
{ Shows / hides the worksheet's grid lines }
|
{ Shows / hides the worksheet's grid lines }
|
||||||
procedure TsCustomWorksheetGrid.SetShowGridLines(AValue: Boolean);
|
procedure TsCustomWorksheetGrid.SetShowGridLines(AValue: Boolean);
|
||||||
begin
|
begin
|
||||||
if AValue = GetShowGridLines then Exit;
|
if AValue = GetShowGridLines then
|
||||||
|
Exit;
|
||||||
|
|
||||||
if AValue then
|
if AValue then
|
||||||
Options := Options + [goHorzLine, goVertLine]
|
Options := Options + [goHorzLine, goVertLine]
|
||||||
else
|
else
|
||||||
@ -1545,15 +1671,6 @@ begin
|
|||||||
Setup;
|
Setup;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Fetches the text that is currently in the editor. It is not yet transferred
|
|
||||||
to the Worksheet because input is checked only at the end of editing. }
|
|
||||||
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;
|
||||||
@ -1624,6 +1741,28 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TsCustomWorksheetGrid.SetWordwrap(ACol, ARow: Integer;
|
||||||
|
AValue: Boolean);
|
||||||
|
begin
|
||||||
|
if Assigned(FWorkbook) then
|
||||||
|
FWorksheet.WriteWordwrap(GetWorksheetRow(ARow), GetWorksheetCol(ACol), AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TsCustomWorksheetGrid.SetWordwraps(ARect: TGridRect;
|
||||||
|
AValue: Boolean);
|
||||||
|
var
|
||||||
|
c,r: Integer;
|
||||||
|
begin
|
||||||
|
BeginUpdate;
|
||||||
|
try
|
||||||
|
for c := ARect.Left to ARect.Right do
|
||||||
|
for r := ARect.Top to ARect.Bottom do
|
||||||
|
SetWordwrap(c, r, AValue);
|
||||||
|
finally
|
||||||
|
EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TsCustomWorksheetGrid.LoadFromWorksheet(AWorksheet: TsWorksheet);
|
procedure TsCustomWorksheetGrid.LoadFromWorksheet(AWorksheet: TsWorksheet);
|
||||||
begin
|
begin
|
||||||
FWorksheet := AWorksheet;
|
FWorksheet := AWorksheet;
|
||||||
@ -1639,6 +1778,8 @@ begin
|
|||||||
FrozenCols := 0;
|
FrozenCols := 0;
|
||||||
FrozenRows := 0;
|
FrozenRows := 0;
|
||||||
end;
|
end;
|
||||||
|
Row := FrozenRows;
|
||||||
|
Col := FrozenCols;
|
||||||
end;
|
end;
|
||||||
Setup;
|
Setup;
|
||||||
end;
|
end;
|
||||||
|
@ -1910,8 +1910,8 @@ procedure TsSpreadBIFF8Reader.ReadXF(const AStream: TStream);
|
|||||||
{ Not all line styles defined in BIFF8 are supported by fpspreadsheet. }
|
{ Not all line styles defined in BIFF8 are supported by fpspreadsheet. }
|
||||||
begin
|
begin
|
||||||
case dw of
|
case dw of
|
||||||
$01..$06: result := TsLineStyle(dw-1);
|
$01..$07: result := TsLineStyle(dw-1);
|
||||||
$07: Result := lsDotted;
|
// $07: Result := lsDotted;
|
||||||
else Result := lsDashed;
|
else Result := lsDashed;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
Reference in New Issue
Block a user