mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-10-24 15:12:23 +02:00
grids, fixed shift-TAB browsing, and TdbGrid TAB issue #7348
git-svn-id: trunk@10320 -
This commit is contained in:
parent
a7b3bda7c7
commit
90251b1bdc
@ -1748,7 +1748,6 @@ end;
|
|||||||
procedure TCustomDBGrid.KeyDown(var Key: Word; Shift: TShiftState);
|
procedure TCustomDBGrid.KeyDown(var Key: Word; Shift: TShiftState);
|
||||||
var
|
var
|
||||||
DeltaCol,DeltaRow: Integer;
|
DeltaCol,DeltaRow: Integer;
|
||||||
WasCancelled: boolean;
|
|
||||||
|
|
||||||
procedure DoOnKeyDown;
|
procedure DoOnKeyDown;
|
||||||
begin
|
begin
|
||||||
@ -1801,24 +1800,26 @@ var
|
|||||||
if InsertCancelable then
|
if InsertCancelable then
|
||||||
begin
|
begin
|
||||||
if IsEOF then
|
if IsEOF then
|
||||||
//exit
|
result:=true
|
||||||
else
|
else begin
|
||||||
doCancel;
|
doCancel;
|
||||||
result := true;
|
result := false;
|
||||||
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
|
result:=false;
|
||||||
doMoveBySmall(1);
|
doMoveBySmall(1);
|
||||||
if GridCanModify and FDataLink.EOF then
|
if GridCanModify and FDataLink.EOF then begin
|
||||||
doAppend;
|
doAppend;
|
||||||
result := false;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
function DoVKUP: boolean;
|
function DoVKUP: boolean;
|
||||||
begin
|
begin
|
||||||
Result := InsertCancelable and IsEOF;
|
if InsertCancelable and IsEOF then
|
||||||
if Result then
|
|
||||||
doCancel
|
doCancel
|
||||||
else
|
else
|
||||||
doMoveBySmall(-1);
|
doMoveBySmall(-1);
|
||||||
|
result := FDatalink.DataSet.BOF;
|
||||||
end;
|
end;
|
||||||
begin
|
begin
|
||||||
{$IfDef dbgGrid}DebugLn('DBGrid.KeyDown INIT Key= ',IntToStr(Key));{$Endif}
|
{$IfDef dbgGrid}DebugLn('DBGrid.KeyDown INIT Key= ',IntToStr(Key));{$Endif}
|
||||||
@ -1832,15 +1833,16 @@ begin
|
|||||||
|
|
||||||
GetDeltaMoveNext(ssShift in Shift, DeltaCol, DeltaRow);
|
GetDeltaMoveNext(ssShift in Shift, DeltaCol, DeltaRow);
|
||||||
|
|
||||||
if DeltaRow > 0 then
|
if DeltaRow > 0 then begin
|
||||||
WasCancelled := doVkDown
|
if doVKDown then
|
||||||
else
|
//DeltaCol:=0; // tochk: strict? already in EOF, don't change column
|
||||||
if DeltaRow < 0 then
|
end else
|
||||||
WasCancelled := doVKUp
|
if DeltaRow < 0 then begin
|
||||||
else
|
if doVKUP then
|
||||||
WasCancelled := false;
|
//DeltaCol:=0; // tochk: strict? already in BOF, don't change column
|
||||||
|
end;
|
||||||
|
|
||||||
if not WasCancelled and (DeltaCol<>0) then
|
if (DeltaCol<>0) then
|
||||||
Col := Col + DeltaCol;
|
Col := Col + DeltaCol;
|
||||||
|
|
||||||
Key := 0;
|
Key := 0;
|
||||||
|
|||||||
@ -118,7 +118,8 @@ type
|
|||||||
TGridZone = (gzNormal, gzFixedCols, gzFixedRows, gzFixedCells, gzInvalid);
|
TGridZone = (gzNormal, gzFixedCols, gzFixedRows, gzFixedCells, gzInvalid);
|
||||||
|
|
||||||
TUpdateOption = (uoNone, uoQuick, uoFull);
|
TUpdateOption = (uoNone, uoQuick, uoFull);
|
||||||
TAutoAdvance = (aaNone,aaDown,aaRight,aaLeft, aaRightDown, aaLeftDown);
|
TAutoAdvance = (aaNone,aaDown,aaRight,aaLeft, aaRightDown, aaLeftDown,
|
||||||
|
aaRightUp, aaLeftUp);
|
||||||
|
|
||||||
TItemType = (itNormal,itCell,itColumn,itRow,itFixed,itFixedColumn,itFixedRow,itSelected);
|
TItemType = (itNormal,itCell,itColumn,itRow,itFixed,itFixedColumn,itFixedRow,itSelected);
|
||||||
|
|
||||||
@ -5682,17 +5683,31 @@ end;
|
|||||||
function TCustomGrid.GetDeltaMoveNext(const Inverse: boolean;
|
function TCustomGrid.GetDeltaMoveNext(const Inverse: boolean;
|
||||||
var ACol, ARow: Integer): boolean;
|
var ACol, ARow: Integer): boolean;
|
||||||
var
|
var
|
||||||
aa: TAutoAdvance;
|
|
||||||
DeltaCol,DeltaRow: Integer;
|
DeltaCol,DeltaRow: Integer;
|
||||||
|
|
||||||
function CalcNextStep: boolean;
|
function CalcNextStep: boolean;
|
||||||
var
|
var
|
||||||
|
aa: TAutoAdvance;
|
||||||
cCol,cRow: Integer;
|
cCol,cRow: Integer;
|
||||||
begin
|
begin
|
||||||
|
|
||||||
DeltaCol := 0;
|
DeltaCol := 0;
|
||||||
DeltaRow := 0;
|
DeltaRow := 0;
|
||||||
|
|
||||||
|
// invert direction if necessary
|
||||||
|
//
|
||||||
|
aa := FAutoAdvance;
|
||||||
|
if Inverse then
|
||||||
|
case FAutoAdvance of
|
||||||
|
aaRight: aa := aaLeft;
|
||||||
|
aaLeft: aa := aaRight;
|
||||||
|
aaRightDown: aa := aaLeftUp;
|
||||||
|
aaLeftDown: aa := aaRightUp;
|
||||||
|
aaRightUP: aa := aaLeftDown;
|
||||||
|
aaLeftUP: aa := aaRightDown;
|
||||||
|
end;
|
||||||
|
|
||||||
case aa of
|
case aa of
|
||||||
aaRight:
|
aaRight:
|
||||||
DeltaCol := 1;
|
DeltaCol := 1;
|
||||||
@ -5710,7 +5725,23 @@ var
|
|||||||
DeltaCol := FixedCols-ACol;
|
DeltaCol := FixedCols-ACol;
|
||||||
DeltaRow := 1;
|
DeltaRow := 1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
aaRightUP:
|
||||||
|
if ACol<ColCount-1 then
|
||||||
|
DeltaCol := 1
|
||||||
|
else begin
|
||||||
|
DeltaCol := FixedCols-ACol;
|
||||||
|
DeltaRow := -1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
aaLeftUP:
|
||||||
|
if ACol>FixedCols then
|
||||||
|
DeltaCol := -1
|
||||||
|
else begin
|
||||||
|
DeltaCol := ColCount-1-ACol;
|
||||||
|
DeltaRow := -1;
|
||||||
|
end;
|
||||||
|
|
||||||
aaLeftDown:
|
aaLeftDown:
|
||||||
if ACol>FixedCols then
|
if ACol>FixedCols then
|
||||||
DeltaCol := -1
|
DeltaCol := -1
|
||||||
@ -5738,20 +5769,6 @@ begin
|
|||||||
if FAutoAdvance=aaNone then
|
if FAutoAdvance=aaNone then
|
||||||
exit; // quick case, no auto movement allowed
|
exit; // quick case, no auto movement allowed
|
||||||
|
|
||||||
// invert direction if necessary
|
|
||||||
//
|
|
||||||
// TODO: inverse of aaRightDown is aaLeftUP
|
|
||||||
// inverse of aaLeftDown is aaRightUP
|
|
||||||
// move this to CalcNextStep
|
|
||||||
aa := FAutoAdvance;
|
|
||||||
if Inverse then
|
|
||||||
case FAutoAdvance of
|
|
||||||
aaRight: aa := aaLeft;
|
|
||||||
aaLeft: aa := aaRight;
|
|
||||||
aaRightDown: aa := aaLeftDown;
|
|
||||||
aaLeftDown: aa := aaRightDown;
|
|
||||||
end;
|
|
||||||
|
|
||||||
// browse the grid in autoadvance order
|
// browse the grid in autoadvance order
|
||||||
while CalcNextStep do begin
|
while CalcNextStep do begin
|
||||||
ACol := ACol + DeltaCol;
|
ACol := ACol + DeltaCol;
|
||||||
@ -5767,9 +5784,9 @@ begin
|
|||||||
ACol := ACol - FCol;
|
ACol := ACol - FCol;
|
||||||
ARow := ARow - FRow;
|
ARow := ARow - FRow;
|
||||||
end else begin
|
end else begin
|
||||||
// no available next cell, return current
|
// no available next cell, return delta anyway
|
||||||
ACol := FCol;
|
ACol := DeltaCol;
|
||||||
ARow := FRow;
|
ARow := DeltaRow;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user