我有一个TStringGrid,其中选定的行(最大1,没有多选)总是应该有不同的背景colo(u)r。在TStringGrid上设置选定行的背景颜色
我将DefaultDrawing属性设置为false,并提供OnDrawCell事件的方法,如下所示 - 但它不起作用。我甚至无法描述它究竟是如何工作的;我认为,如果我能,我已经解决了这个问题。可以这么说,并不是所有的行都具有相同的背景色,而是完全混杂。多列行具有“选定”颜色的一些单元格,并不是所选行的所有单元格都具有选定的颜色。
请注意,我比较单元格的行与strnggrid的行;由于所选行的单元格被选中,我无法检查选中的单元格状态。
procedure TForm1.DatabaseNamesStringGridDrawCell(Sender: TObject;
ACol, ARow: Integer;
Rect: TRect;
State: TGridDrawState);
var cellText :String;
begin
if gdFixed in State then
DatabaseNamesStringGrid.Canvas.Brush.Color := clBtnFace
else
if ARow = DatabaseNamesStringGrid.Row then
DatabaseNamesStringGrid.Canvas.Brush.Color := clAqua
else
DatabaseNamesStringGrid.Canvas.Brush.Color := clWhite;
DatabaseNamesStringGrid.Canvas.FillRect(Rect);
cellText := DatabaseNamesStringGrid.Cells[ACol, ARow];
DatabaseNamesStringGrid.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, cellText);
end;
Mawg,这是脱离主题,但我怀疑clAqua看起来很奇怪 - 它是一种非常明亮的颜色!尝试使用clHighlight,因为它是代表高亮/选定对象的系统颜色。 – 2011-04-07 05:40:57
如果设置背景色,请务必明确设置前景色。 AFAICT将clAqua BG与clWindowText FG结合在一起,后者可由用户通过系统的图形设置进行更改。 – 2011-04-07 07:00:30