gpt4 book ai didi

delphi - 突出显示 DBGrid 中的特定文本

转载 作者:行者123 更新时间:2023-12-03 15:47:45 25 4
gpt4 key购买 nike

我正在执行查询并在 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;

结果:

enter image description here

编辑:

A litle demo

关于delphi - 突出显示 DBGrid 中的特定文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38873729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com