Как удалить черную линию из события Delphi DBGrid OnTitleClick?

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

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

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

введите здесь описание изображения

РЕДАКТИРОВАТЬ: контроль качества отправлен в Embarcadero

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

ОБНОВЛЕНИЕ: 30 июля 2017 г.

Я нашел, где рисуется эта горизонтальная черная линия.
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;

person Michael Riley - AKA Gunny    schedule 28.08.2011    source источник
comment
Не имея Delphi передо мной (и поклявшись в 1999 году, что я никогда больше не буду использовать элемент управления с привязкой к данным), это выглядит как маркер вставки переупорядочения столбцов. Есть ли свойство разрешать перемещение столбцов?   -  person Ian Boyd    schedule 28.08.2011
comment
@Ian - есть логическая опция dgColumnResize. Когда true, он создает черную линию. Когда false, он отлично работает. Нет черной линии. Также нет действия по нажатию кнопки заголовка столбца. Спасибо. Сделайте это ответом, и я проголосую за него.   -  person Michael Riley - AKA Gunny    schedule 28.08.2011


Ответы (1)


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

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

person Ian Boyd    schedule 28.08.2011
comment
На самом деле он называется dgColumnResize. Если установлено значение True, появляется черная линия, а заголовок действует как кнопка. Если установлено значение False, черная линия отсутствует, а заголовок не нажимается вниз, как кнопка. Не отказывайтесь от элементов управления с привязкой к данным, пока не прочитаете новую книгу Кэри Дженсенса Delphi in Depth: ClientDataSets. - person Michael Riley - AKA Gunny; 28.08.2011
comment
если вы включите dgColumnResize, вы уберете два жизненно важных действия, которые действительно нравятся пользователям (включая меня). 1.) Возможность изменять размер столбцов 2.) Возможность перемещать столбцы. Другая приятная функция, которая уходит... Ячейка заголовка НЕ ​​нажимается, как кнопка, когда на нее нажимают. - person Michael Riley - AKA Gunny; 31.07.2017