Delphi: градиент, как на панели инструментов - PullRequest
2 голосов
/ 19 августа 2011

Мне нужна панель инструментов с градиентом, но я хочу нормальные кнопки без горячей дорожки. Я делаю как класс TToolBar:

Мой код:

procedure TForm7.ToolBar1CustomDraw(Sender: TToolBar; const ARect: TRect;
      var DefaultDraw: Boolean);
begin
 GradientFillCanvas(sender.Canvas, clWindow, $00D6D6D6, ARect, gdVertical); //a GraphUtil unit
end;

Функция панели инструментов из ComCtrls блока:

function TToolBar.GradientDrawToolBar(const ARect: TRect): Boolean;
begin
  Result := True;
  if gdoGradient in GradientDrawingOptions then
    GradientFillCanvas(Canvas, FGradientStartColor, FGradientEndColor,
      ARect, GradientDirection);
end;

Почему у меня разные результаты?

enter image description here

Добавлено:

GetShadowColor(clBtnFace, -25) = $00D6D6D6 для меня

1 Ответ

2 голосов
/ 19 августа 2011

Если вы проверите источник для ComCtrls, значение для FGradientEndColor будет GetShadowColor (clBtnFace, -25), которое основано на цвете системы и может изменяться в зависимости от настроек внешнего вида Windows. Попробуйте использовать то же значение в вашем пользовательском коде рисования вместо $ 00D6D6D6.

...