我有一个 Delphi DBGrid,它在第一次加载时看起来很正常。我设置了一个OnTitleClick事件,该事件在单击标题时按列对 DBGrid 进行排序。一旦单击标题,列标题就像一个按钮被按下并出现一条难看的黑线。(见下图2)
一旦单击事件完成,网格又看起来正常了。
单击列标题时如何防止出现这条黑线?
编辑:QC提交给Embarcadero
虽然关闭调整列大小的功能确实会使黑线行为消失,但它确实带走了一个非常好的功能。我认为这种行为需要修复。我已向 Embarcadero 提交了以下QC 98255。请为这个条目投票。
更新:2017-07-30
我找到了绘制这条水平黑线的位置。
Vcl.Grids >过程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;