最初にロードしたときに正常に見える Delphi DBGrid があります。タイトルがクリックされたときに DBGrid を列でソートするOnTitleClickイベントをセットアップしました。タイトルをクリックするとすぐに、列のタイトルがボタンが押されたように機能し、醜い黒い線が表示されます。(下の図 2 を参照)
クリック イベントが完了するとすぐに、グリッドは再び正常に見えます。
列のタイトルをクリックしたときにこの黒い線が表示されないようにするにはどうすればよいですか?
編集: Embarcadero に提出された QC
列のサイズを変更する機能をオフにすると、黒い線の動作が消えますが、非常に優れた機能が失われます。この動作は修正する必要があると思います。以下のQC 98255を Embarcadero に提出しました。このエントリに投票してください。
更新: 2017-07-30
この横の黒い線が描かれている場所を見つけました。
Vcl.Grids >プロシージャTCustomGrid.DrawMove;
Canvas.Pen.Width は 5 に設定されています。Canvas.Pen.Width := 1; に変更しました。
それははるかに良く見えます。「Contact_Last」というタイトル セルをクリックすると、黒いインジケータ ラインの幅が 1 ピクセルになり、邪魔になりません。
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;