我有一个TStringGrid,其中选择的行(最多1行,不支持多选)应始终具有不同的背景颜色。我将DefaultDrawing属性设置为false,并提供了一个OnDrawCell事件的方法,如下所示 - 但它无法正常工作。我甚至无法准确描述它是如何无法正常工作的; 我怀疑如果我能描述清楚,我已经解决了这个问题。总之,与所有具有相同背景颜色的完整行相比,它是一团糟。多个行具有一些“Selected”颜色的单元格,而不是所有选定行的单元格都具有选定颜色。
请注意,我将单元格的行与strnggrid的行进行比较;我无法检查所选单元格的状态,因为只有所选行的单元格是选定的。
请注意,我将单元格的行与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;