Um in einem DBGrid mehrere Datensätze wie z.B. in Excel durch betätigen der Bild-Tasten bei gedrückter Shift-Taste zu markieren, muss man folgenden Quellcode in den OnKeyDown-Event des DBGrid einfügen:
Delphi-Quellcode:
procedure TMyForm.GrdMasterKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key in [VK_PRIOR, VK_NEXT])
and (dgMultiSelect in TDBGrid(Sender).Options) then
FirstPos := TDBGrid(Sender).DataSource.DataSet.RecNo
else
FirstPos := 0;
end;
anschließend muss noch folgender Quellcode in den OnKeyUp-Event des DBGrids eingefügt werden:
Delphi-Quellcode:
procedure TChildForm.GrdMasterKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
LastPos: Integer;
TempBookmark: Integer;
Grd: TDBGrid;
begin
Grd := TDBGrid(Sender);
if (Shift = [ssShift])
and (Key in [VK_PRIOR, VK_NEXT])
and (dgMultiSelect in Grd.Options)
and (FirstPos > 0) then
begin
LastPos := Grd.DataSource.DataSet.RecNo;
with Grd.DataSource.DataSet do
begin
DisableControls;
Grd.DataSource.DataSet.MoveBy(FirstPos - LastPos);
repeat
Grd.SelectedRows.CurrentRowSelected := True;
if (FirstPos < LastPos) then
Next
else
Prior;
TempBookmark := Grd.DataSource.DataSet.RecNo;
until (TempBookmark = LastPos);
EnableControls;
end;
end;
end;
Zu erwähnen sei noch, das FirstPos eine globale Variable sein muss.