delphi 更改stringgrid单元格所在行的字体颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 更改stringgrid单元格所在行的字体颜色相关的知识,希望对你有一定的参考价值。

因为某种需要,只能用stringgrid,用于显示数据库中的数据,当某单元格的值在数据库中存在时候如何更改此单元格所在行的字体颜色?

参考技术A 由于TStringGrid没有并没有提供类似的方法.所以只能自己画了.
以下代码 是假定 有一个名称为 Form2 的窗体 上面放着 一个名称为 sGrid的TStringGrid:
以下代码实现了这个StringGrid的OnDrawCell事件

procedure TForm2.sGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
TheGrid: TStringGrid; CellText: string;
begin
if not (ARow = 1) then Exit; //如果不满足条件,条件由你自行确定
TheGrid := Sender as TStringGrid; //强制类型转换Sender,可以让多个StringGrid来使用这个函数

with TheGrid.Canvas do
begin
//如果单元格被中了则绘制高亮否则,则绘制指定的颜色
if gdSelected in State then
begin
Brush.Color := clHighlight; Font.Color := clHighlightText;
end
else
begin
Brush.Color := clWindow; Font.Color := clRed; //这里是你需要设置的颜色,暂时这只为红色
end;

if gdFixed in State then
begin
Brush.Color := clBtnFace;
end;

FillRect(Rect); //代替原始内容,并绘制背景

CellText := TheGrid.Rows[ARow][ACol]; //获取单元格文字
Inc(Rect.Left,2); //让文本区域左缩进2像素
//利用Windows API函数绘制文本
DrawText(Handle,PChar(CellText),Length(CellText),Rect,
DT_LEFT or DT_SINGLELINE or DT_VCENTER or DT_END_ELLIPSIS);
end;
end;本回答被提问者和网友采纳

以上是关于delphi 更改stringgrid单元格所在行的字体颜色的主要内容,如果未能解决你的问题,请参考以下文章

delphi stringGrid

delphi中如何把有规律的文本文字放入STRINGGRID中的每个单元格中

Delphi:无法打开 .bmp 文件

delphi中stringgrid如何动态增加一行。如何删除一行。

Delphi StringGrid常用属性和常用操作

Delphi StringGrid常用属性和常用操作