Einzelnen Beitrag anzeigen

Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#1

Markieren mit Shift + Bild-Tasten im DBGrid

  Alt 22. Feb 2008, 08:22
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.
  Mit Zitat antworten Zitat