- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在执行查询并在 dbgrid 中显示返回的数据。
我想突出显示符合搜索条件的项目。像这样的东西:
搜索方式:“测试”
在 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;
结果:
编辑:
关于delphi - 突出显示 DBGrid 中的特定文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38873729/
如何使所有网格在我的表单上看起来都相同?我想实现必须应用于项目的所有网格的备用行颜色。是否可以不为每个网格添加相同的 DrawColumnCell 事件代码?我想避免为每个网格添加相同的代码。我的项目
好的,我正在使用 DBGrid 来显示数据库中的数据。 数据库包含一个包含 11 列的表。第 4 列称为客户名称,包含客户的姓名。 我想要一个搜索框(类似于谷歌搜索栏),我可以在其中写下我想要的客户名
我从 TDBGrid 继承了一个类,我希望它能够记住特定用户对列顺序和列宽所做的任何修改。而且,我希望能够完全在网格本身内做到这一点。我不想将代码附加到 TDataSet,因为这个网格在我的应用程序中
好吧,我对 DBGrid 垂直滚动有疑问。当我用鼠标滚轮或垂直滚动条垂直滚动它时,它会上下移动选定的行。我想让它滚动的不是选定的行,而是整个网格。就像它在 Microsoft Excel 中工作一
我遇到了 Delphi 的 DBGrid 最奇怪的问题。 我注意到 有时 ,我的意思是,当我将行加载到 delphi DBGrid 中时(它是完全随机的),网格不显示数据。 相反,它显示了几个压缩行,
我有一个带有查询、数据集、可编辑 dbgrid 和 updatesql 组件的表单。当我需要保存在 dbgrid 中所做的更改时,我调用此过程: procedure TEditCardDetailFo
我在 BDS 2006 中使用了 DBGrid。它有 6 列,在运行时填充。在mysql数据库中,一列的数据类型是char(150)。因为从数据库检索到 dbgrid 时,它会占用长度,并且列会随着滚
我有一个条目网格,用户可以单击以对流程进行多项选择。根据第一个选定行的值,某些条目将无效。 我知道DBGrid.SelectedRows.CurrentRowSelected,但我找不到合适的地方来检
我得到了: ADOTable1(代码人为整数,姓名人为字符串) DataSource1(日期集是ADOTable1) DBGrid1(连接到DataSource1,Options-dgRowSelec
我想扩展 DbGrid 功能以在奇数行和偶数行上添加颜色。所以我写了这个 procedure TGridx.DrawCell(ACol, ARow: Longint; ARect: TRect; AS
我正在使用 Delphi 10.2.3 并且想要更改 DBgrid 的背景颜色。例如,我有一个文本列和一个整数列。根据文本,如果值非零,我想更改整数单元格(同一行中)的颜色。 我得到了一些想法 how
我需要获取 Delphi 中 DBGrid 的选定单元格的值。 我不知道该怎么做。我尝试了 dbGrid 的 OnMouseMove pt : TGridCoord; ... pt:=dbGrid.M
{*----------------------------------------------------------------------------- Unit Name: TopFormU
我的问题是如何在 Delphi 7 中的 dbgrid 中设置一个带有复选框项目的列。 提前致谢。 最佳答案 经我测试,最简单、最完整的方法如下: 在单元的私有(private)部分中,声明一个用于保
我正在制作一个保存订单和打印发票的应用程序。我的表单上有一些标签、编辑、tmemos、按钮、数据源、adotable、弹出菜单和 dbgrid。 当我构建程序并向下滚动 dbgrid 滚动条时,它会在
我有一个 TDBGrid。它有效,但显示的列非常大。 如何设置“自动修复列宽”? 最佳答案 所需的列宽取决于网格 Canvas 的设置和每个字段的显示文本的最大长度。 procedure FitGri
我需要格式化 DBGrid 中的值,以某种格式显示,例如 '#,##0.00'。知道如何做到这一点吗? 问候,彼得 最佳答案 您可以使用DisplayFormat要格式化的字段的属性。 检查此示例 T
是否可以在 Delphi (xe) 中自动换行 DBgrid 单元格(高度)?我有一个 dbgrid,其中包含具有固定列宽的多列,并且某些列最多有 100 个字符,我需要它们在不更改列宽的情况下适合适
有没有办法隐藏 DBGrid 上的标题行和指示器列?我找不到任何此类属性(property)。我可以通过编程来完成吗? 最佳答案 关闭(设置为 False)对象检查器中的 Options.dgTitl
使用 TImage 列表中的图像在 DBGrid 中的数据单元格上绘制字形时出现问题: 我将“复选标记”的 bmp 图像代替特定数据单元格中的文本“完成”。它有效,但细胞中未被图像覆盖的部分始终存在黑
我是一名优秀的程序员,十分优秀!