永发信息网

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

答案:2  悬赏:30  手机版
解决时间 2021-01-29 03:50
因为某种需要,只能用stringgrid,用于显示数据库中的数据,当某单元格的值在数据库中存在时候如何更改此单元格所在行的字体颜色?
最佳答案
由于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;
全部回答
完整的程序源码:
您拷贝就可以运行:

unit unit1;

interface

uses
 windows, messages, sysutils, variants, classes, graphics, controls, forms,
 dialogs, grids;

type
 tform1 = class(tform)
 stringgrid1: tstringgrid;
 procedure stringgrid1drawcell(sender: tobject; acol, arow: integer;
 rect: trect; state: tgriddrawstate);
 procedure formcreate(sender: tobject);
 private
 { private declarations }
 public
 { public declarations }
 end;

var
 form1: tform1;

implementation

{$r *.dfm}

procedure tform1.stringgrid1drawcell(sender: tobject; acol, arow: integer;
 rect: trect; state: tgriddrawstate);
begin
 with stringgrid1 do
 if cells[acol,arow] = '1233' then
 begin
 canvas.font.color := clred; //字体颜色为红的
 canvas.brush.color:=clmoneygreen; //背景为 美元绿色
 canvas.fillrect(rect);
 canvas.textout(rect.left+2,rect.top+2,cells[acol,arow]);
 end;
end;

procedure tform1.formcreate(sender: tobject);
begin
with stringgrid1 do
begin
rowcount :=5;//设置5行
colcount :=5;//设置5列
cells[1,2]:='1233';
cells[2,2]:='1233';
cells[2,4]:='1233';
end;
end;

end.
-----------------------------------------------------
关键是drawcell事件,在这个事件中可以设字体名、大小、颜色、字体装饰、cell背景画布等
---------------------------------------------------
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎样写商业计划书最好?
桐庐县国土局瑶琳管理所怎么去啊,我要去那办
衣能净干洗店(民族路得新诊所旁)地址在哪,我
临安市昌北国土中心所地址在哪,我要去那里办
电视剧900重案追凶演员表
桐庐县国土资源执法监察中队怎么去啊,我要去
跽坐的意思是什么啊?知道的请说下!
有一个圆环,外圆半径是6厘米,内圆直径是8厘
演员们经常说的一场戏,一百场戏是什么意思
窃读记是按什么顺序写的‘
杭州市国土资源局塘栖管理所地址在什么地方,
维曼丝洗衣连锁店(高桥镇附近维曼丝洗衣连锁
冰箱变频与风冷有什么不同
求磨具少女无修全季百度云资源
【霍尔木兹海峡的表面海水流向是什么样的】
推荐资讯
软件生命周期是指( )。
永丰街建设小区对面呼吸作文院内!地址好找么
我是歌手第2季邓紫棋唱龙卷风是哪1期
苏宁易购地址在什么地方,想过去办事
螃蟹能和洋葱一起吃吗
淀园的意思是什么啊?知道的请说下!
在三角形ABC中.若sinA平方+sinB平方—sinAsin
泰江宾馆地址在哪,我要去那里办事
包头市2017年瓦工铺地砖墙砖多少钱怎么计算
请问黑色轿车怎样才可以保持干净?
阳光钻石ktv(马山口店)地址在什么地方,我要
孙子涵《致命的甜蜜》歌词
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?