如何从Delphi DBGrid OnTitleClick事件中删除黑线?

时间:2011-08-28 01:50:54

标签: delphi formatting dbgrid

我有一个Delphi DBGrid,它在第一次加载时看起来很正常。我已经设置了一个 OnTitleClick 事件,在单击标题时按列对DBGrid进行排序。单击标题后,列标题就像按下按钮一样,出现一条丑陋的黑线。 (见下图2)

点击事件完成后,网格再次显示正常。

如何在单击列标题时阻止显示此黑线?

enter image description here

编辑:QC提交给Embarcadero

虽然关闭调整列大小的功能确实会使黑线行为消失,但它确实会带走一个非常好的功能。我认为这种行为需要修复。我已将以下QC 98255提交给Embarcadero。请投票支持此条目。

更新时间:2017-07-30

我发现了这条水平黑线的绘制位置 Vcl.Grids > 程序 TCustomGrid.DrawMove;

Canvas.Pen.Width设置为5.我更改了Canvas.Pen.Width:= 1;
它看起来好多了。现在,当我点击“Contact_Last”标题单元格时,黑色指示线只有一个像素宽,而且侵入性更小。

enter image description here

procedure TCustomGrid.DrawMove;
var
  OldPen: TPen;
  Pos: Integer;
  R: TRect;
begin
  OldPen := TPen.Create;
  try
    with Canvas do
    begin
      OldPen.Assign(Pen);
      try
        Pen.Style := psDot;
        Pen.Mode := pmXor;
        //+----------------------------------------------------------------+
        // Modified 2017-07-30 by Michael J Riley (MJR)
        // Changed Pen.Width from 5 to 1
        // This makes the vertical black move-indicator line 1 pixel wide
        // Which is the same width as column resize vertical line
        //+----------------------------------------------------------------+
        //Pen.Width := 5;
        Pen.Width := 1;
        if FGridState = gsRowMoving then
        begin
          R := CellRect(0, FMovePos);
          if FMovePos > FMoveIndex then
            Pos := R.Bottom else
            Pos := R.Top;
          MoveTo(0, Pos);
          LineTo(ClientWidth, Pos);
        end
        else
        begin
          R := CellRect(FMovePos, 0);
          if FMovePos > FMoveIndex then
            if not UseRightToLeftAlignment then
              Pos := R.Right
            else
              Pos := R.Left
          else
            if not UseRightToLeftAlignment then
              Pos := R.Left
            else
              Pos := R.Right;
          MoveTo(Pos, 0);
          LineTo(Pos, ClientHeight);
        end;
      finally
        Canvas.Pen := OldPen;
      end;
    end;
  finally
    OldPen.Free;
  end;
end;

1 个答案:

答案 0 :(得分:4)

黑线看起来像列顺序插入标记。

尝试查找禁用列重新排序的选项。