突出显示 DBGrid 中的特定文本

2023-11-29

我正在执行查询并在 dbgrid 中显示返回的数据。

我想突出显示符合搜索条件的项目。就像是:

搜索方式:“test"

在 DBGrid 中,返回的数据将为 .

ID     Return
1      This is a **test**
2      **Test**ing

这里的目标无疑是查询数据。但是如何在 DBGrid 中突出显示特定文本呢?

重要提示:仅应突出显示文本的特定部分。

注意:所提供的信息是为了清楚起见,并不完全符合实际情况。


此过程在 DbGrid 中突出显示“FilterText”

procedure HighlightCellText(AGrid :TDbGrid; const ARect : TRect; AColumn : TColumn;  FilterText : string; AState:TGridDrawState ;
  BkColor : TColor = clYellow; SelectedBkColor : TColor = clGray);
var
  HlRect : TRect;
  Position : Integer;
  HlText, FilterColName,DisplayText: string;
  i, offset : Integer;
begin
   DisplayText := Acolumn.Field.AsString;
   Position := Pos(AnsiLowerCase(FilterText), AnsiLowerCase(DisplayText){  AnsiLowerCase(AColumn.DisplayText)});
   if Position > 0 then
   begin
     // set highlight area
     case AColumn.Alignment of
       taLeftJustify:  HlRect.Left := ARect.Left + AGrid.Canvas.TextWidth(Copy(DisplayText, 1, Position-1)) + 1;
       taRightJustify: begin
         Offset := AGrid.Canvas.TextWidth(Copy(DisplayText, 1,1)) - 1;
         HlRect.Left :=  (ARect.Right - AGrid.Canvas.TextWidth(DisplayText)-offset) + AGrid.Canvas.TextWidth(Copy(DisplayText, 1, Position-1));
       end;
       taCenter: begin
         Offset := ((ARect.Right - ARect.Left) div 2) - (AGrid.Canvas.TextWidth(DisplayText) div 2) - (AGrid.Canvas.TextWidth(Copy(DisplayText, 1,1)) - 2);

         HlRect.Left := (ARect.Right - AGrid.Canvas.TextWidth(DisplayText)- offset) + AGrid.Canvas.TextWidth(Copy(DisplayText, 1, Position-1));
       end;
     end;

     HlRect.Top := ARect.Top + 1;
     HlRect.Right := HlRect.Left +AGrid.Canvas.TextWidth(Copy(DisplayText, Position, Length(FilterText))) + 1 ;
     HlRect.Bottom := ARect.Bottom - 1;

     //check for  limit of the cell
     if HlRect.Right > ARect.Right then
       HlRect.Right := ARect.Right;

     // setup the color and draw the rectangle in a width of the matching text
     if gdSelected in AState then
       AGrid.Canvas.Brush.Color := SelectedBkColor
     else
       AGrid.Canvas.Brush.Color := BkColor;

     AGrid.Canvas.FillRect(HlRect);

     HlText := Copy(DisplayText,Position, Length(FilterText));
     AGrid.Canvas.TextRect(HlRect,HlRect.Left + 1,HlRect.Top + 1, HlText);
   end;
end;

在 DbGrid.OnDrawColumnCell 事件中使用它:

例如突出显示文本是“ro”。

procedure TForm6.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
 begin
   HighlightCellText(TDBGrid(Sender),Rect, Column,'ro',State);
end;

结果 :

enter image description here

Edit :

一个小演示

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

