【问题标题】:How do you Remove the Black Line from a Delphi DBGrid OnTitleClick Event?如何从 Delphi DBGrid OnTitleClick 事件中删除黑线?
【发布时间】:2011-08-28 01:50:54
【问题描述】:

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

点击事件一完成,网格又看起来正常了。

如何防止点击列标题时出现这条黑线?

编辑:QC 提交给 Embarcadero

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

更新:2017-07-30

我找到了绘制这条水平黑线的位置。
Vcl.Grids > procedure TCustomGrid.DrawMove;

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

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;

【问题讨论】:

  • 我面前没有 Delphi(并在 1999 年发誓我再也不会使用数据绑定控件)它看起来像一个列重新排序插入标记。是否有“允许列移动”属性?
  • @Ian - 有一个名为 dgColumnResize 的布尔选项。当为真时,它会产生黑线。假的时候效果很好。没有黑线。也没有列标题按钮按下操作。谢谢你。将此作为答案,我会投票给它。

标签: delphi formatting dbgrid


【解决方案1】:

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

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

【讨论】:

  • 其实叫dgColumnResize。当设置为 True 时,会出现黑线,并且标题就像一个按钮。当设置为 False 时,没有黑线,并且标题不会像按钮一样按下。在您阅读 Cary Jensens 的新书《Delphi in Depth: ClientDataSets》之前,不要放弃数据绑定控件。
  • 如果您关闭 dgColunmResize,您将带走用户(包括我自己)真正喜欢的两项重要活动。 1.) 调整列大小的能力 2.) 移动列的能力。另一个消失的好功能......标题单元格在被点击时不会像按钮一样按下。
猜你喜欢
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
相关资源
最近更新 更多