Как удалить черную линию из события Delphi DBGrid OnTitleClick? - PullRequest
3 голосов
/ 28 августа 2011

У меня есть Delphi DBGrid, который выглядит нормально при первой загрузке. Я настроил событие OnTitleClick , которое сортирует DBGrid по столбцу при нажатии на заголовок. Как только вы нажимаете на заголовок, заголовок столбца действует как нажатие кнопки и появляется уродливая черная линия. (См. Рис. 2 ниже)

Как только событие щелчка выполнено, сетка снова выглядит нормально.

Как предотвратить появление этой черной линии при нажатии на заголовок столбца?

enter image description here

РЕДАКТИРОВАТЬ: КК, представленный Embarcadero

Хотя отключение возможности изменения размера столбцов приводит к тому, что поведение черной линии исчезает, это убирает очень приятную особенность. Я думаю, что это поведение должно быть исправлено. Я отправил в Embarcadero следующее QC 98255 . Пожалуйста, проголосуйте за эту запись.

ОБНОВЛЕНИЕ: 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 Ответ

4 голосов
/ 28 августа 2011

Черная линия выглядит как маркер вставки порядка столбцов.

Попробуйте найти параметр, который отключает повторный порядок столбцов.

...