Delphi DBGrid是否通过代码高亮显示定位的行?

Delphi DBGrid是否通过代码高亮显示定位的行?,delphi,row,highlighting,tdbgrid,Delphi,Row,Highlighting,Tdbgrid,我得到了: ADOTable1(将人员编码为整数,将人员命名为字符串) 数据源1(数据集为ADOTable1) DBGrid1(连接到数据源1,选项dgRowSelect为true) 我在ADOTable1上找到一行代码如下 ADOTable1.Locate(ADOTable11codepeople.FieldName, 1, []); DBGrid1正在选择正确的行。但不是重点 如何使DBGrid自动高亮显示我在ADOTable1中找到的行 我阅读了以下链接,但没有找到答案: 简单

我得到了: ADOTable1(将人员编码为整数,将人员命名为字符串) 数据源1(数据集为ADOTable1) DBGrid1(连接到数据源1,选项dgRowSelect为true)

我在ADOTable1上找到一行代码如下

  ADOTable1.Locate(ADOTable11codepeople.FieldName, 1, []);
DBGrid1正在选择正确的行。但不是重点

如何使DBGrid自动高亮显示我在ADOTable1中找到的行

我阅读了以下链接,但没有找到答案:

简单的源代码请


PS:我使用Delphi 2010。

以下代码将使网格中选定的行高亮显示

type
 THackDBGrid = class (TDBGrid);

...

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
           const Rect: TRect; DataCol: Integer; Column: TColumn;
           State: TGridDrawState);
begin
 if (THackDBGrid(dbGrid1).DataLink.ActiveRecord + 1 = THackDBGrid(dbGrid1).Row)
  or (gdFocused in State) or (gdSelected in State) then
   dbGrid1.canvas.Brush.Color:= clMoneyGreen;


 dbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;

好的,在我自己试过之后,我发现下面的代码可以完成这个代码:

DBGrid1.setfocus;
由于行已被正确选择,因此设置焦点有助于突出显示


无论如何,感谢您的回复:)

grid.SelectedRows.CurrentRowSelected:=True;
这有助于我突出显示当前行

10月27日13日5:44的回答

不,纽曼的答案(上面两个)是最好的,正确的答案

现在是2021年。我在德尔福10.2(东京);VCL程序。我从3.02版(1986年)开始使用Delphi

一些进一步的解释:

(1) dgAlwaysShowSelection不适用于dgRowSelect(本响应中提到的链接过于复杂-如果它们可以工作的话)

(2) DBGrid1.SetFocus将焦点从任何可能是ActiveControl的位置移开

(3) grid.SelectedRows.CurrentRowSelected:=真;不适合我

(4) No'am's hack-->不到10行代码,增加了选择颜色的功能

(4.1)如果你不想“选择”一种颜色,我建议使用CLGradientActiveCoption(而不是NoAM的clMoneyGreen)

(*)我98%(99%?)确信我以上的所有观点将适用于任何版本的Delphi,至少可以追溯到5


如果选项
dgAlwaysShowSelection
不应该是您想要的,那么您发布的最后一个链接的答案应该满足您的需求。您还可以在Object Inspector中将DBGrid的TabOrder设置为0。注:我使用embarcadero Xe7这是最佳答案。现在是2021年,我在德尔福10.2(东京)。更多关于这一点,请参阅我的(下面的扩展答案)。