Delphi TDBGrid Как изменить выбранный цвет, когда стиль gdsGradient - PullRequest
10 голосов
/ 24 сентября 2011

Я просто пытаюсь использовать Delphi XE, до этого я был большим поклонником Delphi7.
Я вижу, что новая база данных dbgrid позволяет использовать тематические и градиентные стили.

Я использую градиент и установил выбор строки, у него есть свойство для градиента-начала и -end для заголовка столбца.
Но где это свойство для установки selected color?
странно, потому что цвет не совпадает, selected color всегда синий градиент.

Я могу сделать это с customdraw, я просто хочу знать, есть ли возможность изменить его без пользовательского чертежа.

1 Ответ

1 голос
/ 20 марта 2013

Выбранный цвет поступает из ОС.
Там это закодировано как clHighlight.

Вы не можете изменить его как таковое, но вы можете создать подкласс dbgrid и переопределить метод DrawCell.
Или еще проще добавить onDrawCell обработчик событий.

procedure TForm1.DBGrid1DrawCell(Sender: TObject, const Rect: TRect; Field: TField;  State: TGridDrawState); 
var
  index: Integer;
begin
  if not(gdSelected in State) then DefaultDrawCell(Rect, Field, State)
  else begin 
    index := ARow * DBGrid1.ColCount + ACol;
    DBGrid1.Canvas.Brush.Color := clYellow; <<-- some color  
    DBGrid1.Canvas.FillRect(Rect);
    if (gdFocused in State) then begin
      DBGrid1.Canvas.DrawFocusRect(Rect);
    end;
    ImageList1.Draw(DBGrid1.Canvas,Rect.Left,Rect.Top,index, True);
end;
...