CXGRid实现拖动鼠标多选

news/2023/12/3 21:57:04

要实现在CXGrid中拖动鼠标多选,您可以按住鼠标左键并拖动鼠标,直到选择了要选择的单元格或行。您可以在拖动过程中按住Shift键来限制选择范围。拖动选择的单元格或行时,您可以按住Ctrl键来添加或删除单元格或行的选择。当您完成选择时,松开鼠标左键即可完成多选。

如果您希望在拖动鼠标多选时显示选择矩形,则可以使用以下代码:

1. 在GridOptions中设置goDrawSelections为True:

  cxGrid1DBTableView1.OptionsSelection.GridOptions := [goDrawSelections];

2. 在OnMouseDown事件中设置开始选择的单元格或行:

  if AButton = mbLeft then
  begin
    StartCol := cxGrid1DBTableView1.GetColumnAtPos(X, Y);
    StartRow := cxGrid1DBTableView1.GetRowAt(X, Y);
  end;

3. 在OnMouseMove事件中实现选择矩形的绘制:

  if AButton = mbLeft then
  begin
    // 绘制选择矩形
    cxGrid1DBTableView1.Canvas.Pen.Color := clHighlight;
    cxGrid1DBTableView1.Canvas.Pen.Style := psDot;
    cxGrid1DBTableView1.Canvas.Brush.Style := bsClear;
    cxGrid1DBTableView1.Canvas.Rectangle(SelectionRect);

    // 更新选择矩形
    SelectionRect := Rect(StartCol.VisibleIndex, StartRow.VisibleIndex,
      cxGrid1DBTableView1.GetColumnAtPos(X, Y).VisibleIndex + 1,
      cxGrid1DBTableView1.GetRowAt(X, Y).VisibleIndex + 1);

    // 绘制新的选择矩形
    cxGrid1DBTableView1.Canvas.Pen.Color := clHighlight;
    cxGrid1DBTableView1.Canvas.Pen.Style := psDot;
    cxGrid1DBTableView1.Canvas.Brush.Style := bsClear;
    cxGrid1DBTableView1.Canvas.Rectangle(SelectionRect);
  end;

4. 在OnMouseUp事件中完成多选:

  if AButton = mbLeft then
  begin
    // 完成选择
    cxGrid1DBTableView1.Controller.SelectCells(StartCol, StartRow,
      cxGrid1DBTableView1.GetColumnAtPos(X, Y), cxGrid1DBTableView1.GetRowAt(X, Y));
  end;

以上代码仅供参考,您可以根据实际需求进行修改。


https://www.jiucaihua.cn/news/show-4628157.html

相关文章

GTK官方教程

前言: 让你在开发中爱不释手的 GT 包。关注GSLS官网,查看更多源码 ヾ(✿゚▽゚)ノ工具包。 所有文章 小编尽量让读者可以 直接 读懂 与 完全 复制粘贴,其中复杂或较多 的源码 会有 源码 并 贴上 github 网址。 GT 类 里面…

【JUC基础】14. ThreadLocal

目录 1、前言 2、什么是ThreadLocal 3、ThreadLocal作用 4、ThradLocal基本使用 4.1、创建和初始化 4.2、存储和获取线程变量 4.3、清理和释放线程变量 4.4、小结 4.5、示例代码 5、ThreadLocal原理 5.1、set() 5.2、get() 5.3、变量清理 5.4、ThreadLocalMap 6、…

springboot+vue+elementui计算机专业课程选课管理系统vue

本系统的主要任务就是负责对学生选课。主要用户为老师、学生,其中,学生可对自己的信息进行查询,可以进行选课,也可以进行删除已选课程,教师可对学生和课程的信息进行查询,教师拥有所有的权限,可以添加删除学生信息。系统提供界面,操作简单。 为实现这些功能,系统一个…

弄清楚Node.js的功能特性、运行时、组成和发展趋势分析以及与JavaScript的区别

目录 Node.js介绍 Node.js的作用和功能特性 Node.js应用场景 运行时是什么 Node.js的组成 1. V8引擎 2. 本地(核心)模块 3. 标准库 Node.js的发展趋势 总结 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,使JavaScript可以…

图论试题2021

25 A:最大度是7,大于了顶点数6,故不是简单图的度序列。 C:树的度序列至少要有两个度为1的顶点 D:只要度数为奇数的个数有偶数个,就是度序列。 A:每棵树的中心由一个点或两个相邻点组成 B&…

Vue+springboot舞蹈基础课程视频学习分享平台的实现和开发

基于java语言设计并实现了舞蹈基础数据平台。该系统基于B/S即所谓浏览器/服务器模式,应用Springboot框架,选择MySQL作为后台数据库。系统主要包括首页、个人中心、用户管理、舞蹈类型管理、舞蹈视频管理、用户留言、管理员管理、系统管理等功能模块。 重…

平面图学习

空调管道的设计:某景区有6个景点,位置分布如下图。 分析者认为:(1) A1与A4, (2) A2与A5, (3) A3与A6间人流较少,其它景点之间人流量大,必须投资铺设空调管道,但要求空调管道间不能交…

2.项目中的文件

项目的路径是这样的 目录 1 pages 1.1 json 1.2 wxml 1.3 wxss 1.4 js 2 utils 3 .eslintrc.js 4 app.js 5 app.json 6 app.wxss 7 project.config.json 8 project.private.config.json 9 sitemap.json 1 pages pages 用来存放所有小程序的页面&am…

随机数发生器设计(三)

随机数发生器设计(三)- 熵估计和健康测试 熵估计健康测试 熵估计 考虑都熵源的多样性,建立一个通用的熵估计模型比较困难。本文采用nist.sp.800-90B推荐的Markov评估。详见 https://doi.org/10.6028/NIST.SP.800-90B。 执行Markov评估时&am…

Netty之EventLoop 解读

是什么 EventLoop (事件循环对象)本质是一个单线程执行器(同时维护了一个 Selector),里面有 run 方法处理 Channel 上源源不断的 io 事件。 它的继承关系比较复杂 一条线是继承自 j.u.c.ScheduledExecutorService 因…