| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > ListView с фильтром как в explorer'е в Win7? |
| Автор: Mr_Devil 30.10.2012, 11:00 |
| Подскажите как сделать такой фильтр? Листаю MSDN, но пока безрезультатно. |
| Автор: DarkProg 30.10.2012, 12:43 |
| Я бы посоветовал посмотреть в сторону DevExpress или TMS у них возможно есть готовые решения. По сути это похоже на PopupMenu с нарисованными на ней элементами. |
| Автор: Mr_Devil 30.10.2012, 13:00 |
| Что-то я сомневаюсь, что Explorer писали на сторонних компонентах. Хотелось бы всетаки решение на WinAPI. |
| Автор: Ne1tr1n0 31.10.2012, 12:08 |
| А это и не ListView в Explorer'e. Это нечто под названием DirectUIHWND. Что это такое, и как реализовано, хз, не копался во внутренностях, но вроде статьи какие-то видел на том же СodeProject'e или где-то ещё. Тебе нужен точно такой же список (отображающий файлы на диске, с возможностью фильтрации)? Посмотри компоненты JamShellBrowser, там есть компонент JamSystemShellView, делает то, что тебе надо. Ну и другие компоненты можно посмотреть. Если всё же надо сделать это с помощью ListView, то придется вручную отрисовывать Header у ListView, рисовать DropDown-кнопку (по всей видимости используя темы), отслеживать клики в нужных областях (если в районе DropDown'a то показывать соответствующую менюшку (её наверное придется делать отдельной формой), после нее сортировать итемы, или какие-то скрывать. В общем достаточно много работы. |
| Автор: Mr_Devil 31.10.2012, 14:29 | ||
| В общем так, господа. Стрелочку (SplitButton), при нажатии на которую должно появляться выпадающее меню, мне получить удалось. Она нажимается, но пока ничего не происходит SplitButton можно увидеть только в Win Vista и выше. Делается это так:
lvTable - это самый обычный ListView. ViewStyle должен быть vsReport. HD_ITEM - Содержит информацию для айтема хэдера. http://msdn.microsoft.com/en-us/library/windows/desktop/bb775247%28v=vs.85%29.aspx написано что там есть и для чего. WPARAM (у нас он 0) - это номер айтема в хэдере, к которому нужно "применить" параметры из HD_ITEM. Про Header Control написано вот http://msdn.microsoft.com/en-us/library/windows/desktop/bb775239%28v=vs.85%29.aspx. И в частности про HDM_SETITEM вот http://msdn.microsoft.com/en-us/library/windows/desktop/bb775367%28v=vs.85%29.aspx. При установке флага HDF_SPLITBUTTON - The item displays a split button. The HDN_DROPDOWN notification is sent when the split button is clicked. HDN_DROPDOWN notification sent by a header control to its parent (т.е. нашему ListView) when the drop-down arrow on the header control is clicked. В ListView есть такой http://msdn.microsoft.com/en-us/library/windows/desktop/bb774806%28v=vs.85%29.aspx. Буду копать дальше |
| Автор: Mr_Devil 23.11.2012, 09:10 | ||
Попробовал я получать этот LVN_COLUMNDROPDOWN
Меню вываливается где надо, но есть один очень неприятный недостаток. ListView из Delphi VCL (Delphi XE2) не знает ничего про флаг HDF_SPLITBUTTON и при любых манипуляциях с хедером (например, изменение размера колонки), он его сбрасывает :( Как вариант, можно создать ListView в рантайме на WinAPI, без использования VCL, но так не интересно |
| Автор: Mr_Devil 23.11.2012, 17:00 | ||
Установка атрибутов колонкам хэдера.
Получилось как-то так: http://s2.ipicture.ru/Gallery/Viewfull/18136037.html http://s2.ipicture.ru/Gallery/Viewfull/18136506.html |