Изменить непрозрачность выделения ListBox - PullRequest
1 голос
/ 07 января 2020

У меня проблемы с изменением прозрачности выделения в FireBonkey ListBox. В моем случае я хотел изменить цвет выделения и сделать его полностью непрозрачным. Сначала я попытался сделать это, изменив стиль de ListBox с помощью пользовательского стиля, основанного на значении по умолчанию. Часть выделения представляет собой объект TStyleObject с непрозрачностью 1. Я заменил его на TRectangle, заполненный красным цветом. После того, как я применил свой стиль, я заметил, что выделение не было того же ярко-красного цвета, который я выбрал для выделения.

Поэтому я просто углубился в код FMX.ListBox, чтобы посмотреть, что там происходит. К моему удивлению, я обнаружил, что непрозрачность выделения установлена ​​в 0,7 жестко в процедуре TClyListBox ApplyStyle. Я ожидал, что стиль отвечает за то, как все выглядит. Я не знаю, если это неправильный способ думать об этом, но это не то, что я ожидал.

После этого я попытался изменить время выполнения непрозрачности выбора путем реализации события OnApplyStyleLookup с помощью следующего кода.

procedure TForm1.ListBox1ApplyStyleLookup(Sender: TObject);
var
  SelectionControl: TControl;
begin
  if ListBox1.FindStyleResource<TControl>('selection', SelectionControl) then
    SelectionControl.Opacity := 1;
end;

Это, однако, не имеет никакого эффекта. Я попытался сделать то же самое в новом настраиваемом элементе управления ListBox, унаследовав от TCustomListBox и переопределив метод ApplyStyle, где после ApplyStyle TCustomListBox через унаследованное ключевое слово я поместил код, чтобы установить непрозрачность выделения равной 1. Это тоже не имело никакого эффект.

Я просто поступаю неправильно, я что-то упускаю или просто Delphi странно.

...