You've already forked lazarus-ccr
RxFPC:RxDBGrid - started work on grouping data in grid
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5903 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
Binary file not shown.
After Width: | Height: | Size: 134 KiB |
@ -0,0 +1,80 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="10"/>
|
||||||
|
<General>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="project1"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
<UseXPManifest Value="True"/>
|
||||||
|
<Icon Value="0"/>
|
||||||
|
</General>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="3">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="FCL"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<PackageName Value="rxnew"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<PackageName Value="LCL"/>
|
||||||
|
</Item3>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="2">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="project1.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="unit1.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="Form1"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<UnitName Value="Unit1"/>
|
||||||
|
</Unit1>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="project1"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Linking>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
@ -0,0 +1,21 @@
|
|||||||
|
program project1;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||||
|
cthreads,
|
||||||
|
{$ENDIF}{$ENDIF}
|
||||||
|
Interfaces, // this includes the LCL widgetset
|
||||||
|
Forms, rxnew, Unit1
|
||||||
|
{ you can add units after this };
|
||||||
|
|
||||||
|
{$R *.res}
|
||||||
|
|
||||||
|
begin
|
||||||
|
RequireDerivedFormResource:=True;
|
||||||
|
Application.Initialize;
|
||||||
|
Application.CreateForm(TForm1, Form1);
|
||||||
|
Application.Run;
|
||||||
|
end.
|
||||||
|
|
@ -0,0 +1,358 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectSession>
|
||||||
|
<Version Value="10"/>
|
||||||
|
<BuildModes Active="Default"/>
|
||||||
|
<Units Count="28">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="project1.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<WindowIndex Value="-1"/>
|
||||||
|
<TopLine Value="-1"/>
|
||||||
|
<CursorPos X="-1" Y="-1"/>
|
||||||
|
<UsageCount Value="31"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="unit1.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="Form1"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<UnitName Value="Unit1"/>
|
||||||
|
<IsVisibleTab Value="True"/>
|
||||||
|
<TopLine Value="42"/>
|
||||||
|
<CursorPos X="128" Y="44"/>
|
||||||
|
<UsageCount Value="31"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
<LoadedDesigner Value="True"/>
|
||||||
|
</Unit1>
|
||||||
|
<Unit2>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdb/rxdbgrid.pas"/>
|
||||||
|
<EditorIndex Value="1"/>
|
||||||
|
<TopLine Value="6168"/>
|
||||||
|
<CursorPos X="57" Y="6177"/>
|
||||||
|
<UsageCount Value="15"/>
|
||||||
|
<Bookmarks Count="5">
|
||||||
|
<Item0 X="3" Y="4356" ID="5"/>
|
||||||
|
<Item1 X="3" Y="5572" ID="3"/>
|
||||||
|
<Item2 X="5" Y="6159" ID="4"/>
|
||||||
|
<Item3 X="63" Y="4523" ID="1"/>
|
||||||
|
<Item4 X="3" Y="6172" ID="2"/>
|
||||||
|
</Bookmarks>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit2>
|
||||||
|
<Unit3>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/rtl/objpas/classes/classesh.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="70"/>
|
||||||
|
<CursorPos X="30" Y="91"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit3>
|
||||||
|
<Unit4>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/rtl/objpas/classes/lists.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="316"/>
|
||||||
|
<CursorPos X="13" Y="328"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit4>
|
||||||
|
<Unit5>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/packages/fcl-db/src/base/db.pas"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="1669"/>
|
||||||
|
<CursorPos X="14" Y="1687"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit5>
|
||||||
|
<Unit6>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/packages/fcl-db/src/base/datasource.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="212"/>
|
||||||
|
<CursorPos Y="218"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit6>
|
||||||
|
<Unit7>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/packages/fcl-db/src/base/dataset.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="1825"/>
|
||||||
|
<CursorPos X="3" Y="1829"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit7>
|
||||||
|
<Unit8>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdb/rxmemds.pas"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="1108"/>
|
||||||
|
<CursorPos Y="1127"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit8>
|
||||||
|
<Unit9>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<UnitName Value="Grids"/>
|
||||||
|
<EditorIndex Value="3"/>
|
||||||
|
<TopLine Value="4845"/>
|
||||||
|
<CursorPos X="24" Y="4847"/>
|
||||||
|
<UsageCount Value="13"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit9>
|
||||||
|
<Unit10>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/dbgrids.pas"/>
|
||||||
|
<UnitName Value="DBGrids"/>
|
||||||
|
<EditorIndex Value="2"/>
|
||||||
|
<TopLine Value="965"/>
|
||||||
|
<CursorPos Y="978"/>
|
||||||
|
<UsageCount Value="15"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit10>
|
||||||
|
<Unit11>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/include/control.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="1009"/>
|
||||||
|
<CursorPos Y="1029"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit11>
|
||||||
|
<Unit12>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/include/wincontrol.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="8038"/>
|
||||||
|
<CursorPos Y="8066"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit12>
|
||||||
|
<Unit13>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/include/scrollingwincontrol.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="76"/>
|
||||||
|
<CursorPos Y="95"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit13>
|
||||||
|
<Unit14>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/rtl/inc/systemh.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="338"/>
|
||||||
|
<CursorPos X="9" Y="357"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit14>
|
||||||
|
<Unit15>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/rtl/objpas/classes/stringl.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="1571"/>
|
||||||
|
<CursorPos X="3" Y="1573"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit15>
|
||||||
|
<Unit16>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/rtl/objpas/sysutils/sysstrh.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="73"/>
|
||||||
|
<CursorPos X="10" Y="92"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit16>
|
||||||
|
<Unit17>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/rtl/objpas/sysutils/sysstr.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="551"/>
|
||||||
|
<CursorPos X="5" Y="553"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit17>
|
||||||
|
<Unit18>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/rtl/inc/ustringh.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="87"/>
|
||||||
|
<CursorPos X="5" Y="106"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit18>
|
||||||
|
<Unit19>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/include/canvas.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="1579"/>
|
||||||
|
<CursorPos Y="1600"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit19>
|
||||||
|
<Unit20>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/include/winapi.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="597"/>
|
||||||
|
<CursorPos Y="617"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit20>
|
||||||
|
<Unit21>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/widgetset/wsgrids.pp"/>
|
||||||
|
<UnitName Value="WSGrids"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="35"/>
|
||||||
|
<CursorPos X="20" Y="53"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit21>
|
||||||
|
<Unit22>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/interfaces/gtk2/gtk2wsgrids.pp"/>
|
||||||
|
<UnitName Value="Gtk2WSGrids"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="31"/>
|
||||||
|
<CursorPos Y="66"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit22>
|
||||||
|
<Unit23>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/controls.pp"/>
|
||||||
|
<UnitName Value="Controls"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="2277"/>
|
||||||
|
<CursorPos X="3" Y="2298"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit23>
|
||||||
|
<Unit24>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/rtl/inc/typshrdh.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="127"/>
|
||||||
|
<CursorPos X="17" Y="153"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit24>
|
||||||
|
<Unit25>
|
||||||
|
<Filename Value="../../../../install/source/fpcsrc/rtl/inc/typshrd.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="300"/>
|
||||||
|
<CursorPos X="3" Y="302"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit25>
|
||||||
|
<Unit26>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/include/customcheckbox.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="114"/>
|
||||||
|
<CursorPos Y="134"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit26>
|
||||||
|
<Unit27>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/interfaces/gtk2/gtk2widgetset.inc"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="16"/>
|
||||||
|
<CursorPos Y="44"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit27>
|
||||||
|
</Units>
|
||||||
|
<JumpHistory Count="30" HistoryIndex="29">
|
||||||
|
<Position1>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="3466" TopLine="3443"/>
|
||||||
|
</Position1>
|
||||||
|
<Position2>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="3473" TopLine="3443"/>
|
||||||
|
</Position2>
|
||||||
|
<Position3>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="3474" TopLine="3443"/>
|
||||||
|
</Position3>
|
||||||
|
<Position4>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="3475" TopLine="3444"/>
|
||||||
|
</Position4>
|
||||||
|
<Position5>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="3476" TopLine="3445"/>
|
||||||
|
</Position5>
|
||||||
|
<Position6>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="3475" TopLine="3445"/>
|
||||||
|
</Position6>
|
||||||
|
<Position7>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="3478" TopLine="3450"/>
|
||||||
|
</Position7>
|
||||||
|
<Position8>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="3399" TopLine="3380"/>
|
||||||
|
</Position8>
|
||||||
|
<Position9>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="3400" TopLine="3380"/>
|
||||||
|
</Position9>
|
||||||
|
<Position10>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="5921" TopLine="5911"/>
|
||||||
|
</Position10>
|
||||||
|
<Position11>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="5922" TopLine="5911"/>
|
||||||
|
</Position11>
|
||||||
|
<Position12>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="5923" TopLine="5911"/>
|
||||||
|
</Position12>
|
||||||
|
<Position13>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="5929" TopLine="5911"/>
|
||||||
|
</Position13>
|
||||||
|
<Position14>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="5931" TopLine="5911"/>
|
||||||
|
</Position14>
|
||||||
|
<Position15>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="5932" TopLine="5911"/>
|
||||||
|
</Position15>
|
||||||
|
<Position16>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="2094" TopLine="2075"/>
|
||||||
|
</Position16>
|
||||||
|
<Position17>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="2095" TopLine="2075"/>
|
||||||
|
</Position17>
|
||||||
|
<Position18>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="2098" TopLine="2075"/>
|
||||||
|
</Position18>
|
||||||
|
<Position19>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="2099" TopLine="2075"/>
|
||||||
|
</Position19>
|
||||||
|
<Position20>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="5934" TopLine="5915"/>
|
||||||
|
</Position20>
|
||||||
|
<Position21>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="678" Column="18" TopLine="659"/>
|
||||||
|
</Position21>
|
||||||
|
<Position22>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="2482" Column="61" TopLine="2451"/>
|
||||||
|
</Position22>
|
||||||
|
<Position23>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="2483" Column="52" TopLine="2452"/>
|
||||||
|
</Position23>
|
||||||
|
<Position24>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="2874" Column="28" TopLine="2843"/>
|
||||||
|
</Position24>
|
||||||
|
<Position25>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="2887" Column="24" TopLine="2857"/>
|
||||||
|
</Position25>
|
||||||
|
<Position26>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="4846" Column="24" TopLine="4813"/>
|
||||||
|
</Position26>
|
||||||
|
<Position27>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
|
||||||
|
<Caret Line="4847" Column="24" TopLine="4813"/>
|
||||||
|
</Position27>
|
||||||
|
<Position28>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdb/rxdbgrid.pas"/>
|
||||||
|
<Caret Line="5166" Column="10" TopLine="5141"/>
|
||||||
|
</Position28>
|
||||||
|
<Position29>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdb/rxdbgrid.pas"/>
|
||||||
|
<Caret Line="912" Column="15" TopLine="884"/>
|
||||||
|
</Position29>
|
||||||
|
<Position30>
|
||||||
|
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdb/rxdbgrid.pas"/>
|
||||||
|
<Caret Line="6177" Column="57" TopLine="6168"/>
|
||||||
|
</Position30>
|
||||||
|
</JumpHistory>
|
||||||
|
</ProjectSession>
|
||||||
|
<Debugging>
|
||||||
|
<Watches Count="1">
|
||||||
|
<Item1>
|
||||||
|
<Expression Value="RNew"/>
|
||||||
|
</Item1>
|
||||||
|
</Watches>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
Binary file not shown.
297
components/rx/trunk/demos/rxdbgrid/RxDBGridGroupData/unit1.lfm
Normal file
297
components/rx/trunk/demos/rxdbgrid/RxDBGridGroupData/unit1.lfm
Normal file
@ -0,0 +1,297 @@
|
|||||||
|
object Form1: TForm1
|
||||||
|
Left = 570
|
||||||
|
Height = 556
|
||||||
|
Top = 275
|
||||||
|
Width = 796
|
||||||
|
Caption = 'Form1'
|
||||||
|
ClientHeight = 556
|
||||||
|
ClientWidth = 796
|
||||||
|
OnCreate = FormCreate
|
||||||
|
LCLVersion = '1.9.0.0'
|
||||||
|
object RxDBGrid1: TRxDBGrid
|
||||||
|
Left = 0
|
||||||
|
Height = 493
|
||||||
|
Top = 63
|
||||||
|
Width = 796
|
||||||
|
ColumnDefValues.BlobText = '(данные)'
|
||||||
|
TitleButtons = False
|
||||||
|
AutoSort = True
|
||||||
|
Columns = <
|
||||||
|
item
|
||||||
|
Title.Alignment = taCenter
|
||||||
|
Title.Orientation = toHorizontal
|
||||||
|
Title.Caption = 'ID'
|
||||||
|
Width = 50
|
||||||
|
FieldName = 'ID'
|
||||||
|
EditButtons = <>
|
||||||
|
Filter.DropDownRows = 0
|
||||||
|
Filter.EmptyValue = '(Пусто)'
|
||||||
|
Filter.AllValue = '(Все значения)'
|
||||||
|
Filter.EmptyFont.Style = [fsItalic]
|
||||||
|
Filter.ItemIndex = -1
|
||||||
|
Footers = <>
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Title.Alignment = taCenter
|
||||||
|
Title.Orientation = toHorizontal
|
||||||
|
Title.Caption = 'GROUP'
|
||||||
|
Width = 60
|
||||||
|
FieldName = 'GROUP_ID'
|
||||||
|
EditButtons = <>
|
||||||
|
Filter.DropDownRows = 0
|
||||||
|
Filter.EmptyValue = '(Пусто)'
|
||||||
|
Filter.AllValue = '(Все значения)'
|
||||||
|
Filter.EmptyFont.Style = [fsItalic]
|
||||||
|
Filter.ItemIndex = -1
|
||||||
|
Footers = <>
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Title.Alignment = taCenter
|
||||||
|
Title.Orientation = toHorizontal
|
||||||
|
Title.Caption = 'SUM'
|
||||||
|
Width = 90
|
||||||
|
FieldName = 'SUM'
|
||||||
|
EditButtons = <>
|
||||||
|
Filter.DropDownRows = 0
|
||||||
|
Filter.EmptyValue = '(Пусто)'
|
||||||
|
Filter.AllValue = '(Все значения)'
|
||||||
|
Filter.EmptyFont.Style = [fsItalic]
|
||||||
|
Filter.ItemIndex = -1
|
||||||
|
Footer.Alignment = taRightJustify
|
||||||
|
Footer.FieldName = 'SUM'
|
||||||
|
Footer.ValueType = fvtSum
|
||||||
|
Footers = <>
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Title.Alignment = taCenter
|
||||||
|
Title.Orientation = toHorizontal
|
||||||
|
Title.Caption = 'TEXT'
|
||||||
|
Width = 264
|
||||||
|
FieldName = 'TEXT'
|
||||||
|
EditButtons = <>
|
||||||
|
Filter.DropDownRows = 0
|
||||||
|
Filter.EmptyValue = '(Пусто)'
|
||||||
|
Filter.AllValue = '(Все значения)'
|
||||||
|
Filter.EmptyFont.Style = [fsItalic]
|
||||||
|
Filter.ItemIndex = -1
|
||||||
|
Footers = <>
|
||||||
|
WordWrap = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Title.Alignment = taCenter
|
||||||
|
Title.Orientation = toHorizontal
|
||||||
|
Title.Caption = 'AAA'
|
||||||
|
Width = 250
|
||||||
|
FieldName = 'AAA'
|
||||||
|
EditButtons = <>
|
||||||
|
Filter.DropDownRows = 0
|
||||||
|
Filter.EmptyValue = '(Пусто)'
|
||||||
|
Filter.AllValue = '(Все значения)'
|
||||||
|
Filter.EmptyFont.Style = [fsItalic]
|
||||||
|
Filter.ItemIndex = -1
|
||||||
|
Footers = <>
|
||||||
|
end>
|
||||||
|
KeyStrokes = <
|
||||||
|
item
|
||||||
|
Command = rxgcShowFindDlg
|
||||||
|
ShortCut = 16454
|
||||||
|
Enabled = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Command = rxgcShowColumnsDlg
|
||||||
|
ShortCut = 16471
|
||||||
|
Enabled = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Command = rxgcShowFilterDlg
|
||||||
|
ShortCut = 16468
|
||||||
|
Enabled = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Command = rxgcShowSortDlg
|
||||||
|
ShortCut = 16467
|
||||||
|
Enabled = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Command = rxgcShowQuickFilter
|
||||||
|
ShortCut = 16465
|
||||||
|
Enabled = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Command = rxgcHideQuickFilter
|
||||||
|
ShortCut = 16456
|
||||||
|
Enabled = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Command = rxgcSelectAll
|
||||||
|
ShortCut = 16449
|
||||||
|
Enabled = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Command = rxgcDeSelectAll
|
||||||
|
ShortCut = 16429
|
||||||
|
Enabled = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Command = rxgcInvertSelection
|
||||||
|
ShortCut = 16426
|
||||||
|
Enabled = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Command = rxgcOptimizeColumnsWidth
|
||||||
|
ShortCut = 16427
|
||||||
|
Enabled = True
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Command = rxgcCopyCellValue
|
||||||
|
ShortCut = 16451
|
||||||
|
Enabled = True
|
||||||
|
end>
|
||||||
|
FooterOptions.Active = True
|
||||||
|
FooterOptions.Color = clYellow
|
||||||
|
FooterOptions.RowCount = 1
|
||||||
|
FooterOptions.DrawFullLine = True
|
||||||
|
SearchOptions.QuickSearchOptions = [loCaseInsensitive, loPartialKey]
|
||||||
|
SearchOptions.FromStart = False
|
||||||
|
OptionsRx = [rdgAllowColumnsForm, rdgAllowDialogFind, rdgFooterRows, rdgAllowQuickFilter]
|
||||||
|
FooterColor = clYellow
|
||||||
|
FooterRowCount = 1
|
||||||
|
Align = alBottom
|
||||||
|
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||||
|
Color = clWindow
|
||||||
|
DrawFullLine = True
|
||||||
|
FocusColor = clRed
|
||||||
|
SelectedColor = clHighlight
|
||||||
|
GridLineStyle = psSolid
|
||||||
|
DataSource = dsData
|
||||||
|
Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColumnMove, dgColLines, dgRowLines, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit]
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object CheckBox1: TCheckBox
|
||||||
|
AnchorSideLeft.Control = Owner
|
||||||
|
AnchorSideTop.Control = Owner
|
||||||
|
Left = 6
|
||||||
|
Height = 24
|
||||||
|
Top = 6
|
||||||
|
Width = 113
|
||||||
|
BorderSpacing.Around = 6
|
||||||
|
Caption = 'Groups active'
|
||||||
|
Checked = True
|
||||||
|
OnChange = CheckBox1Change
|
||||||
|
State = cbChecked
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
object CheckBox2: TCheckBox
|
||||||
|
AnchorSideLeft.Control = CheckBox1
|
||||||
|
AnchorSideLeft.Side = asrBottom
|
||||||
|
AnchorSideTop.Control = Owner
|
||||||
|
Left = 125
|
||||||
|
Height = 24
|
||||||
|
Top = 6
|
||||||
|
Width = 96
|
||||||
|
BorderSpacing.Around = 6
|
||||||
|
Caption = 'Footer row'
|
||||||
|
Checked = True
|
||||||
|
OnChange = CheckBox1Change
|
||||||
|
State = cbChecked
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
object CheckBox3: TCheckBox
|
||||||
|
AnchorSideLeft.Control = CheckBox2
|
||||||
|
AnchorSideLeft.Side = asrBottom
|
||||||
|
AnchorSideTop.Control = Owner
|
||||||
|
Left = 227
|
||||||
|
Height = 24
|
||||||
|
Top = 6
|
||||||
|
Width = 88
|
||||||
|
BorderSpacing.Around = 6
|
||||||
|
Caption = 'ReadOnly'
|
||||||
|
Checked = True
|
||||||
|
OnChange = CheckBox1Change
|
||||||
|
State = cbChecked
|
||||||
|
TabOrder = 3
|
||||||
|
end
|
||||||
|
object rxData: TRxMemoryData
|
||||||
|
FieldDefs = <
|
||||||
|
item
|
||||||
|
Name = 'ID'
|
||||||
|
DataType = ftInteger
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Name = 'GROUP_ID'
|
||||||
|
DataType = ftInteger
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Name = 'SUM'
|
||||||
|
DataType = ftCurrency
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Name = 'TEXT'
|
||||||
|
DataType = ftString
|
||||||
|
Size = 500
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Name = 'AAA'
|
||||||
|
DataType = ftString
|
||||||
|
Size = 50
|
||||||
|
end>
|
||||||
|
PacketRecords = 0
|
||||||
|
Left = 432
|
||||||
|
Top = 16
|
||||||
|
object rxDataID: TLongintField
|
||||||
|
FieldKind = fkData
|
||||||
|
FieldName = 'ID'
|
||||||
|
Index = 0
|
||||||
|
LookupCache = False
|
||||||
|
ProviderFlags = [pfInUpdate, pfInWhere]
|
||||||
|
ReadOnly = False
|
||||||
|
Required = False
|
||||||
|
end
|
||||||
|
object rxDataGROUP_ID: TLongintField
|
||||||
|
FieldKind = fkData
|
||||||
|
FieldName = 'GROUP_ID'
|
||||||
|
Index = 1
|
||||||
|
LookupCache = False
|
||||||
|
ProviderFlags = [pfInUpdate, pfInWhere]
|
||||||
|
ReadOnly = False
|
||||||
|
Required = False
|
||||||
|
end
|
||||||
|
object rxDataSUM: TCurrencyField
|
||||||
|
FieldKind = fkData
|
||||||
|
FieldName = 'SUM'
|
||||||
|
Index = 2
|
||||||
|
LookupCache = False
|
||||||
|
ProviderFlags = [pfInUpdate, pfInWhere]
|
||||||
|
ReadOnly = False
|
||||||
|
Required = False
|
||||||
|
MaxValue = 0
|
||||||
|
MinValue = 0
|
||||||
|
Precision = 2
|
||||||
|
end
|
||||||
|
object rxDataTEXT: TStringField
|
||||||
|
FieldKind = fkData
|
||||||
|
FieldName = 'TEXT'
|
||||||
|
Index = 3
|
||||||
|
LookupCache = False
|
||||||
|
ProviderFlags = [pfInUpdate, pfInWhere]
|
||||||
|
ReadOnly = False
|
||||||
|
Required = False
|
||||||
|
Size = 500
|
||||||
|
end
|
||||||
|
object rxDataAAA: TStringField
|
||||||
|
FieldKind = fkData
|
||||||
|
FieldName = 'AAA'
|
||||||
|
Index = 4
|
||||||
|
LookupCache = False
|
||||||
|
ProviderFlags = [pfInUpdate, pfInWhere]
|
||||||
|
ReadOnly = False
|
||||||
|
Required = False
|
||||||
|
Size = 50
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object dsData: TDataSource
|
||||||
|
DataSet = rxData
|
||||||
|
Left = 392
|
||||||
|
Top = 16
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,79 @@
|
|||||||
|
unit Unit1;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, FileUtil, rxdbgrid, rxmemds, Forms, Controls, Graphics,
|
||||||
|
Dialogs, StdCtrls, db;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TForm1 }
|
||||||
|
|
||||||
|
TForm1 = class(TForm)
|
||||||
|
CheckBox1: TCheckBox;
|
||||||
|
CheckBox2: TCheckBox;
|
||||||
|
CheckBox3: TCheckBox;
|
||||||
|
dsData: TDataSource;
|
||||||
|
rxDataAAA: TStringField;
|
||||||
|
rxDataGROUP_ID: TLongintField;
|
||||||
|
rxDataID: TLongintField;
|
||||||
|
rxDataSUM: TCurrencyField;
|
||||||
|
rxDataTEXT: TStringField;
|
||||||
|
RxDBGrid1: TRxDBGrid;
|
||||||
|
rxData: TRxMemoryData;
|
||||||
|
procedure CheckBox1Change(Sender: TObject);
|
||||||
|
procedure FormCreate(Sender: TObject);
|
||||||
|
private
|
||||||
|
|
||||||
|
public
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Form1: TForm1;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$R *.lfm}
|
||||||
|
|
||||||
|
{ TForm1 }
|
||||||
|
|
||||||
|
procedure TForm1.FormCreate(Sender: TObject);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
rxData.Open;
|
||||||
|
for i:=1 to 200 do
|
||||||
|
rxData.AppendRecord([i, ((i-1) div 4) + 1, Random * 1000, Format('Test string %d', [i])]);
|
||||||
|
|
||||||
|
RxDBGrid1.GroupItems.GroupFieldName:='GROUP_ID';
|
||||||
|
RxDBGrid1.ColumnByFieldName('SUM').GroupParam.ValueType:=fvtSum;
|
||||||
|
RxDBGrid1.ColumnByFieldName('SUM').GroupParam.Alignment:=taRightJustify;
|
||||||
|
|
||||||
|
RxDBGrid1.ColumnByFieldName('GROUP_ID').GroupParam.ValueType:=fvtCount;
|
||||||
|
|
||||||
|
RxDBGrid1.ColumnByFieldName('ID').GroupParam.ValueType:=fvtStaticText;
|
||||||
|
RxDBGrid1.ColumnByFieldName('ID').GroupParam.StaticText:='Группа:';
|
||||||
|
|
||||||
|
RxDBGrid1.ColumnByFieldName('AAA').GroupParam.ValueType:=fvtFieldValue;
|
||||||
|
RxDBGrid1.ColumnByFieldName('AAA').GroupParam.Alignment:=taCenter;
|
||||||
|
RxDBGrid1.ColumnByFieldName('AAA').GroupParam.Color:=clRed;
|
||||||
|
RxDBGrid1.GroupItems.Color:=clSkyBlue;
|
||||||
|
|
||||||
|
rxData.First;
|
||||||
|
|
||||||
|
CheckBox1Change(nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.CheckBox1Change(Sender: TObject);
|
||||||
|
begin
|
||||||
|
RxDBGrid1.GroupItems.Active:=CheckBox1.Checked;
|
||||||
|
RxDBGrid1.FooterOptions.Active:=CheckBox2.Checked;
|
||||||
|
RxDBGrid1.ReadOnly:=CheckBox3.Checked;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
@ -487,56 +487,103 @@ type
|
|||||||
{ TColumnGroupItem }
|
{ TColumnGroupItem }
|
||||||
|
|
||||||
TColumnGroupItem = class
|
TColumnGroupItem = class
|
||||||
RecordNo:integer;
|
private
|
||||||
|
FValues:TFPList;
|
||||||
|
RecBookMark:TBookMark;
|
||||||
FieldValue:string;
|
FieldValue:string;
|
||||||
RecordCount:integer;
|
RecordCount:integer;
|
||||||
|
RecordNo:integer;
|
||||||
|
function GetItems(FieldName: string): TColumnGroupItemValue;
|
||||||
|
procedure ClearValues;
|
||||||
|
function AddItem(AFieldName:string):TColumnGroupItemValue;
|
||||||
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
|
property Items[FieldName:string]:TColumnGroupItemValue read GetItems;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TColumnGroupItems }
|
{ TColumnGroupItems }
|
||||||
|
|
||||||
TColumnGroupItems = class
|
TColumnGroupItems = class
|
||||||
private
|
private
|
||||||
|
FColor: TColor;
|
||||||
|
//for calc
|
||||||
|
FGroupField:TField;
|
||||||
|
FCurItem:TColumnGroupItem;
|
||||||
|
FCurrentValue:String;
|
||||||
|
//params
|
||||||
FActive: boolean;
|
FActive: boolean;
|
||||||
|
FGroupFieldName: string;
|
||||||
|
FList:TFPList;
|
||||||
|
FRxDBGrid:TRxDBGrid;
|
||||||
procedure SetActive(AValue: boolean);
|
procedure SetActive(AValue: boolean);
|
||||||
|
procedure SetColor(AValue: TColor);
|
||||||
|
protected
|
||||||
|
function FindGroupItem(ARecBookMark: TBookMark): TColumnGroupItem;
|
||||||
|
function AddGroupItem:TColumnGroupItem;
|
||||||
|
procedure InitGroup;
|
||||||
|
procedure DoneGroup;
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create(ARxDBGrid:TRxDBGrid);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
function FindGroup(ARecordNo:integer):TColumnGroupItem;
|
|
||||||
procedure Clear;
|
procedure Clear;
|
||||||
procedure UpdateValues;
|
procedure UpdateValues;
|
||||||
|
property GroupFieldName:string read FGroupFieldName write FGroupFieldName;
|
||||||
published
|
published
|
||||||
property Active:boolean read FActive write SetActive;
|
property Active:boolean read FActive write SetActive;
|
||||||
|
property Color:TColor read FColor write SetColor;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{ TRxColumnGroupParam }
|
{ TRxColumnGroupParam }
|
||||||
|
|
||||||
TRxColumnGroupParam = class(TCollectionItem)
|
TRxColumnGroupParam = class
|
||||||
private
|
private
|
||||||
FFileName: string;
|
FAlignment: TAlignment;
|
||||||
|
FColor: TColor;
|
||||||
|
FDisplayFormat: string;
|
||||||
|
FLayout: TTextLayout;
|
||||||
|
FStaticText: string;
|
||||||
FValueType: TFooterValueType;
|
FValueType: TFooterValueType;
|
||||||
published
|
FColumn:TRxColumn;
|
||||||
property FileName:string read FFileName write FFileName;
|
FIsDefaultFont: boolean;
|
||||||
property ValueType:TFooterValueType read FValueType write FValueType;
|
FFont: TFont;
|
||||||
end;
|
procedure FontChanged(Sender: TObject);
|
||||||
|
function GetDisplayText: string;
|
||||||
{ TRxColumnGroupParams }
|
function GetFont: TFont;
|
||||||
|
function IsFontStored: Boolean;
|
||||||
TRxColumnGroupParams = class(TOwnedCollection)
|
procedure SetAlignment(AValue: TAlignment);
|
||||||
private
|
procedure SetColor(AValue: TColor);
|
||||||
function GetItem(Index: integer): TRxColumnGroupParam;
|
procedure SetDisplayFormat(AValue: string);
|
||||||
procedure SetItem(Index: integer; AValue: TRxColumnGroupParam);
|
procedure SetFont(AValue: TFont);
|
||||||
|
procedure SetLayout(AValue: TTextLayout);
|
||||||
|
procedure SetStaticText(AValue: string);
|
||||||
protected
|
protected
|
||||||
|
function GetGroupItems:TColumnGroupItem;
|
||||||
|
function GetGroupItem:TColumnGroupItemValue;
|
||||||
|
function GetRecordsCount: string;
|
||||||
|
function GetGroupTotal: string;
|
||||||
|
function GetGroupValue: string;
|
||||||
|
function GetRecNo: string;
|
||||||
public
|
public
|
||||||
function Add: TRxColumnGroupParam;
|
constructor Create(AColumn:TRxColumn);
|
||||||
public
|
destructor Destroy; override;
|
||||||
property Items[Index: integer]: TRxColumnGroupParam read GetItem write SetItem; default;
|
procedure FillDefaultFont;
|
||||||
|
procedure UpdateValues;
|
||||||
|
property DisplayText:string read GetDisplayText;
|
||||||
|
published
|
||||||
|
property ValueType:TFooterValueType read FValueType write FValueType default fvtNon;
|
||||||
|
property Alignment:TAlignment read FAlignment write SetAlignment default taLeftJustify;
|
||||||
|
property Layout: TTextLayout read FLayout write SetLayout default tlCenter;
|
||||||
|
property DisplayFormat: string read FDisplayFormat write SetDisplayFormat;
|
||||||
|
property StaticText: string read FStaticText write SetStaticText;
|
||||||
|
property Font: TFont read GetFont write SetFont stored IsFontStored;
|
||||||
|
property Color : TColor read FColor write SetColor stored IsFontStored default clNone;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{ TRxColumn }
|
{ TRxColumn }
|
||||||
|
|
||||||
TRxColumn = class(TColumn)
|
TRxColumn = class(TColumn)
|
||||||
@ -546,6 +593,7 @@ type
|
|||||||
FFooter: TRxColumnFooterItem;
|
FFooter: TRxColumnFooterItem;
|
||||||
FConstraints:TRxDBGridCollumnConstraints;
|
FConstraints:TRxDBGridCollumnConstraints;
|
||||||
FFilter: TRxColumnFilter;
|
FFilter: TRxColumnFilter;
|
||||||
|
FGroupParam: TRxColumnGroupParam;
|
||||||
FImageList: TImageList;
|
FImageList: TImageList;
|
||||||
FKeyList: TStrings;
|
FKeyList: TStrings;
|
||||||
FNotInKeyListIndex: integer;
|
FNotInKeyListIndex: integer;
|
||||||
@ -556,8 +604,6 @@ type
|
|||||||
FSortPosition: integer;
|
FSortPosition: integer;
|
||||||
FWordWrap: boolean;
|
FWordWrap: boolean;
|
||||||
FFooters: TRxColumnFooterItems;
|
FFooters: TRxColumnFooterItems;
|
||||||
//Group support
|
|
||||||
FGroupItems:TColumnGroupItems;
|
|
||||||
function GetConstraints: TRxDBGridCollumnConstraints;
|
function GetConstraints: TRxDBGridCollumnConstraints;
|
||||||
function GetFooter: TRxColumnFooterItem;
|
function GetFooter: TRxColumnFooterItem;
|
||||||
function GetFooters: TRxColumnFooterItems;
|
function GetFooters: TRxColumnFooterItems;
|
||||||
@ -581,6 +627,7 @@ type
|
|||||||
procedure OptimizeWidth;
|
procedure OptimizeWidth;
|
||||||
property SortOrder: TSortMarker read FSortOrder write FSortOrder;
|
property SortOrder: TSortMarker read FSortOrder write FSortOrder;
|
||||||
property SortPosition: integer read FSortPosition;
|
property SortPosition: integer read FSortPosition;
|
||||||
|
property GroupParam:TRxColumnGroupParam read FGroupParam;
|
||||||
published
|
published
|
||||||
property Constraints:TRxDBGridCollumnConstraints read GetConstraints write SetConstraints;
|
property Constraints:TRxDBGridCollumnConstraints read GetConstraints write SetConstraints;
|
||||||
property DirectInput : boolean read FDirectInput write FDirectInput default true;
|
property DirectInput : boolean read FDirectInput write FDirectInput default true;
|
||||||
@ -725,6 +772,9 @@ type
|
|||||||
FOnDataHintShow:TRxDBGridDataHintShowEvent;
|
FOnDataHintShow:TRxDBGridDataHintShowEvent;
|
||||||
|
|
||||||
FSaveOnDataSetScrolled: TDataSetScrolledEvent;
|
FSaveOnDataSetScrolled: TDataSetScrolledEvent;
|
||||||
|
//Group data suppert
|
||||||
|
FGroupItems:TColumnGroupItems;
|
||||||
|
FGroupItemDrawCur:TColumnGroupItem;
|
||||||
|
|
||||||
procedure DoCreateJMenu;
|
procedure DoCreateJMenu;
|
||||||
function GetColumns: TRxDbGridColumns;
|
function GetColumns: TRxDbGridColumns;
|
||||||
@ -811,6 +861,8 @@ type
|
|||||||
override;
|
override;
|
||||||
procedure SetDBHandlers(Value: boolean);virtual;
|
procedure SetDBHandlers(Value: boolean);virtual;
|
||||||
|
|
||||||
|
procedure DrawRow(ARow: Integer); override;
|
||||||
|
procedure DrawFocusRect(aCol,aRow:Integer; ARect:TRect); override;
|
||||||
procedure DrawFooterRows; virtual;
|
procedure DrawFooterRows; virtual;
|
||||||
|
|
||||||
procedure DoTitleClick(ACol: longint; ACollumn: TRxColumn; Shift: TShiftState); virtual;
|
procedure DoTitleClick(ACol: longint; ACollumn: TRxColumn; Shift: TShiftState); virtual;
|
||||||
@ -857,6 +909,7 @@ type
|
|||||||
|
|
||||||
procedure DoEditorHide; override;
|
procedure DoEditorHide; override;
|
||||||
procedure DoEditorShow; override;
|
procedure DoEditorShow; override;
|
||||||
|
procedure CheckNewCachedSizes(var AGCache:TGridDataCache); override;
|
||||||
|
|
||||||
property Editor;
|
property Editor;
|
||||||
public
|
public
|
||||||
@ -902,6 +955,7 @@ type
|
|||||||
property SortOrder:TSortMarker read GetSortOrder;
|
property SortOrder:TSortMarker read GetSortOrder;
|
||||||
|
|
||||||
property SortColumns:TRxDbGridColumnsSortList read FSortColumns;
|
property SortColumns:TRxDbGridColumnsSortList read FSortColumns;
|
||||||
|
property GroupItems:TColumnGroupItems read FGroupItems;
|
||||||
published
|
published
|
||||||
property AfterQuickSearch: TRxQuickSearchNotifyEvent read FAfterQuickSearch write FAfterQuickSearch;
|
property AfterQuickSearch: TRxQuickSearchNotifyEvent read FAfterQuickSearch write FAfterQuickSearch;
|
||||||
property ColumnDefValues:TRxDBGridColumnDefValues read FColumnDefValues write SetColumnDefValues;
|
property ColumnDefValues:TRxDBGridColumnDefValues read FColumnDefValues write SetColumnDefValues;
|
||||||
@ -1169,22 +1223,260 @@ type
|
|||||||
procedure EditingDone; override;
|
procedure EditingDone; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TRxColumnGroupParams }
|
{ TRxColumnGroupParam }
|
||||||
|
|
||||||
function TRxColumnGroupParams.GetItem(Index: integer): TRxColumnGroupParam;
|
procedure TRxColumnGroupParam.FontChanged(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
Result:= TRxColumnGroupParam(inherited Items[Index]);
|
FisDefaultFont := False;
|
||||||
|
FColumn.ColumnChanged;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TRxColumnGroupParams.SetItem(Index: integer;
|
function TRxColumnGroupParam.GetDisplayText: string;
|
||||||
AValue: TRxColumnGroupParam);
|
|
||||||
begin
|
begin
|
||||||
inherited SetItem(Index, AValue);
|
case FValueType of
|
||||||
|
fvtCount : Result := GetRecordsCount;
|
||||||
|
fvtSum,
|
||||||
|
fvtAvg,
|
||||||
|
fvtMax,
|
||||||
|
fvtMin : Result := GetGroupTotal;
|
||||||
|
fvtRecNo : Result := GetRecNo;
|
||||||
|
fvtStaticText:Result := FStaticText;
|
||||||
|
fvtFieldValue:Result := GetGroupValue;
|
||||||
|
else
|
||||||
|
//fvtNon,
|
||||||
|
Result:='';
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TRxColumnGroupParams.Add: TRxColumnGroupParam;
|
function TRxColumnGroupParam.GetFont: TFont;
|
||||||
begin
|
begin
|
||||||
Result:=TRxColumnGroupParam.Create(Self);
|
Result := FFont;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRxColumnGroupParam.IsFontStored: Boolean;
|
||||||
|
begin
|
||||||
|
Result := not FisDefaultFont;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRxColumnGroupParam.SetAlignment(AValue: TAlignment);
|
||||||
|
begin
|
||||||
|
if FAlignment=AValue then Exit;
|
||||||
|
FAlignment:=AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRxColumnGroupParam.SetColor(AValue: TColor);
|
||||||
|
begin
|
||||||
|
if FColor=AValue then Exit;
|
||||||
|
FColor:=AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRxColumnGroupParam.SetDisplayFormat(AValue: string);
|
||||||
|
begin
|
||||||
|
if FDisplayFormat=AValue then Exit;
|
||||||
|
FDisplayFormat:=AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRxColumnGroupParam.SetFont(AValue: TFont);
|
||||||
|
begin
|
||||||
|
if not FFont.IsEqual(AValue) then
|
||||||
|
FFont.Assign(AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRxColumnGroupParam.SetLayout(AValue: TTextLayout);
|
||||||
|
begin
|
||||||
|
if FLayout=AValue then Exit;
|
||||||
|
FLayout:=AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRxColumnGroupParam.SetStaticText(AValue: string);
|
||||||
|
begin
|
||||||
|
if FStaticText=AValue then Exit;
|
||||||
|
FStaticText:=AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRxColumnGroupParam.GetGroupItems: TColumnGroupItem;
|
||||||
|
begin
|
||||||
|
Result:=nil;
|
||||||
|
if TRxDBGrid(FColumn.Grid).DatalinkActive then
|
||||||
|
Result:=TRxDBGrid(FColumn.Grid).FGroupItemDrawCur;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRxColumnGroupParam.GetGroupItem: TColumnGroupItemValue;
|
||||||
|
var
|
||||||
|
FCGDI: TColumnGroupItem;
|
||||||
|
begin
|
||||||
|
Result:=nil;
|
||||||
|
if TRxDBGrid(FColumn.Grid).DatalinkActive then
|
||||||
|
begin
|
||||||
|
FCGDI:=TRxDBGrid(FColumn.Grid).FGroupItemDrawCur;
|
||||||
|
if Assigned(FCGDI) then
|
||||||
|
Result:=FCGDI.GetItems(FColumn.FieldName);
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRxColumnGroupParam.GetRecordsCount: string;
|
||||||
|
var
|
||||||
|
V: TColumnGroupItem;
|
||||||
|
begin
|
||||||
|
V:=GetGroupItems;
|
||||||
|
if Assigned(V) then
|
||||||
|
begin
|
||||||
|
if DisplayFormat <> '' then
|
||||||
|
Result := Format(DisplayFormat, [V.RecordCount])
|
||||||
|
else
|
||||||
|
Result := IntToStr(V.RecordCount);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRxColumnGroupParam.GetGroupTotal: string;
|
||||||
|
var
|
||||||
|
V: TColumnGroupItemValue;
|
||||||
|
F: TField;
|
||||||
|
begin
|
||||||
|
V:=GetGroupItem;
|
||||||
|
if Assigned(V) then
|
||||||
|
begin
|
||||||
|
F := TRxDBGrid(FColumn.Grid).DataSource.DataSet.FieldByName(FColumn.FieldName);
|
||||||
|
if Assigned(F) then
|
||||||
|
begin
|
||||||
|
if F.DataType in [ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency,
|
||||||
|
ftDate, ftTime, ftDateTime, ftTimeStamp, ftLargeint, ftBCD] then
|
||||||
|
begin
|
||||||
|
if F.DataType in [ftDate, ftTime, ftDateTime, ftTimeStamp] then
|
||||||
|
begin
|
||||||
|
if FValueType in [fvtSum, fvtAvg] then
|
||||||
|
Result := ''
|
||||||
|
else
|
||||||
|
if V.GroupValue = 0 then
|
||||||
|
Result := ''
|
||||||
|
else
|
||||||
|
if FDisplayFormat = '' then
|
||||||
|
Result := DateToStr(V.GroupValue)
|
||||||
|
else
|
||||||
|
Result := FormatDateTime(FDisplayFormat, V.GroupValue);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if F.DataType in [ftSmallint, ftInteger, ftWord, ftLargeint] then
|
||||||
|
begin
|
||||||
|
if FDisplayFormat = '' then
|
||||||
|
Result := IntToStr(Round(V.GroupValue))
|
||||||
|
else
|
||||||
|
Result := FormatFloat(FDisplayFormat, V.GroupValue);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if FDisplayFormat <> '' then
|
||||||
|
Result := FormatFloat(FDisplayFormat, V.GroupValue)
|
||||||
|
else
|
||||||
|
if F.DataType = ftCurrency then
|
||||||
|
Result := FloatToStrF(V.GroupValue, ffCurrency, 12, 2)
|
||||||
|
else
|
||||||
|
Result := FloatToStr(V.GroupValue);
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result := '';
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result := '';
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRxColumnGroupParam.GetGroupValue: string;
|
||||||
|
var
|
||||||
|
V: TColumnGroupItem;
|
||||||
|
begin
|
||||||
|
V:=GetGroupItems;
|
||||||
|
if Assigned(V) then
|
||||||
|
Result := V.FieldValue
|
||||||
|
else
|
||||||
|
Result := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRxColumnGroupParam.GetRecNo: string;
|
||||||
|
var
|
||||||
|
V: TColumnGroupItem;
|
||||||
|
begin
|
||||||
|
V:=GetGroupItems;
|
||||||
|
if Assigned(V) then
|
||||||
|
begin
|
||||||
|
if DisplayFormat <> '' then
|
||||||
|
Result := Format(DisplayFormat, [V.RecordNo])
|
||||||
|
else
|
||||||
|
Result := IntToStr(V.RecordNo);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TRxColumnGroupParam.Create(AColumn: TRxColumn);
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
FColumn:=AColumn;
|
||||||
|
FValueType:=fvtNon;
|
||||||
|
FAlignment:=taLeftJustify;
|
||||||
|
FLayout := tlCenter;
|
||||||
|
FColor:=clNone;
|
||||||
|
|
||||||
|
FFont := TFont.Create;
|
||||||
|
FillDefaultFont;
|
||||||
|
FFont.OnChange := @FontChanged;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TRxColumnGroupParam.Destroy;
|
||||||
|
begin
|
||||||
|
FreeAndNil(FFont);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRxColumnGroupParam.FillDefaultFont;
|
||||||
|
var
|
||||||
|
AGrid: TCustomGrid;
|
||||||
|
begin
|
||||||
|
if not Assigned(FColumn) then exit;
|
||||||
|
AGrid := FColumn.Grid;
|
||||||
|
if (AGrid<>nil) then
|
||||||
|
begin
|
||||||
|
FFont.Assign(AGrid.Font);
|
||||||
|
FIsDefaultFont := True;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRxColumnGroupParam.UpdateValues;
|
||||||
|
var
|
||||||
|
F: TField;
|
||||||
|
V: TColumnGroupItemValue;
|
||||||
|
begin
|
||||||
|
if (ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin]) and (FColumn.FieldName <> '') then
|
||||||
|
begin
|
||||||
|
F := TRxDBGrid(FColumn.Grid).DataSource.DataSet.FindField(FColumn.FieldName);
|
||||||
|
V:=TRxDBGrid(FColumn.Grid).FGroupItems.FCurItem.Items[FColumn.FieldName];
|
||||||
|
if not Assigned(V) then
|
||||||
|
V:=TRxDBGrid(FColumn.Grid).FGroupItems.FCurItem.AddItem(FColumn.FieldName);
|
||||||
|
if Assigned(F) and Assigned(V) then
|
||||||
|
begin
|
||||||
|
if F.DataType in [ftDate, ftTime, ftDateTime, ftTimeStamp] then
|
||||||
|
begin
|
||||||
|
case FValueType of
|
||||||
|
fvtMax: V.GroupValue := Max(V.GroupValue, F.AsDateTime);
|
||||||
|
fvtMin: V.GroupValue := Min(V.GroupValue, F.AsDateTime);
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
case FValueType of
|
||||||
|
fvtAvg,
|
||||||
|
fvtSum: V.GroupValue := V.GroupValue + F.AsFloat;
|
||||||
|
fvtMax: V.GroupValue := Max(V.GroupValue, F.AsFloat);
|
||||||
|
fvtMin: V.GroupValue := Min(V.GroupValue, F.AsFloat);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TRxColumnFooterItemsEnumerator }
|
{ TRxColumnFooterItemsEnumerator }
|
||||||
@ -1212,43 +1504,160 @@ procedure TColumnGroupItems.SetActive(AValue: boolean);
|
|||||||
begin
|
begin
|
||||||
if FActive=AValue then Exit;
|
if FActive=AValue then Exit;
|
||||||
FActive:=AValue;
|
FActive:=AValue;
|
||||||
|
if FActive then
|
||||||
|
begin
|
||||||
|
FRxDBGrid.CalcStatTotals;
|
||||||
|
end;
|
||||||
|
//FRxDBGrid.UpdateRowsHeight;
|
||||||
|
FRxDBGrid.VisualChange;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TColumnGroupItems.Create;
|
procedure TColumnGroupItems.SetColor(AValue: TColor);
|
||||||
|
begin
|
||||||
|
if FColor=AValue then Exit;
|
||||||
|
FColor:=AValue;
|
||||||
|
FRxDBGrid.Invalidate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TColumnGroupItems.Create(ARxDBGrid: TRxDBGrid);
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
FActive:=false;
|
FActive:=false;
|
||||||
|
FList:=TFPList.Create;
|
||||||
|
FRxDBGrid:=ARxDBGrid;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TColumnGroupItems.Destroy;
|
destructor TColumnGroupItems.Destroy;
|
||||||
begin
|
begin
|
||||||
|
Clear;
|
||||||
|
FreeAndNil(FList);
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TColumnGroupItems.FindGroup(ARecordNo: integer): TColumnGroupItem;
|
function TColumnGroupItems.FindGroupItem(ARecBookMark: TBookMark
|
||||||
|
): TColumnGroupItem;
|
||||||
|
var
|
||||||
|
S, E, i: Integer;
|
||||||
begin
|
begin
|
||||||
Result:=nil;
|
Result:=nil;
|
||||||
|
if FList.Count = 0 then exit;
|
||||||
|
S:=0;
|
||||||
|
E:=FList.Count - 1;
|
||||||
|
{
|
||||||
|
while (S<=E) do
|
||||||
|
begin
|
||||||
|
i:=(E+S) div 2;
|
||||||
|
if (TColumnGroupItem(FList[i]).RecordNo = ARecordNo) then
|
||||||
|
begin
|
||||||
|
Result:=TColumnGroupItem(FList[i]);
|
||||||
|
Exit;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if (TColumnGroupItem(FList[i]).RecordNo > ARecordNo) then E:=i-1
|
||||||
|
else S:=i+1;
|
||||||
|
end; }
|
||||||
|
|
||||||
|
for i:=0 to FList.Count-1 do
|
||||||
|
if FRxDBGrid.DataSource.DataSet.CompareBookmarks(TColumnGroupItem(FList[i]).RecBookMark, ARecBookMark) = 0 then
|
||||||
|
exit(TColumnGroupItem(FList[i]))
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TColumnGroupItems.Clear;
|
procedure TColumnGroupItems.Clear;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
|
for i:=0 to FList.Count-1 do
|
||||||
|
TColumnGroupItem(FList[i]).Free;
|
||||||
|
FList.Clear;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TColumnGroupItems.UpdateValues;
|
procedure TColumnGroupItems.UpdateValues;
|
||||||
begin
|
begin
|
||||||
|
if not Assigned(FGroupField) then Exit;
|
||||||
|
if (FCurrentValue <> FGroupField.DisplayText) or (not Assigned(FCurItem)) then
|
||||||
|
begin
|
||||||
|
DoneGroup;
|
||||||
|
FCurItem:=AddGroupItem;
|
||||||
|
FCurrentValue:=FGroupField.DisplayText;
|
||||||
|
FCurItem.RecordCount:=1;
|
||||||
|
FCurItem.RecordNo:=FRxDBGrid.DataSource.DataSet.RecNo;
|
||||||
|
FCurItem.RecBookMark:=FRxDBGrid.DataSource.DataSet.Bookmark;
|
||||||
|
FCurItem.FieldValue:=FCurrentValue;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Inc(FCurItem.RecordCount);
|
||||||
|
FCurItem.RecordNo:=FRxDBGrid.DataSource.DataSet.RecNo;
|
||||||
|
FCurItem.RecBookMark:=FRxDBGrid.DataSource.DataSet.Bookmark;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TColumnGroupItems.AddGroupItem: TColumnGroupItem;
|
||||||
|
begin
|
||||||
|
Result:=TColumnGroupItem.Create;
|
||||||
|
FList.Add(Result);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TColumnGroupItems.InitGroup;
|
||||||
|
begin
|
||||||
|
if (FRxDBGrid.DataSource.DataSet.RecordCount > 0) and (FGroupFieldName <> '') then
|
||||||
|
begin
|
||||||
|
FGroupField:=FRxDBGrid.DataSource.DataSet.FieldByName(FGroupFieldName);
|
||||||
|
FCurrentValue:=FGroupField.DisplayText;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TColumnGroupItems.DoneGroup;
|
||||||
|
begin
|
||||||
|
{ TODO : Необходимо список закладок отсортировать }
|
||||||
|
if Assigned(FCurItem) then
|
||||||
|
begin
|
||||||
|
//FCurItem.RecordNo:=FRxDBGrid.DataSource.DataSet.RecNo;
|
||||||
|
//FCurItem.RecordNo:=PtrInt(FRxDBGrid.DataSource.DataSet.ActiveBuffer);
|
||||||
|
//FList.Sort(@DoListSortCompare);
|
||||||
|
//FCurItem.RecordNo:=FRxDBGrid.DataSource.DataSet.Bookmark;
|
||||||
|
end;
|
||||||
|
FCurItem:=nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TColumnGroupItem }
|
{ TColumnGroupItem }
|
||||||
|
|
||||||
|
function TColumnGroupItem.GetItems(FieldName: string): TColumnGroupItemValue;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
Result:=nil;
|
||||||
|
for i:=0 to FValues.Count-1 do
|
||||||
|
if TColumnGroupItemValue(FValues[i]).FieldName = FieldName then
|
||||||
|
Exit(TColumnGroupItemValue(FValues[i]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TColumnGroupItem.ClearValues;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i:=0 to FValues.Count-1 do
|
||||||
|
TColumnGroupItemValue(FValues[i]).Free;
|
||||||
|
FValues.Clear;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TColumnGroupItem.AddItem(AFieldName: string): TColumnGroupItemValue;
|
||||||
|
begin
|
||||||
|
Result:=TColumnGroupItemValue.Create;
|
||||||
|
FValues.Add(Result);
|
||||||
|
Result.FieldName:=AFieldName;
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TColumnGroupItem.Create;
|
constructor TColumnGroupItem.Create;
|
||||||
begin
|
begin
|
||||||
|
inherited Create;
|
||||||
|
FValues:=TFPList.Create;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TColumnGroupItem.Destroy;
|
destructor TColumnGroupItem.Destroy;
|
||||||
begin
|
begin
|
||||||
|
ClearValues;
|
||||||
|
FreeAndNil(FValues);
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3377,10 +3786,11 @@ var
|
|||||||
S:string;
|
S:string;
|
||||||
CurActiveRecord: Integer;
|
CurActiveRecord: Integer;
|
||||||
R:TRxColumn;
|
R:TRxColumn;
|
||||||
|
P: PtrInt;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Result:=0;
|
Result:=0;
|
||||||
if not (Assigned(DataLink) and DataLink.Active) then
|
if (not (Assigned(DataLink) and DataLink.Active)) or ((GCache.VisibleGrid.Top=0) and (GCache.VisibleGrid.Bottom=0)) then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
CurActiveRecord:=DataLink.ActiveRecord;
|
CurActiveRecord:=DataLink.ActiveRecord;
|
||||||
@ -3389,6 +3799,7 @@ begin
|
|||||||
for i:=GCache.VisibleGrid.Top to GCache.VisibleGrid.Bottom do
|
for i:=GCache.VisibleGrid.Top to GCache.VisibleGrid.Bottom do
|
||||||
begin
|
begin
|
||||||
DataLink.ActiveRecord:=i - FixedRows;
|
DataLink.ActiveRecord:=i - FixedRows;
|
||||||
|
P:=PtrInt(DataSource.DataSet.ActiveBuffer);
|
||||||
H:=1;
|
H:=1;
|
||||||
for j:=0 to Columns.Count-1 do
|
for j:=0 to Columns.Count-1 do
|
||||||
begin
|
begin
|
||||||
@ -3410,6 +3821,11 @@ begin
|
|||||||
H:=Max(H, H1);
|
H:=Max(H, H1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if FGroupItems.Active and DatalinkActive then
|
||||||
|
if Assigned(FGroupItems.FindGroupItem(DataSource.DataSet.Bookmark)) then
|
||||||
|
Inc(H);
|
||||||
|
|
||||||
|
|
||||||
if i<RowCount then
|
if i<RowCount then
|
||||||
begin
|
begin
|
||||||
if Assigned(FOnCalcRowHeight) then
|
if Assigned(FOnCalcRowHeight) then
|
||||||
@ -3559,7 +3975,7 @@ begin
|
|||||||
if Assigned(FSaveOnDataSetScrolled) then
|
if Assigned(FSaveOnDataSetScrolled) then
|
||||||
FSaveOnDataSetScrolled(aDataSet, Distance);
|
FSaveOnDataSetScrolled(aDataSet, Distance);
|
||||||
|
|
||||||
if rdgWordWrap in FOptionsRx then
|
if (rdgWordWrap in FOptionsRx) or (FGroupItems.Active) then
|
||||||
UpdateRowsHeight;
|
UpdateRowsHeight;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3908,9 +4324,10 @@ end;
|
|||||||
|
|
||||||
procedure TRxDBGrid.DrawCell(aCol, aRow: integer; aRect: TRect; aState: TGridDrawState);
|
procedure TRxDBGrid.DrawCell(aCol, aRow: integer; aRect: TRect; aState: TGridDrawState);
|
||||||
var
|
var
|
||||||
RxColumn: TRxColumn;
|
RxColumn, C: TRxColumn;
|
||||||
AImageIndex: integer;
|
AImageIndex: integer;
|
||||||
FBackground: TColor;
|
FBackground: TColor;
|
||||||
|
gRect: TRect;
|
||||||
begin
|
begin
|
||||||
if (gdFixed in aState) and (aRow = 0) then
|
if (gdFixed in aState) and (aRow = 0) then
|
||||||
begin
|
begin
|
||||||
@ -3920,17 +4337,24 @@ begin
|
|||||||
if not ((gdFixed in aState) or ((aCol = 0) and (dgIndicator in Options)) or
|
if not ((gdFixed in aState) or ((aCol = 0) and (dgIndicator in Options)) or
|
||||||
((aRow = 0) and (dgTitles in Options))) then
|
((aRow = 0) and (dgTitles in Options))) then
|
||||||
begin
|
begin
|
||||||
|
|
||||||
PrepareCanvas(aCol, aRow, aState);
|
PrepareCanvas(aCol, aRow, aState);
|
||||||
|
|
||||||
|
if FGroupItems.Active and Assigned(FGroupItemDrawCur) then
|
||||||
|
begin
|
||||||
|
gRect:=aRect;
|
||||||
|
aRect.Bottom:=aRect.Bottom - DefaultRowHeight - 1;
|
||||||
|
gRect.Top:=aRect.Bottom;
|
||||||
|
gRect.Bottom:=gRect.Bottom - 2;
|
||||||
|
end;
|
||||||
|
|
||||||
if Assigned(FOnGetCellProps) and not (gdSelected in aState) then
|
if Assigned(FOnGetCellProps) and not (gdSelected in aState) then
|
||||||
begin
|
begin
|
||||||
FBackground := Canvas.Brush.Color;
|
FBackground := Canvas.Brush.Color;
|
||||||
FOnGetCellProps(Self, GetFieldFromGridColumn(aCol), Canvas.Font, FBackground);
|
FOnGetCellProps(Self, GetFieldFromGridColumn(aCol), Canvas.Font, FBackground);
|
||||||
Canvas.Brush.Color := FBackground;
|
Canvas.Brush.Color := FBackground;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Canvas.FillRect(aRect);
|
Canvas.FillRect(aRect);
|
||||||
|
|
||||||
DrawCellGrid(aCol, aRow, aRect, aState);
|
DrawCellGrid(aCol, aRow, aRect, aState);
|
||||||
|
|
||||||
RxColumn := TRxColumn(ColumnFromGridColumn(aCol));
|
RxColumn := TRxColumn(ColumnFromGridColumn(aCol));
|
||||||
@ -3943,7 +4367,29 @@ begin
|
|||||||
DrawCellBitmap(RxColumn, aRect, aState, AImageIndex);
|
DrawCellBitmap(RxColumn, aRect, aState, AImageIndex);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
DefaultDrawCellData(aCol, aRow, aRect, aState);
|
DefaultDrawCellData(aCol, aRow, aRect, aState)
|
||||||
|
;
|
||||||
|
|
||||||
|
if FGroupItems.Active and Assigned(FGroupItemDrawCur) then
|
||||||
|
begin
|
||||||
|
C := ColumnFromGridColumn(aCol) as TRxColumn;
|
||||||
|
|
||||||
|
if C.FGroupParam.Color <> clNone then
|
||||||
|
Canvas.Brush.Color := C.FGroupParam.Color
|
||||||
|
else
|
||||||
|
if FGroupItems.Color <> clNone then
|
||||||
|
Canvas.Brush.Color := FGroupItems.Color
|
||||||
|
else
|
||||||
|
Canvas.Brush.Color := Color;
|
||||||
|
|
||||||
|
Canvas.Font.Color:=Font.Color;
|
||||||
|
|
||||||
|
Canvas.FillRect(gRect);
|
||||||
|
|
||||||
|
if C.FGroupParam.FValueType <> fvtNon then
|
||||||
|
WriteTextHeader(Canvas, gRect, C.FGroupParam.DisplayText, C.FGroupParam.Alignment);
|
||||||
|
end;
|
||||||
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
inherited DrawCell(aCol, aRow, aRect, aState);
|
inherited DrawCell(aCol, aRow, aRect, aState);
|
||||||
@ -4031,6 +4477,31 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TRxDBGrid.DrawRow(ARow: Integer);
|
||||||
|
var
|
||||||
|
P: TBookMark;
|
||||||
|
begin
|
||||||
|
FGroupItemDrawCur:=nil;
|
||||||
|
if FGroupItems.Active and DatalinkActive then
|
||||||
|
begin
|
||||||
|
|
||||||
|
if (ARow>=FixedRows) then
|
||||||
|
begin
|
||||||
|
DataLink.ActiveRecord:=ARow-FixedRows;
|
||||||
|
P:=DataSource.DataSet.Bookmark;
|
||||||
|
FGroupItemDrawCur:=FGroupItems.FindGroupItem(P);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
inherited DrawRow(ARow);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRxDBGrid.DrawFocusRect(aCol, aRow: Integer; ARect: TRect);
|
||||||
|
begin
|
||||||
|
if FGroupItems.Active and Assigned(FGroupItemDrawCur) then
|
||||||
|
ARect.Bottom:=ARect.Bottom - DefaultRowHeight;
|
||||||
|
inherited DrawFocusRect(aCol, aRow, ARect);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TRxDBGrid.DrawFooterRows;
|
procedure TRxDBGrid.DrawFooterRows;
|
||||||
var
|
var
|
||||||
FooterRect: TRect;
|
FooterRect: TRect;
|
||||||
@ -4049,7 +4520,7 @@ var
|
|||||||
ABrush: TBrush;
|
ABrush: TBrush;
|
||||||
begin
|
begin
|
||||||
TotalWidth := GCache.ClientWidth;
|
TotalWidth := GCache.ClientWidth;
|
||||||
TotalYOffs := GCache.ClientHeight - (GetDefaultRowHeight * FFooterOptions.RowCount);
|
TotalYOffs := GCache.ClientHeight {- (GetDefaultRowHeight * FFooterOptions.RowCount)};
|
||||||
|
|
||||||
FooterRect := Rect(0, TotalYOffs, TotalWidth, TotalYOffs + GetDefaultRowHeight * FFooterOptions.RowCount);
|
FooterRect := Rect(0, TotalYOffs, TotalWidth, TotalYOffs + GetDefaultRowHeight * FFooterOptions.RowCount);
|
||||||
|
|
||||||
@ -4695,26 +5166,19 @@ var
|
|||||||
H, H1:integer;
|
H, H1:integer;
|
||||||
i: LongInt;
|
i: LongInt;
|
||||||
begin
|
begin
|
||||||
|
{ Result := ClientHeight div DefaultRowHeight;
|
||||||
|
if dgTitles in Options then
|
||||||
|
Dec(Result, 1);}
|
||||||
|
|
||||||
if GetDefaultRowHeight > 0 then
|
if GetDefaultRowHeight > 0 then
|
||||||
begin
|
begin
|
||||||
H:=ClientHeight - GCache.FixedHeight;
|
H:=ClientHeight;
|
||||||
if FFooterOptions.Active then
|
if FFooterOptions.Active then
|
||||||
H:=H - GetDefaultRowHeight * FFooterOptions.RowCount;
|
H:=H - GetDefaultRowHeight * FFooterOptions.RowCount;
|
||||||
|
|
||||||
if rdgWordWrap in FOptionsRx then
|
|
||||||
begin
|
|
||||||
H1:=0;
|
|
||||||
Result:=1;
|
|
||||||
for i:=GCache.VisibleGrid.Top to GCache.VisibleGrid.Bottom do
|
|
||||||
begin
|
|
||||||
H1:=H1 + RowHeights[i];
|
|
||||||
if H1>H then Break;
|
|
||||||
Inc(Result);
|
|
||||||
end;
|
|
||||||
if Result = 0 then Result:=1;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Result := H div GetDefaultRowHeight;
|
Result := H div GetDefaultRowHeight;
|
||||||
|
if dgTitles in Options then
|
||||||
|
Dec(Result, 1);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
Result := 1;
|
Result := 1;
|
||||||
@ -4911,7 +5375,7 @@ begin
|
|||||||
MaxClientXY.Y:=MaxClientXY.Y - (GetDefaultRowHeight * FFooterOptions.RowCount + 2);
|
MaxClientXY.Y:=MaxClientXY.Y - (GetDefaultRowHeight * FFooterOptions.RowCount + 2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if rdgWordWrap in FOptionsRx then
|
if ((rdgWordWrap in FOptionsRx) or (Assigned(FGroupItems) and FGroupItems.Active)) and (HandleAllocated) then
|
||||||
UpdateRowsHeight;
|
UpdateRowsHeight;
|
||||||
|
|
||||||
inherited VisualChange;
|
inherited VisualChange;
|
||||||
@ -4994,8 +5458,9 @@ var
|
|||||||
FCList, FCList2:TFPList;
|
FCList, FCList2:TFPList;
|
||||||
j: Integer;
|
j: Integer;
|
||||||
F: TRxColumnFooterItem;
|
F: TRxColumnFooterItem;
|
||||||
|
S: String;
|
||||||
begin
|
begin
|
||||||
if (not (FFooterOptions.Active and DatalinkActive)) or (Columns.Count = 0) or (gsAddingAutoColumns in GridStatus) then
|
if (not (DatalinkActive and (FGroupItems.Active or FFooterOptions.Active))) or (Columns.Count = 0) or (gsAddingAutoColumns in GridStatus) then
|
||||||
Exit;
|
Exit;
|
||||||
|
|
||||||
if Assigned(OnRxCalcFooterValues)then
|
if Assigned(OnRxCalcFooterValues)then
|
||||||
@ -5015,7 +5480,7 @@ begin
|
|||||||
APresent := False;
|
APresent := False;
|
||||||
for C in Columns do
|
for C in Columns do
|
||||||
begin
|
begin
|
||||||
APresent := (C.Footer.FValueType in [fvtSum, fvtAvg, fvtMax, fvtMin, fvtCount]) or (C.FGroupItems.Active);
|
APresent := (C.Footer.FValueType in [fvtSum, fvtAvg, fvtMax, fvtMin, fvtCount]) {or (C.FGroupItems.Active)};
|
||||||
if not APresent then
|
if not APresent then
|
||||||
begin
|
begin
|
||||||
for F in C.Footers do
|
for F in C.Footers do
|
||||||
@ -5029,17 +5494,19 @@ begin
|
|||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if not APresent then Exit;
|
if (not APresent) and (not FGroupItems.Active) then Exit;
|
||||||
|
|
||||||
|
|
||||||
Inc(FInProcessCalc);
|
Inc(FInProcessCalc);
|
||||||
|
|
||||||
cnt:=0;
|
cnt:=0;
|
||||||
|
|
||||||
|
if FGroupItems.Active then FGroupItems.Clear;
|
||||||
|
|
||||||
for C in Columns do
|
for C in Columns do
|
||||||
begin
|
begin
|
||||||
C.Footer.ResetTestValue;
|
C.Footer.ResetTestValue;
|
||||||
for F in C.Footers do F.ResetTestValue;
|
for F in C.Footers do F.ResetTestValue;
|
||||||
C.FGroupItems.Clear;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if (DataSource.DataSet.RecordCount<=0) then
|
if (DataSource.DataSet.RecordCount<=0) then
|
||||||
@ -5088,10 +5555,16 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if C.FGroupItems.Active then FCList2.Add(C);
|
if FGroupItems.Active then
|
||||||
|
if C.FGroupParam.ValueType <> fvtNon then
|
||||||
|
FCList2.Add(C);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
DHS.First;
|
DHS.First;
|
||||||
|
|
||||||
|
if FGroupItems.Active then
|
||||||
|
FGroupItems.InitGroup;
|
||||||
|
|
||||||
while not DHS.EOF do
|
while not DHS.EOF do
|
||||||
begin
|
begin
|
||||||
for i:=0 to FCList.Count-1 do
|
for i:=0 to FCList.Count-1 do
|
||||||
@ -5107,16 +5580,18 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if FGroupItems.Active then
|
||||||
|
begin
|
||||||
|
FGroupItems.UpdateValues;
|
||||||
for i:=0 to FCList2.Count-1 do
|
for i:=0 to FCList2.Count-1 do
|
||||||
TRxColumn(FCList[i]).FGroupItems.UpdateValues;
|
TRxColumn(FCList2[i]).FGroupParam.UpdateValues;
|
||||||
|
end;
|
||||||
|
|
||||||
inc(cnt);
|
inc(cnt);
|
||||||
DHS.Next;
|
DHS.Next;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
FCList2.Free;
|
//calc agregate values
|
||||||
FCList.Free;
|
|
||||||
|
|
||||||
for C in Columns do
|
for C in Columns do
|
||||||
begin
|
begin
|
||||||
if C.Footer.ValueType = fvtCount then
|
if C.Footer.ValueType = fvtCount then
|
||||||
@ -5135,6 +5610,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if FGroupItems.Active then
|
||||||
|
FGroupItems.DoneGroup;
|
||||||
|
|
||||||
|
FCList2.Free;
|
||||||
|
FCList.Free;
|
||||||
|
|
||||||
|
//Restore cursor position
|
||||||
if Min(Datalink.RecordCount + SavePos - 1, DHS.RecNo) > 0 then
|
if Min(Datalink.RecordCount + SavePos - 1, DHS.RecNo) > 0 then
|
||||||
DHS.RecNo := Min(Datalink.RecordCount + SavePos - 1, DHS.RecNo);
|
DHS.RecNo := Min(Datalink.RecordCount + SavePos - 1, DHS.RecNo);
|
||||||
|
|
||||||
@ -5657,11 +6139,45 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TRxDBGrid.DoEditorShow;
|
procedure TRxDBGrid.DoEditorShow;
|
||||||
|
var
|
||||||
|
R, R1: TRect;
|
||||||
|
FSaveRow: Integer;
|
||||||
|
P: TBookMark;
|
||||||
|
FG: TColumnGroupItem;
|
||||||
begin
|
begin
|
||||||
inherited DoEditorShow;
|
inherited DoEditorShow;
|
||||||
|
|
||||||
|
{ if FGroupItems.Active then
|
||||||
|
begin
|
||||||
|
if (Row>=FixedRows) then
|
||||||
|
begin
|
||||||
|
FSaveRow:=DataLink.ActiveRecord;
|
||||||
|
DataLink.ActiveRecord:=Row-FixedRows;
|
||||||
|
P:=DataSource.DataSet.Bookmark;
|
||||||
|
DataLink.ActiveRecord:=FSaveRow;
|
||||||
|
FG:=FGroupItems.FindGroupItem(P);
|
||||||
|
if Assigned(FG) then
|
||||||
|
begin
|
||||||
|
R:=CellRect(Col, Row);
|
||||||
|
Editor.SetBounds(R.Left, R.Top, R.Right - R.Left - 1, R.Bottom - R.Top - DefaultRowHeight - 1);
|
||||||
|
R1:=Editor.BoundsRect;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end; }
|
||||||
DoSetColEdtBtn;
|
DoSetColEdtBtn;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TRxDBGrid.CheckNewCachedSizes(var AGCache: TGridDataCache);
|
||||||
|
begin
|
||||||
|
inherited CheckNewCachedSizes(AGCache);
|
||||||
|
if FFooterOptions.Active then
|
||||||
|
begin
|
||||||
|
AGCache.ClientHeight:=AGCache.ClientHeight - DefaultRowHeight * FFooterOptions.RowCount;
|
||||||
|
AGCache.ScrollHeight:=AGCache.ScrollHeight - DefaultRowHeight * FFooterOptions.RowCount;
|
||||||
|
AGCache.ClientRect.Bottom:=AGCache.ClientRect.Bottom - DefaultRowHeight * FFooterOptions.RowCount;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TRxDBGrid.GetOnCreateLookup;
|
procedure TRxDBGrid.GetOnCreateLookup;
|
||||||
begin
|
begin
|
||||||
if Assigned(F_CreateLookup) then
|
if Assigned(F_CreateLookup) then
|
||||||
@ -5824,10 +6340,14 @@ begin
|
|||||||
FSearchOptions:=TRxDBGridSearchOptions.Create(Self);
|
FSearchOptions:=TRxDBGridSearchOptions.Create(Self);
|
||||||
|
|
||||||
FSortColumns:=TRxDbGridColumnsSortList.Create;
|
FSortColumns:=TRxDbGridColumnsSortList.Create;
|
||||||
|
FGroupItems:=TColumnGroupItems.Create(Self);
|
||||||
|
|
||||||
F_MenuBMP := CreateResBitmap('rx_menu_grid');
|
F_MenuBMP := CreateResBitmap('rx_menu_grid');
|
||||||
|
|
||||||
Options := Options - [dgTabs];
|
Options := Options - [dgTabs];
|
||||||
|
|
||||||
|
// TDrawGrid(Self).Options:=TDrawGrid(Self).Options + [goColSpanning];
|
||||||
|
|
||||||
OptionsRx := OptionsRx + [rdgAllowColumnsForm, rdgAllowDialogFind, rdgAllowQuickFilter];
|
OptionsRx := OptionsRx + [rdgAllowColumnsForm, rdgAllowDialogFind, rdgAllowQuickFilter];
|
||||||
|
|
||||||
FAutoSort := True;
|
FAutoSort := True;
|
||||||
@ -5893,6 +6413,7 @@ begin
|
|||||||
FreeAndNil(FToolsList);
|
FreeAndNil(FToolsList);
|
||||||
FreeAndNil(FColumnDefValues);
|
FreeAndNil(FColumnDefValues);
|
||||||
FreeAndNil(FSearchOptions);
|
FreeAndNil(FSearchOptions);
|
||||||
|
FreeAndNil(FGroupItems);
|
||||||
|
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
FreeAndNil(FSortColumns);
|
FreeAndNil(FSortColumns);
|
||||||
@ -6122,12 +6643,12 @@ begin
|
|||||||
FEditButtons:=TRxColumnEditButtons.Create(Self);
|
FEditButtons:=TRxColumnEditButtons.Create(Self);
|
||||||
FOptions:=[coCustomizeVisible, coCustomizeWidth];
|
FOptions:=[coCustomizeVisible, coCustomizeWidth];
|
||||||
FFooters:=TRxColumnFooterItems.Create(Self);
|
FFooters:=TRxColumnFooterItems.Create(Self);
|
||||||
FGroupItems:=TColumnGroupItems.Create;
|
FGroupParam:=TRxColumnGroupParam.Create(Self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TRxColumn.Destroy;
|
destructor TRxColumn.Destroy;
|
||||||
begin
|
begin
|
||||||
FreeAndNil(FGroupItems);
|
FreeAndNil(FGroupParam);
|
||||||
FreeAndNil(FFooters);
|
FreeAndNil(FFooters);
|
||||||
FreeAndNil(FEditButtons);
|
FreeAndNil(FEditButtons);
|
||||||
if FKeyList <> nil then
|
if FKeyList <> nil then
|
||||||
@ -6531,6 +7052,5 @@ finalization
|
|||||||
FreeAndNil(FUpDownRxBMP);
|
FreeAndNil(FUpDownRxBMP);
|
||||||
FreeAndNil(FPlusRxBMP);
|
FreeAndNil(FPlusRxBMP);
|
||||||
FreeAndNil(FMinusRxBMP);
|
FreeAndNil(FMinusRxBMP);
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user