среда, 22 апреля 2020 г.

Контрастный фон для цветного текста

Понадобилось как-то мне показать диалог настройки шрифта с примером этого текста.

Пока цвет текста был темный - он нормально смотрелся на стандартном светло-сером фоне.
Но вот уже светлый шрифт смотрелся уже не очень.

Решение нашлось довольно простое:
procedure TFontSelectDialog.FontChange(Sender: TObject);
var
  Cl: TColor;
  red, green, blue: Byte;
begin
  pnlBackGround.Font.Assign(FEditedFont);
  Cl := ColorToRGB(FEditedFont.Color);
  red := Cl and $FF;
  green := (CL shr 8) and $FF;
  blue := (CL shr 16) and $FF;

  Cl := clSilver;
  if (1 - (0.299 * red + 0.587 * green + 0.114 * blue) / 255 < 0.5) then
      // светлый шрифт
    ChangeBrightness(Cl, 0.2)
  else  // темный шрифт
    ChangeBrightness(Cl, 0.92);
  pnlBackGround.Color := Cl;
end;

Комментариев нет: