在实际项目中,偶然遇到需要按下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 := ;
FOldNo := ;
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;

最新文章

  1. 奇异值分解(SVD)原理与在降维中的应用
  2. 单点登录SSO
  3. eclipse各版本代号
  4. js 定位到某个锚点
  5. tomcat 下虚拟机部署导致应用filter失效的问题
  6. go网络编程示例,客户端,服务器端
  7. Android导入项目时出现红色感叹号
  8. python计算md5值
  9. highcharts分段显示不同颜色
  10. Spring Boot学习总结四
  11. linuix没有网络
  12. Python魔法方法(magic method)细解几个常用魔法方法(上)
  13. CSS3之box-sizing属性
  14. Python基础05_str_补充
  15. WinForm版图像编辑小程序(实现图像拖动、缩放、旋转、抠图)
  16. Systemed systemctl 创建服务 详解
  17. 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache
  18. cumtoj 一起来选课
  19. vue-loader v15、vue-loader v14及之前版本,配置css modules的区别
  20. 8个开发必备的PHP功能--转(柒捌玖零)

热门文章

  1. python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据
  2. curl NSS error -8179 (SEC_ERROR_UNKNOWN_ISSUER)
  3. odoo 学习
  4. CF293B Distinct Paths 搜索
  5. Luogu4338 ZJOI2018 历史 LCT、贪心
  6. Luogu P3327 [SDOI2015]约数个数和
  7. 【php增删改查实例】第十九节 - session的使用: 让服务器知道你是谁?
  8. java基础(个人学习笔记) A
  9. @Vue/Cli 3 关于 render 空的处理
  10. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(七)一次线上Mysql数据库崩溃事故的记录