У меня есть Delphi DBGrid, который выглядит нормально при первой загрузке. Я настроил событие OnTitleClick , которое сортирует DBGrid по столбцу при нажатии на заголовок. Как только вы нажимаете на заголовок, заголовок столбца действует как нажатие кнопки и появляется уродливая черная линия. (См. Рис. 2 ниже)
Как только событие щелчка выполнено, сетка снова выглядит нормально.
Как предотвратить появление этой черной линии при нажатии на заголовок столбца?
РЕДАКТИРОВАТЬ: КК, представленный 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;