3

最初にロードしたときに正常に見える 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;
4

1 に答える 1

4

黒い線は、列順序の挿入マーカーのように見えます。

列の並べ替えを無効にするオプションを探してみてください。

于 2011-08-28T03:24:56.220 に答える