• DELPHI 解决DBGrid SHIFT键多选问题


    在实际项目中,偶然遇到需要按下SHIFT键,在DBGrid中进行多选的情况,测试了几种方法,最终确定了一个比较好的解决方法,总结如下:

    procedure TTestFrame.TestDBGridMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin //实现 Shift+鼠标左键单击 多选
      if Button = mbLeft then
      begin
        if not FblSelect then
        begin
          FBookMark :=  TDBGrid(Sender).DataSource.DataSet.GetBookMark;
          FOldNo :=  TDBGrid(Sender).DataSource.DataSet.RecNo;
          FblSelect := True;
          Exit;
        end
        else
        begin
          if ssShift in Shift then
          begin
            FCurrNo :=  TDBGrid(Sender).DataSource.DataSet.RecNo;
             TDBGrid(Sender).DataSource.DataSet.DisableControls;
             TDBGrid(Sender).DataSource.DataSet.GotoBookmark(FBookMark);
             TDBGrid(Sender).SelectedRows.CurrentRowSelected := True;
            if FCurrNo > FOldNo then
            begin
              while FCurrNo >  TDBGrid(Sender).DataSource.DataSet.RecNo do
              begin
                TDBGrid(Sender).SelectedRows.CurrentRowSelected := True;
                 TDBGrid(Sender).DataSource.DataSet.Next;
              end;
            end
            else
            begin
              while FCurrNo <  TDBGrid(Sender).DataSource.DataSet.RecNo do
              begin
                TDBGrid(Sender).SelectedRows.CurrentRowSelected := True;
                 TDBGrid(Sender).DataSource.DataSet.Prior;
              end;
            end;
             TDBGrid(Sender).DataSource.DataSet.EnableControls;
             TDBGrid(Sender).DataSource.DataSet.FreeBookmark(FBookMark);
            FblSelect := False;
            FCurrNo := 0;
            FOldNo := 0;
            TDBGrid(Sender).Invalidate;
          end
          else
          begin
            FBookMark := TDBGrid(Sender).DataSource.DataSet.GetBookMark;
            FOldNo := TDBGrid(Sender).DataSource.DataSet.RecNo;
            FblSelect := True;
            Exit;
          end;
        end;
      end;
    end;
  • 相关阅读:
    C/C++筛选法算素数
    JAVAFX-5事件总结
    JAVAFX-5 开发应用
    JAVAFX-4 开发应用
    JAVAFX-3 开发应用
    JAVAFX-1 开发应用
    JAVAFX-2 开发应用
    Swing 100行画图示例
    Java的Json解析包FastJson使用
    杨辉三角
  • 原文地址:https://www.cnblogs.com/jijm123/p/10534667.html
Copyright © 2020-2023  润新知