zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    vue组件基本结构及各个生命周期
    vue项目目录结构详解
    http请求报文格式和响应报文格式
    H5中对history栈的操作
    原生js实现元素类名的判存、添加和移除
    Content-type解析
    IntelliJ Idea 常用快捷键列表
    深入ES6中的class类
    v-model和 .sync
    作用域插槽
  • 原文地址:https://www.cnblogs.com/jijm123/p/9684326.html
Copyright © 2011-2022 走看看