fpspreadsheet: Improved keyboard navigation in case of merged blocks. Requires Laz-trunk r58711 or later.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6606 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2018-08-16 13:49:34 +00:00
parent f5e6986eb7
commit 4f1ce39ac9

View File

@ -26,7 +26,7 @@ unit fpspreadsheetgrid;
interface interface
uses uses
Classes, SysUtils, LMessages, LResources, Variants, Classes, SysUtils, LMessages, LResources, LCLVersion, Variants,
Forms, Controls, Graphics, Dialogs, Grids, StdCtrls, ExtCtrls, Forms, Controls, Graphics, Dialogs, Grids, StdCtrls, ExtCtrls,
fpstypes, fpspreadsheet, fpspreadsheetctrls; fpstypes, fpspreadsheet, fpspreadsheetctrls;
@ -311,6 +311,9 @@ type
const ACellRect: TGridRect): Boolean; const ACellRect: TGridRect): Boolean;
function MouseOnHeader(X, Y: Integer): Boolean; function MouseOnHeader(X, Y: Integer): Boolean;
procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override;
{$IF LCL_FullVersion >= 1090000}
function MoveNextSelectable(Relative: Boolean; DCol, DRow: Integer): Boolean; override;
{$ENDIF}
procedure MoveSelection; override; procedure MoveSelection; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure PrepareCanvasFont; procedure PrepareCanvasFont;
@ -5150,6 +5153,28 @@ begin
Refresh; Refresh;
end; end;
{$IF LCL_FullVersion >= 1090000}
function TsCustomWorksheetGrid.MoveNextSelectable(Relative: Boolean; DCol, DRow: Integer
): Boolean;
var
cell: PCell;
r1, r2, c1, c2: Cardinal;
begin
if Relative then begin
cell := Worksheet.FindCell(GetWorksheetRow(Row), GetWorksheetCol(Col));
if Worksheet.IsMerged(cell) then begin
Worksheet.FindMergedRange(cell, r1,c1,r2,c2);
// we are only interested on relative movement (basically by keyboard)
if DCol>0 then DCol := GetGridCol(c2) - Col + 1 else
if DCol<0 then DCol := GetGridCol(c1) - Col - 1 else
if DRow>0 then DRow := GetGridRow(r2) - Row + 1 else
if DRow<0 then DRow := GetGridRow(r1) - Row - 1;
end;
end;
Result := inherited MoveNextSelectable(Relative, DCol, DRow);
end;
{$ENDIF}
{@@ ---------------------------------------------------------------------------- {@@ ----------------------------------------------------------------------------
Creates a new empty workbook with the specified number of columns and rows. Creates a new empty workbook with the specified number of columns and rows.