突出显示 DBGrid 中的特定文本 的相关文章

  • 在 Outlook 中创建带有附件的邮件并显示它

    我想在 Outlook 中创建一封带有附件的邮件并在发送之前显示它 但我想我已经尝试了几乎在网上找到的所有示例 但没有任何运气 我可以使用 Indy 但我非常想使用 Outlook 来确保邮件正确 因为它是用于商业用途 函数的任何输入 该函
  • Delphi - 将字符串从 UTF-8 转换回来

    我在将 UTF 8 编码字符串转换回 delphi 可用的字符串时遇到问题 该应用程序是用 XE8 编写的 并部署在 Windows 和 OSX 上 该应用程序分别在 Windows 和 OSX 上使用 LimeLM API dll 和 d
  • EIdOSSLUnderlyingCryptoError 和“使用 SSL 连接时出错。错误:14094410...”

    我在 OS X 上的 Delphi 10 1 Berlin 中遇到 Indy 组件问题 我正在使用TIdHTTP使用 HTTPS 连接到 Web 服务 问题是从 OS X 客户端连接到服务器 在 OS X 上运行时 我总是遇到同样的错误 P
  • Delphi - 将物理路径(设备文件句柄)转换为虚拟路径

    我怎样才能转换像这样的路径 设备 HarddiskVolume3 Windows 进入其相应的虚拟路径 如本例中的 c Windows 我个人更喜欢原生方式 function GetHDDDevicesWithDOSPath TString
  • Delphi 的免费加密库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在为 Delphi 2010 寻找一个免费且最新的加密库 该库实现 RSA 和 AES Rijnda
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是
  • Delphi XE2 Firemonkey 示例应用程序未在 MAC 上运行

    我正在尝试在 Mac 上运行示例 Firemonkey 应用程序 但我在 Mac 中收到以下消息 dyld Library not loaded rpath libcgunwind 1 0 dylib Referenced from Use
  • 以 png 格式剪辑幻灯片 (Delphi 2010)

    I have a filmstrip of images in png format like this 我想知道如何剪辑每个图像并将这些图像放入 TImageList 控件中 并始终保留透明度 EDIT 是的 在设计时 RRUZ 提到的技
  • 使用 TStringList 的分隔符解析字符串,似乎也解析空格(Delphi)

    我有一个简单的字符串 由某个字符分隔 比如说逗号 我应该能够创建一个 TStringList 并将其分隔符设置为逗号 然后将 DelimitedText 设置为我想要解析的文本 并且应该自动解析它 问题是 当我查看输出时 它还包含空格作为分
  • DELPHI 和 WANT 或 NANT

    We use 巡航控制 net http confluence public thoughtworks org display CCNET Welcome to CruiseControl NET在 Delphi 2006 应用程序中进行持
  • FreePascal x64 上系统单元函数的汇编调用

    我有一些 Delphi 汇编代码 可以在 Win32 Win64 和 OSX 32 上编译并正常工作 XE2 但是 由于我需要它在 Linux 上工作 所以我一直在考虑编译它的 FPC 版本 到目前为止 Win32 64 Linux32 6
  • Delphi应用程序窗口z顺序和MainFormOnTaskBar属性

    我正在维护一个最初用 Delphi 7 编写并移植到 Delphi XE 的应用程序 使用 Windows 7 我们遇到了一些问题 例如模态窗口出现在主窗口下方 以及最终无法与程序交互 因为用户需要与模态窗体交互 而这是不可能的 因为它位于
  • Delphi 2010 - 从 XML 文档解码 Base64 编码图像

    我正在尝试从应用程序中的 XML 文档解码 base64 编码的 EMF 图像并将其呈现在屏幕上 但是 它似乎从未出现 如果我将 XML 文档中的数据复制 粘贴到 Notepad 中并使用Base64 Decode选项并将文件另存为 emf
  • 如何在iOS的Delphi程序中使用IPv6协议

    我尝试在我的移动程序中使用 IPv6 协议 我的服务器位于 NAT 后面的 LAN 内 在服务器上我使用IP端口3000 我已经组织了从路由器端口 45500 到服务器端口 3000 的虚拟服务器 端口转发 在服务器上 我运行 ipconf
  • Delphi中使用FindVCLWindow调用WinHelp32(WinXP Pro SP3 32bit)

    有什么问题吗 procedure TForm1 VCLHelpClick Sender TObject var Ctrl TWinControl begin Ctrl FindVCLWindow Mouse CursorPos if Ctr
  • 从 Delphi VCL 样式获取特定字形

    我想从 VCL 样式获取特定的位图 并将其设置为按钮上的图像 它实际上是帮助问号 在位图样式编辑器中是来自表单的 btnHelp 图像 要从 VCL 样式获取视觉元素 字形 您必须使用GetElementDetails和TCustomSty
  • 如何从该 JAVA 文件中提取 Delphi 类以与 Android 一起使用?

    我的Delphi XE7项目需要与FTDI FT311 Android 配件芯片 http www ftdichip com Products ICs FT311D html 他们帮助提供了一个 Android 演示 其中包括他们的 JAV
  • 阻止 IDE 自动添加使用单位

    我正在将 Lazarus 项目转移到德尔福西雅图 Lazarus 项目依赖于 40 多个单元 包括控件 并具有多种应用程序 在所有项目的使用条款中 他们使用了以下内容 uses Classes SysUtils Forms Controls
  • 从其可执行文件的路径获取服务名称

    我有一个可执行文件的路径 它是一个正在运行的服务应用程序 例如 C Program Files x86 Someapp somesvc exe 我想停止并启动它 为此我想我需要获取服务的名称 如下所示 this https stackove
  • Delphi 的内存分析工具?

    我建立了一个项目并运行它 然后在 Process Explorer 中查看它 结果发现它在启动时使用的 RAM 比我想象的要多 5 倍 现在 如果我的程序运行得太慢 我会将其连接到分析器并让它告诉我什么正在使用我的所有周期 有没有类似的工具

