就是在dbgrid 中 按shift 键 选中所有在单击的第一条和单击的最后一条记录中间的所有记录,应该怎么写啊 ?

解决方案 »

  1.   

    属性 options -->dgmultiselect 设为true
      

  2.   

    建议你用EhLib中的DBGrid吧,自动支持这一功能的!
      

  3.   

    楼上的不能解决问题,Delphi自带的DBGrid不支持这个功能,属性 options -->dgmultiselect 设为true后只能按Ctrl键来多选!但是EhLib可以的,我试过了!
      

  4.   

    procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      FKeyShift := ssShift in Shift;
    end;procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      FKeyShift := False;
    end;procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
    begin
      FOldNo := FRecNo;
      FRecNo := TDataSource(Sender).DataSet.RecNo;
      if FKeyShift then DBGrid1.SelectedRows.CurrentRowSelected := True;
      FKeyShift := False;
    end;procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      I: Integer;
    begin
      if FKeyShift then begin
        if -1 in [FOldNo, FRecNo] then Exit;
        if FRecNo > FOldNo then
          for I := FRecNo downto FOldNo do begin
            TDBGrid(Sender).DataSource.DataSet.RecNo := I;
            TDBGrid(Sender).SelectedRows.CurrentRowSelected := True;
          end
        else
          for I := FRecNo to FOldNo do begin
            TDBGrid(Sender).DataSource.DataSet.RecNo := I;
            TDBGrid(Sender).SelectedRows.CurrentRowSelected := True;
          end;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      FRecNo := -1;
    end;
    要用ADO
      

  5.   

    没有ehlib 啊 能发一份给我吗 ? 100 分全给你了
      

  6.   

    private
        { Private declarations }
        FKeyShift: Boolean;
        FRecNo: Integer;
        FOldNo: Integer;
      

  7.   

    谁能发一个ehlib 给我(急啊)    Email : [email protected]
      

  8.   

    我这里有dbgrideh,你给我邮箱或者qq号