Delphi: ненужные строки столбца и отсутствие RowSelect в представлении списка (SysListView32) - PullRequest
1 голос
/ 17 августа 2011

Существует представление списка со стилем (спасибо Сертаку Акьюзу за решение :))

ListView_SetExtendedListViewStyle(ListView1.Handle, LVS_EX_DOUBLEBUFFER);

Но теперь представление списка имеет дваНедостатки: лишние столбцы синие линии и строки не могут быть выделены, даже если RowSelect:=True;.Строки выбираются, если выбрать Предметы, это не работает для Подпунктов.

Если сделать GridLines:=True, то сетка не появится, что-то случится с фоном представления списка ...

enter image description here

Если нарисовать элементы с OwnerDraw, то линии не появляются, а только под элементами.Я могу нарисовать весь фон, но разве это самый простой способ скрыть эти синие линии?

Могу ли я справиться с ними?

Спасибо за ваши ценные ответы!

1 Ответ

4 голосов
/ 17 августа 2011

при звонке

ListView_SetExtendedListViewStyle(ListView1.Handle, LVS_EX_DOUBLEBUFFER);

Вы сбросили все остальные флаги расширенного стиля, установив только LVS_EX_DOUBLEBUFFER. Так что используйте

ListView_SetExtendedListViewStyle(ListView1.Handle,
    ListView_GetExtendedListViewStyle(ListView1.Handle) or LVS_EX_DOUBLEBUFFER);

для сохранения существующих флагов.


Вертикальные линии, вероятно, являются результатом усилий VCL по максимально возможной имитации системного списка. Когда темы включены, VCL вызывает SetWindowTheme в представлении списка, передавая 'explorer' в качестве параметра 'SubAppName', поэтому вертикальные линии, которые вы видите в представлении папки проводника, дублируются. Чтобы отменить это, вы можете снова вызвать функцию самостоятельно:

  SetWindowTheme(ListView1.Handle, nil, nil);

Обратите внимание, что вам может не понравиться то, что становится списком:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...