如何改变单元格中部分文字的颜色?(300分)

  • 主题发起人 次时代
  • 开始时间

次时代

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用的是cxGrid控件,我想在单个单元格中改里面部分文字的颜色,该怎么做呢?
比如:单元格中的内容是:“中华人民共和国”,我想将“共和”这两个字变成红色,以达到醒目的效果。
 
好想法[:D]
 
改变行,列,单元都容易,你这样的需求,很有挑战性 。
 
帮你顶一下
 
这个其实很简单啊。
关键这个原理在于,向Cell的Canvas上画出带有颜色的字!

procedure TForm1.AdvStringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
with AdvStringGrid1 do
begin
Canvas.Font.Color := clRed;
Canvas.Brush.Style := bsSolid;
Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, '中华');
Canvas.Font.Color := clBlue;
Canvas.TextOut(Rect.Left + 20, Rect.Top + 1,'人民');
Canvas.Font.Color := clRed;
Canvas.TextOut(Rect.Left + 40, Rect.Top + 1, '共和国');
end;
end;
 
但是,cxgrid就不是这样简单了。
 
谢谢大家,在cxgrid这个该怎么办泥?cxgrid可以根据单元格的内容自动调整行的高度,所以我使用cxgrid,但这个在单个单元格中改里面部分文字的颜色,该怎么做呢?
 
Field: TField; State: TGridDrawState; Highlight: Boolean; AFont: TFont;
ABrush: TBrush);
begin
if (Field<>Nil) and (Field.FieldName='duration') then ABrush.Color:= clGradientActiveCaption;

if not highlight and (Field.FieldName='duration') and (qry.FieldByName('duration').AsString > '00:03:00') then
begin
if (qry.FieldByName('duration').AsString > '00:10:00') then
begin
ABrush.Color := clred;
AFont.Color := clWhite;
end else
begin
ABrush.Color :=$007392FD;
AFont.Color := clWhite;
end;

end;
end;
这个是wwDBGrid的
 
qvbyaolin:你的可以将单元格中的部分文字变色吗?
比如:单元格中的内容是:“中华人民共和国”,我想将“共和”这两个字变成红色,以达到醒目的效果。
 
OnOwerDraw
 
期待牛人[8D]
 
应该可以做到,不过比较繁琐一点,当然也是在drawcell中来实现,比如单元格中的内容是中国人民共和国,你需要将共和两字变成你需要的颜色,你可能需要分成三部分来实现,计算文字的高度很宽度,得到中国人民应该需要的高度和宽度,在画布上先画中国人民,记录最后一个字符的位置作为画共和的矩形的开始位置,设置brush颜色,画共和,恢复brush颜色,画国,整个过程的关键就是计算每个字符的位置和所需要的矩形空间。
 

Similar threads

回复
0
查看
854
不得闲
回复
0
查看
810
不得闲
D
回复
0
查看
817
DelphiTeacher的专栏
D
D
回复
0
查看
787
DelphiTeacher的专栏
D
顶部