gpt4 book ai didi

delphi - 设置 TStringGrid 上选定行的背景颜色

转载 作者:行者123 更新时间:2023-12-01 18:57:19 32 4
gpt4 key购买 nike

我有一个 TStringGrid,其中所选行(最多 1 个,无多选)应始终具有不同的背景颜色。

我将 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;

最佳答案

如果您尝试使用不同的颜色绘制所选行或单元格,则必须检查 state 变量中的 gdSelected 值。

procedure TForm1.DatabaseNamesStringGridDrawCell(Sender: TObject;
ACol, ARow: Integer;
Rect: TRect;
State: TGridDrawState);
var
AGrid : TStringGrid;
begin
AGrid:=TStringGrid(Sender);

if gdFixed in State then //if is fixed use the clBtnFace color
AGrid.Canvas.Brush.Color := clBtnFace
else
if gdSelected in State then //if is selected use the clAqua color
AGrid.Canvas.Brush.Color := clAqua
else
AGrid.Canvas.Brush.Color := clWindow;

AGrid.Canvas.FillRect(Rect);
AGrid.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, AGrid.Cells[ACol, ARow]);
end;

关于delphi - 设置 TStringGrid 上选定行的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5575713/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com