RxFPC:continue work on merge cells in RxDBGrid

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5928 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
alexs75
2017-06-09 13:56:12 +00:00
parent cfc02a2279
commit 52dcfe90b1
4 changed files with 123 additions and 75 deletions

View File

@ -10,9 +10,6 @@
<UseXPManifest Value="True"/> <UseXPManifest Value="True"/>
<Icon Value="0"/> <Icon Value="0"/>
</General> </General>
<VersionInfo>
<StringTable ProductVersion=""/>
</VersionInfo>
<BuildModes Count="1"> <BuildModes Count="1">
<Item1 Name="Default" Default="True"/> <Item1 Name="Default" Default="True"/>
</BuildModes> </BuildModes>
@ -44,6 +41,7 @@
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<ComponentName Value="Form1"/> <ComponentName Value="Form1"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/> <UnitName Value="Unit1"/>
</Unit1> </Unit1>

View File

@ -11,7 +11,7 @@
<WindowIndex Value="-1"/> <WindowIndex Value="-1"/>
<TopLine Value="-1"/> <TopLine Value="-1"/>
<CursorPos X="-1" Y="-1"/> <CursorPos X="-1" Y="-1"/>
<UsageCount Value="20"/> <UsageCount Value="21"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
@ -21,20 +21,19 @@
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/> <UnitName Value="Unit1"/>
<TopLine Value="43"/> <TopLine Value="43"/>
<CursorPos X="138" Y="62"/> <CursorPos X="24" Y="57"/>
<UsageCount Value="20"/> <UsageCount Value="21"/>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/> <LoadedDesigner Value="True"/>
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="../../../rxdb/rxdbgrid.pas"/> <Filename Value="../../../rxdb/rxdbgrid.pas"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<TopLine Value="4344"/> <TopLine Value="5457"/>
<CursorPos X="3" Y="4366"/> <CursorPos Y="5473"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Bookmarks Count="1"> <Bookmarks Count="1">
<Item0 X="7" Y="4331" ID="1"/> <Item0 X="7" Y="4336" ID="1"/>
</Bookmarks> </Bookmarks>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit2> </Unit2>
@ -42,17 +41,18 @@
<Filename Value="../../../../../lcl/grids.pas"/> <Filename Value="../../../../../lcl/grids.pas"/>
<UnitName Value="Grids"/> <UnitName Value="Grids"/>
<EditorIndex Value="6"/> <EditorIndex Value="6"/>
<TopLine Value="4437"/> <TopLine Value="8814"/>
<CursorPos Y="4468"/> <CursorPos Y="8835"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit3> </Unit3>
<Unit4> <Unit4>
<Filename Value="../../../../../lcl/dbgrids.pas"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<UnitName Value="DBGrids"/> <UnitName Value="DBGrids"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="5"/> <EditorIndex Value="5"/>
<TopLine Value="1920"/> <TopLine Value="2113"/>
<CursorPos Y="1939"/> <CursorPos X="3" Y="2117"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit4> </Unit4>
@ -148,125 +148,134 @@
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1246" TopLine="1226"/> <Caret Line="506" Column="19" TopLine="476"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1239" Column="119" TopLine="1226"/> <Caret Line="3596" Column="37" TopLine="3565"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1248" TopLine="1226"/> <Caret Line="3603" Column="34" TopLine="3572"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1251" TopLine="1226"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1252" TopLine="1226"/> <Caret Line="506" Column="28" TopLine="476"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1255" TopLine="1226"/> <Caret Line="3596" Column="37" TopLine="3565"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1257" TopLine="1227"/> <Caret Line="3603" Column="34" TopLine="3572"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1263" TopLine="1233"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1264" TopLine="1243"/> <Caret Line="506" Column="28" TopLine="476"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1266" TopLine="1243"/> <Caret Line="3596" Column="37" TopLine="3565"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/grids.pas"/>
<Caret Line="1267" TopLine="1243"/> <Caret Line="8140" Column="15" TopLine="8109"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/grids.pas"/>
<Caret Line="1269" TopLine="1243"/> <Caret Line="8829" Column="31" TopLine="8804"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="1272" TopLine="1243"/> <Caret Line="6305" Column="5" TopLine="6296"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="1273" TopLine="1243"/> <Caret Line="926" Column="72" TopLine="907"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="1275" TopLine="1245"/> <Caret Line="6334" Column="9" TopLine="6300"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="1278" TopLine="1248"/> <Caret Line="6313" Column="38" TopLine="6300"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="1279" TopLine="1249"/> <Caret Line="6329" TopLine="6300"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/grids.pas"/>
<Caret Line="1280" TopLine="1250"/> <Caret Line="8825" TopLine="8805"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/grids.pas"/>
<Caret Line="1281" TopLine="1251"/> <Caret Line="8826" TopLine="8814"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/grids.pas"/>
<Caret Line="1283" TopLine="1253"/> <Caret Line="8827" TopLine="8814"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/grids.pas"/>
<Caret Line="1285" TopLine="1255"/> <Caret Line="8828" TopLine="8814"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/grids.pas"/>
<Caret Line="1286" TopLine="1256"/> <Caret Line="8829" TopLine="8814"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/grids.pas"/>
<Caret Line="1287" TopLine="1257"/> <Caret Line="8830" TopLine="8814"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/grids.pas"/>
<Caret Line="1289" TopLine="1259"/> <Caret Line="8835" TopLine="8814"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="1293" TopLine="1263"/> <Caret Line="5473" TopLine="5457"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1294" TopLine="1264"/> <Caret Line="506" Column="15" TopLine="488"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1296" TopLine="1266"/> <Caret Line="3598" Column="3" TopLine="3595"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1299" TopLine="1269"/> <Caret Line="386" Column="15" TopLine="368"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1302" TopLine="1272"/> <Caret Line="2019" Column="3" TopLine="2014"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="../../../../../lcl/include/canvas.inc"/> <Filename Value="../../../../../lcl/dbgrids.pas"/>
<Caret Line="1303" TopLine="1273"/> <Caret Line="391" Column="15" TopLine="373"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectSession> </ProjectSession>
<Debugging>
<BreakPoints Count="1">
<Item1>
<Kind Value="bpkSource"/>
<WatchScope Value="wpsLocal"/>
<WatchKind Value="wpkWrite"/>
<Source Value="../../../rxdb/rxdbgrid.pas"/>
<Line Value="6328"/>
</Item1>
</BreakPoints>
</Debugging>
</CONFIG> </CONFIG>

