【发布时间】:2011-04-07 03:45:53
【问题描述】:
我有一个 TStringGrid,其中选定的行(最多 1 个,没有多选)应该总是有不同的背景颜色(u)r。
我将 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,因为它是一种系统颜色,用于表示突出显示/选定的对象。
-
如果设置了背景色,一定要明确设置前景色。 AFAICT 您将 clAqua BG 与 clWindowText FG 结合起来,后者可以由用户通过系统的图形设置进行更改。
标签: delphi tstringgrid