2015-04-07 94 views
3

我有以下代码(分配给DrawGrid1.OnDrawCell事件):当Brush.Style为bsFDiagonal时,为什么TDrawGrid.OnDrawCell绘制黑色背景?

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
    Rect: TRect; State: TGridDrawState); 
begin 
    DrawGrid1.Canvas.Brush.Style:= bsFDiagonal; 
    DrawGrid1.Canvas.Brush.Color:= clSkyBlue; 
    DrawGrid1.Canvas.FillRect(Rect); 
end; 

它总是吸引即使DrawGrid1.Color属性已被设置为clRed黑色背景。我也试图改变笔和字体属性,没有运气。 我在这里错过了什么?

enter image description here

PS:我已经检查这个代码:Diagonal brush style gives me black area。 我没有看到问题和答案(除了注释行之间)有什么区别,并且该代码不适用于我,正如我所提到的,我已尝试更改Pen属性而没有任何结果。 我要的只是红色背景与天蓝色的对角线。

+0

我没有XE *,并且不能自己查看源代码,但在早期的Delphi版本中,在TCanvas.CreateBrush()中有一行,它设置了一个(错误的)背景颜色以解决问题在Windows 95中的错误 - 也许它仍然存在?它弄乱了颜色,但是你会看到黑色,因为它也会混淆alpha值。 – mghie

回答

1

解决,有FillRect之前添加SetBKColor():

DrawGrid1.Canvas.Brush.Style:= bsFDiagonal; 
DrawGrid1.Canvas.Brush.Color:= clSkyBlue; 
SetBkColor(DrawGrid1.Canvas.Handle, ColorToRGB(clRed)); 
DrawGrid1.Canvas.FillRect(Rect);  

我仍然不知道为什么,但它的工作。

+0

我猜'SetBkMode(TRANSPARENT)'也可以,而且根本不会触及背景。 –

+0

试过SetBkMode(TRANSPARENT),不适合我,背景还是黑的。 – tcxbalage

相关问题