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;
  • 相关阅读:
    %
    【收藏】Javascript调用后台代码的方法
    C++Builder2010中配置OpenCV2.2
    【收藏】Visual studio 2008 && 2010 快捷键大全
    队列的练习
    哈希表
    poj 3750 链表
    C/C++内存存储 mark在此
    二叉树,深搜,广搜
    链表的练习
  • 原文地址:https://www.cnblogs.com/jijm123/p/10534667.html
Copyright © 2011-2022 走看看