DBGrid是否通过代码突出显示定位的行?

sdnqo3pr  于 2022-11-04  发布在  其他
关注(0)|答案(5)|浏览(145)

我得到了:ADOTable 1(代码人为整数,名称人为字符串)数据源1(日期集为ADOTable 1)DBGrid 1(连接到数据源1,选项-dgRowSelect为真)
我使用以下代码在ADOTable 1上找到一行

ADOTable1.Locate(ADOTable11codepeople.FieldName, 1, []);

DBGrid 1正在选择正确的行。但没有突出显示。
如何使DBGrid自动突出显示我从ADOTable 1中找到的行?
我看了下面的链接,没有找到答案:
如何在TDBGrid中设置活动单元格?
Delphi - Using DBGrid to select rows from a search
View position in DBGrid when scrolling in Delphi
简单的源代码请...
PS:我用的是 Delphi 2010。

q5iwbnjs

q5iwbnjs1#

下面的代码将突出显示网格中的选定行

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;
yeotifhr

yeotifhr2#

好的,在我尝试了自己,然后我发现下面的代码可以做的代码:

DBGrid1.setfocus;

由于行已正确选定,setfocus有助于突出显示。
无论如何,谢谢你的回复:)

0x6upsns

0x6upsns3#

网格.选定行.当前选定行:= True;这有助于我突出显示当前行

iugsix8n

iugsix8n4#

我在13年10月27日5:44回答
恕我直言,纽曼的答案(上面两个)是最好的,正确的答案。
现在是2021年,我在 Delphi 10.2(东京); VCL程序。我从Delphi 3.02版本(1986)开始使用它。
有人进一步解释:
(1)dgAlwaysShowSelection不能与dgRowSelect一起使用(并且此响应中提到的链接过于复杂-如果它们能使用的话)
(2)DBGrid1.SetFocus将焦点从可能是ActiveControl的任何对象上移开
(3)网格.选定行.当前选定行:= True;对我不起作用
(4)No'am' s hack --〉它不到10行代码,并且增加了选择颜色的功能。
(4.1)如果你不想“选择”一种颜色,我建议使用clGradientActiveCaption(而不是No'am的clMoneyGreen)。
(*)我有98%(99%?)的把握,我上面的所有观点将/将适用于任何版本的 Delphi ,至少可以追溯到5。
〈这就是我的全部〉

rfbsl7qr

rfbsl7qr5#

作为对No'am纽曼伟大答案的进一步扩展(即使在2022年),以下代码将使网格中的选定行高亮显示,但相对于当前方案,使用DrawCellHighlight()而不是特定颜色:

[...]
 If (THackDBGrid(dbGrid1).DataLink.ActiveRecord + 1 = THackDBGrid(dbGrid1).Row)
    or (gdFocused in State) or (gdSelected in State) then
  dbGrid1.DrawCellHighlight(Rect, State, Column.Index, 0);
[...]

相关问题