Проблема стилей Delphi VCL с TListview EditCaption и HideSelection - PullRequest
0 голосов
/ 02 мая 2019

Я использую Delphi 10.3 в приложении VCL со стилем Dark VCL (например, по умолчанию Windows10 Dark).

У меня две проблемы со стилем VCL в TListview

При редактированииДля элемента в TListview редактирование списка не оформлено: оно имеет белый фон с черным текстом.Есть ли способ применить стиль VCL к этому редактору, хотя это не элемент управления VCL?

Кроме того, если HideSelection = False и у списка нет фокуса, цвет фона выбранного элемента вместо этого является светло-серым цветом по умолчанию.гораздо более темного цвета, который лучше подходил бы к стилю VCL.Есть ли способ изменить это, кроме пользовательского рисунка?

Я проверил это с несколькими темными стилями VCL, у всех из них есть эти проблемы с TListView (и TTreeview тоже).

1 Ответ

0 голосов
/ 06 мая 2019

Мне удалось исправить фон редактирования и цвет текста списка, переопределив обработчик сообщений WM_CTLCOLOREDIT в потомке TListView (в моем случае TListViewEx), как показано ниже. Если вы проверите исходный код VCL для TCustomListView.WMCtlColorEdit, вы увидите, что это исправление не охватывает корректный случай case glassPaint - но я этим не пользуюсь. Мне кажется, что это на самом деле ошибка VCL и приведенный ниже код должен был быть включен в TCustomListView.WMCtlColorEdit. Примечание: тот же тип исправлений также работает для TTreeview (очевидно, с использованием потомка TTreeview)

Я еще не нашел обходного пути для несфокусированного выделенного цвета.

procedure TListViewEx.WMCtlColorEdit(var Message: TMessage);
var
  DC: HDC;
begin
  if StyleServices.IsSystemStyle then
    inherited
  else
  begin
    DC := Message.WParam;
    SetTextColor(DC, StyleServices.GetSystemColor(clWindowText));
    SetBkColor(DC, StyleServices.GetSystemColor(clWindow));
    Message.Result := 1;
  end;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...