tstringgrid中的VertLine与HorzLine怎样改成其它颜色?(100分)

  • 主题发起人 主题发起人 gcy2000
  • 开始时间 开始时间
G

gcy2000

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样开发这样的自定义控件?
使tstringgrid中的VertLine与HorzLine改成其它几种颜色,
即使Options由有goEditing变成无goEditing亦无短暂的改
回原来的黑色。
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
dec(rect.Left, stringgrid1.gridlinewidth);
dec(rect.Top, stringgrid1.gridlinewidth);
inc(rect.Right, stringgrid1.gridlinewidth);
inc(rect.Bottom, stringgrid1.gridlinewidth);
stringgrid1.canvas.brush.Color:=clRed; // 改成你想要的颜色
stringgrid1.canvas.FrameRect(Rect);
stringgrid1.canvas.brush.Color:=clDefault;
end;


适用于:gridlinewidth=1的情况。>1就很难看了。 ^_^
一种办法就是用个for循环来画, 比如:

for i:=1 to stringgrid1.gridlinewidth do
begin
dec(rect.Left, stringgrid1.gridlinewidth);
dec(rect.Top, stringgrid1.gridlinewidth);
inc(rect.Right, stringgrid1.gridlinewidth);
inc(rect.Bottom, stringgrid1.gridlinewidth);
stringgrid1.canvas.brush.Color:=clRed; // 改成你想要的颜色
stringgrid1.canvas.FrameRect(Rect);
stringgrid1.canvas.brush.Color:=clDefault;
end;

可能效率上会有些影响。
 
sorry, paste得太快了, 有个小bug:

当适用for循环方式的时候, inc, dec函数中的增量都应该是1。即改成:
dec(rect.Left);
dec(rect.Top);
inc(rect.Right);
inc(rect.Bottom);
 
接受答案了.
 
后退
顶部