View File

@ -50,9 +50,11 @@ var
i: Integer; i: Integer;
begin begin
rxData.Open; rxData.Open;
rxData.DisableControls;
for i:=1 to 30 do for i:=1 to 30 do
rxData.AppendRecord([i, Date - i, 'Line '+IntToStr(i)]); rxData.AppendRecord([i, Date - i, 'Line '+IntToStr(i)]);
rxData.First; rxData.First;
rxData.EnableControls;
RxDBGrid1.OnMergeCells:=@RxDBGridMergeCellsEvent; RxDBGrid1.OnMergeCells:=@RxDBGridMergeCellsEvent;
end; end;

View File

@ -920,6 +920,11 @@ type
procedure CalcCellExtent(ACol, ARow: Integer; var ARect: TRect); procedure CalcCellExtent(ACol, ARow: Integer; var ARect: TRect);
function IsMerged(ACol{, ARow}: Integer): Boolean; overload; function IsMerged(ACol{, ARow}: Integer): Boolean; overload;
function IsMerged(ACol{, ARow}: Integer; out ALeft, {ATop, }ARight{, ABottom}: Integer): Boolean; overload; function IsMerged(ACol{, ARow}: Integer; out ALeft, {ATop, }ARight{, ABottom}: Integer): Boolean; overload;
function GetEditMask(aCol, aRow: Longint): string; override;
function GetEditText(aCol, aRow: Longint): string; override;
function GetDefaultEditor(Column: Integer): TWinControl; override;
procedure PrepareCanvas(aCol, aRow: Integer; AState: TGridDrawState); override; procedure PrepareCanvas(aCol, aRow: Integer; AState: TGridDrawState); override;
property Editor; property Editor;
@ -5172,9 +5177,13 @@ end;
procedure TRxDBGrid.SetEditText(ACol, ARow: longint; const Value: string); procedure TRxDBGrid.SetEditText(ACol, ARow: longint; const Value: string);
var var
C: TRxColumn; C: TRxColumn;
j: integer; j, L, R: integer;
S: string; S: string;
begin begin
if (rdgColSpanning in OptionsRx) then
if IsMerged(aCol, L, R) then
aCol:=L;
C := ColumnFromGridColumn(aCol) as TRxColumn; C := ColumnFromGridColumn(aCol) as TRxColumn;
S := Value; S := Value;
if Assigned(C) and (C.KeyList.Count > 0) and (C.PickList.Count > 0) then if Assigned(C) and (C.KeyList.Count > 0) and (C.PickList.Count > 0) then
@ -6290,6 +6299,36 @@ begin
dec(FMergeLock); dec(FMergeLock);
end; end;
function TRxDBGrid.GetEditMask(aCol, aRow: Longint): string;
var
L, R: Integer;
begin
if (rdgColSpanning in OptionsRx) then
if IsMerged(aCol, L, R) then
aCol:=L;
Result:=inherited GetEditMask(aCol, aRow);
end;
function TRxDBGrid.GetEditText(aCol, aRow: Longint): string;
var
R, L: Integer;
begin
if (rdgColSpanning in OptionsRx) then
if IsMerged(aCol, L, R) then
aCol:=L;
Result:=inherited GetEditText(aCol, aRow);
end;
function TRxDBGrid.GetDefaultEditor(Column: Integer): TWinControl;
var
L, R: Integer;
begin
if (rdgColSpanning in OptionsRx) then
if IsMerged(Column, L, R) then
Column:=L;
Result:=inherited GetDefaultEditor(Column);
end;
procedure TRxDBGrid.PrepareCanvas(aCol, aRow: Integer; AState: TGridDrawState); procedure TRxDBGrid.PrepareCanvas(aCol, aRow: Integer; AState: TGridDrawState);
var var
L, R, RR: Integer; L, R, RR: Integer;