随机推荐

  • 重复范围可替换为“*”是什么意思?

    我在 IntelliJ IDEA 中执行了代码分析器 它显示了弱警告 重复范围可由 替换 它在我使用正则表达式模式的下面代码行显示警告 String pattern prefix length suffix 我不确定我的代码在替换后是否可以
  • ORDER BY datetime 使查询非常慢

    我正在尝试从多个表中提取数据 当我使用 ORDER BY 日期时间字段时 它会在至少 10 秒后返回结果 但如果我在没有 ORDER BY 的情况下执行相同的查询 那么它会在 2 秒内返回结果 这是我当前的查询 SELECT ph call
  • 将字节数组转换为 Stream 时 ReadTimeout 引发异常

    我收到这个错误 ReadTimeout System IO Stream ms ReadTimeout threw an exception of type System InvalidOperationException 我的代码是 by
  • R Shiny - 将鼠标悬停在图标上时弹出窗口

    我想简单地在简单的文本行后面的图标上添加一个悬停窗口 我找到了shinyBS包 它似乎使这成为可能 但它链接到shiny输出 在闪亮的应用程序的 ui 中添加类似下面的代码可以使按钮正常工作 但在本例中它们链接到单选按钮 CVI lt c
  • Swift - 如何在迭代结构对象时改变它

    我仍然不确定结构复制或引用的规则 我想在从数组迭代结构对象时改变它 例如在这种情况下我想改变背景颜色 但编译器对我大喊大叫 struct Options var backgroundColor UIColor blackColor var
  • 如何将 Rails 助手导入到功能测试中

    你好 我最近继承了一个项目 其中前开发人员不熟悉 Rails 并决定将很多重要的逻辑放入视图助手中 class ApplicationController lt ActionController Base protect from forg
  • 使用单射函数的反值

    我试图证明这个引理 lemma assumes x inv f y and inj f and x undefined shows y range f using assms try 但 Nitpick 告诉我这个说法并不正确 Trying
  • 使用 Jasper Reports API 6.13.0 和 Adopt OpenJDK 11 编译 Jasper Reports 时出错

    我们有一个实用程序 CompileJasperReports jar 用于编译文件夹中找到的所有报告 当将 JasperReports 6 7 API 与 Java 8 结合使用时 该实用程序运行良好 通话内容是 C Program Fil
  • 从 htaccess 重写规则中排除多个路径

    我创建了一个新函数 希望能够实现面包屑和更好的 URL 结构 在此之前 我有以下规则 RewriteRule pages a z0 9 action viewArticleName page identifier 1 L NC QSA B
  • 如何在发布之前邀请用户测试附加组件?

    我目前正在开发一个 Gmail 插件 希望允许我团队内部的一些用户在公开发布之前测试该插件 我正在关注文档here来自谷歌指出 您可以允许其他用户通过与其帐户共享 Apps 脚本项目 需要读取权限 来测试该加载项 然后提示用户按照上述步骤操
  • 在 github 上启用 2FA 时使用密码代替令牌

    我最近在 github 上激活了 2FA 现在我所有计算机中的所有本地存储库都停止工作 我通过 https 使用它们 看来我必须切换到 SSH 或创建个人访问令牌 我的 git 设置的配置方式是 在进行拉 推时从不要求用户名 但总是要求密码
  • 我怎样才能加速这个 Rcpp 代码?

    我在 R 中实现了一个运行时间较长的函数 我已经成功地在 R 中改进了它 但现在我想通过使用 Rcpp 包来加快它的速度 我创建了以下 Rcpp 代码 不幸的是 它的运行时间与 R 代码的运行时间大致相同 我想因此改进它 有人知道如何改进这
  • 如何将新数组插入到我的锯齿状数组中

    你好 我将非常感谢任何帮助 好吧 让我们看看 首先我声明了一个像这样的锯齿状数组和下一个代码 int n 1 m 3 p 0 int jag array new n 现在我的锯齿状数组内部将有 1 个数组 接下来必须像这样填充数组 car
  • 如何在没有显式嵌套循环的情况下生成 N 个元素的组合,每个元素的供应有限

    如果 N 是固定的 比如 N 3 那么很容易 我可以使用深度为 3 的嵌套循环 例如 from i in Enumerable Range 0 2 from j in Enumerable Range 0 2 from k in Enume
  • CodeIgniter - 检查真实结果的最佳方法

    检查模型或其他任何地方的某些方法是否正确执行的最佳方法是什么 这是个好办法吗 Model data field1 this gt input gt post field1 data field2 this gt input gt post
  • BASH 脚本根据日期复制文件,但有一个问题

    让我解释一下树结构 我有一个网络目录 我们的数据库每天会多次复制新的 txt 文件 这些文件位于基于用户名的目录中 在本地磁盘上 我具有相同的结构 基于用户名的目录 并且需要使用最新的 txt 文件进行更新 这不是同步过程 我将远程文件复制
  • 列出 C# 中的 GetRange 错误

    我正在处理列表 我的列表有 14 条记录 List
  • 用于.Net项目的文档数据库/键值存储[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 是否有与 Net 项目配合
  • 变量赋值避免无限循环

    我有两段递归代码 打算递归地打印出数组的一半 直到到达数组长度为 1 的数组 没有变量赋值的代码无限运行 而有变量赋值的代码则按预期运行 有任何线索说明为什么会出现这种情况吗 无限运行 CAREFUL function half arr h
  • 突出显示 DBGrid 中的特定文本

    我正在执行查询并在 dbgrid 中显示返回的数据 我想突出显示符合搜索条件的项目 就像是 搜索方式 test 在 DBGrid 中 返回的数据将为 ID Return 1 This is a test 2 Test ing 这里的目标无疑