3

我正在尝试以编程方式突出显示 TDBGrid 后代中的当前单元格。如果我执行 DBGrid.SetFocus,我会得到下面的组合框箭头,这对我来说没有充分突出显示。

编辑:

我已经在做 DBGrid.SelectedField := DataSource.FieldByName('Name');

为了将用户的注意力更多地吸引到相关区域,我设置了:

DBGrid.Columns[x].Title.Font.Style := [fsbold, fsunderline];  

我设置了一个计时器,五秒钟后会:

DBGrid.Columns[x].Title.Font.Style := [];

奇怪的是,随着时间的推移,单元格变为蓝色(如下所示)。这就是我首先想要的亮点。但是我对网格的了解还不够,不知道如何直接获得它。

我的问题:如何使网格单元格突出显示,如下面的蓝色示例所示?我以前从来没有做过这样的事情,所以我有点迷茫。这是一个 InPlaceEditor 功能吗?

我正在使用 TDBGrid 的后代,所以我不确定我看到的行为是 TDBGrid 固有的,还是只是在后代中(在这种情况下,我知道我的问题无法在这里回答。)

两个控件

4

1 回答 1

4

我一直在使用以下(D2007)使用该DBGrid: OnDrawColumnCell事件。

procedure TForm1.DBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin 
  //Make the column blue if the title is bold
  if (fsBold in Column.Title.Font.Style) then
    TDBGrid(Sender).Canvas.Brush.Color := $00fff0e1;

  //Set the selected row to white/bold text on blue background
  if (gdSelected in State) then
    begin
      TDBGrid(Sender).Canvas.Brush.Color := clHighlight;
      TDBGrid(Sender).Canvas.Font.Style := Font.Style + [fsBold];
      TDBGrid(Sender).Canvas.Font.Color := clHighlightText;
    end;

  //Update the grid
  TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
于 2012-10-30T15:07:24.347 回答