Компонент-потомок TListView с возможностью показа стрелочки в заголовке (как у Проводника Windows)Источник: delphikingdom Дмитрий Савченко
Автор: Дмитрий Савченко, Королевство Delphi При работе над одним проектом мне понадобилось в заголовке компонента TListView отображать стрелочку, указывающую направление сортировки. Стандартный компонент такой возможности не предоставлял. Первым делом я обратился к поиску на Круглом столе, но не смог найти там подсказки, как такое реализовать. Многочисленные поиски в Сети позволили найти только один бесплатный потомок TListView с исходниками, умеющий в числе прочего и рисовать нужную стрелку (Об этом компоненте будет упомянуто чуть ниже). "Подсмотрев" реализацию прорисовки в этом компоненте я и написал свой TatwListView. Использование компонентаИтак, TatwListView - прямой потомок класса TListView, в котором добавлено лишь одно опубликованное свойство:
Здесь, думаю, все понятно. Программист изменяет это свойство в любом месте кода - и нужная стрелочка отображается в нужной колонке. Если ArrowOptions.SortColumnIndex имеет отрицательное значение, то стрелка не отображается вообще. ArrowOptions.ArrowType имеет по умолчанию значение atUp. Как это было сделаноЯ не буду сдесь переписывать исходник компонента - все это можно посмотреть в прилагаемых файлах с комментариями. Опишу только ту часть кода, где непосредственно прорисовывается стрелка. Но вначале следует заметить, что, начиная с Windows XP, ОС сама умеет рисовать стрелочки. Поэтому для XP и выше достаточно только указать системе, где ее рисовать. А вот для более старых версий Windows нарисовать стрелочку придется самим. Многие, возможно, скажут, что тогда проще для любой версии ОС включая XP и Vista осуществлять собственную прорисовку, но у меня есть на это пара возражений:
Поэтому, компонент содержит два приватных метода SetColumnArrow и SetColumnArrowNonXP, которые и отвечают за установку стрелки. Вот их код:
Где и как вызываются эти методы смотрите в исходниках. Использованные материалыКомпонент TListViewEx (http://home.hccnet.nl/p.zylstra). Я частично использовал код этого компонента. В Copyright части модуля ListViewEx.pas указано, что этот компонент бесплатен и может быть использован в коммерческих/некоммерческих целях. |