Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.07;
Скачать: CL | DM;

Вниз

TListView про сортировку   Найти похожие ветки 

 
newanat   (2007-09-11 19:51) [0]

Сделал в стандартном TListView сортировку при клике по Columns. Но захотелось всё это сделать, как делают другие умные дядя - а именно добавить в Columns Header при сортировке стрелку указывающую в каком направлении произведена сортировка и окрасить столбец, который был отсортирован в другой цвет.

Я конечно понимаю, что могу попытаться сделать, но возможно есть готовые примеры или решения?


 
{RASkov} ©   (2007-09-11 20:15) [1]

> [0] newanat   (11.09.07 19:51)
> но возможно есть готовые примеры или решения?

Стандартных нет...... или если только в "левых" компонентах.... ищи. Или делай сам.


 
Korneley ©   (2007-09-11 22:21) [2]

Если не особо "лениво", и хочется быстро, то 2 переменные (по какой колонке сортируем и направление сортировки) + эвенты:
procedure TOperW.LV1ColumnClick(Sender: TObject; Column: TListColumn);
var i : integer;
begin
 for i := 0 to LV1.Columns.Count - 1 do LV1.Columns[i].ImageIndex := -1;
 if   ColumnToSort = Column.Index
 then DirectToSort := (DirectToSort xor 1)
 else DirectToSort := 0;
 Column.ImageIndex := DirectToSort + 10;// просто у меня 10 и 11 - стрелки вниз/вверх
 ColumnToSort := Column.Index;
 (Sender as TCustomListView).AlphaSort;
 if LV1.Selected <> nil then LV1.Selected.MakeVisible(true);
end;

procedure TOperW.LV1Compare(Sender: TObject; Item1, Item2: TListItem;
 Data: Integer; var Compare: Integer);
begin
 if ColumnToSort = 0 then
   Compare := CompareText(Item1.Caption,Item2.Caption)
 else
 if ColumnToSort > 0 then  begin
  Compare := CompareText(Item1.SubItems[ColumnToSort - 1],Item2.SubItems[ColumnToSort - 1]);
 end;
 if DirectToSort = 1 then  Compare := -Compare;
end;

Column.ImageIndex назначается из ImageList, назначеных для ListView.  Сумбурно, но работает...


 
newanat   (2007-09-12 08:50) [3]

Да, спасибо, я этим я вроде разобрался.

Но остался вопрос, у меня при этом в первом Columns появляется отступ равный ширине картинки в ImageList"e. Хотя при создании записи в ListView, я указываю Items.....ImageIndex := -1; Самой картинки нет, но отступ появляется. Как этого избежать?

И как все же окрасить в другой цвет Columns который был отсортирован?


 
Korneley ©   (2007-09-12 09:15) [4]

Если просто фон изменить, то пользуй эвент TListView.OnCustomDrawSubItem, только DefaultDraw там не трогай. Просто измени Brush.Color на нужный тебе для нужной колонки (параметр Subitem). Если что-то посложнее, см.
http://delphimaster.net/view/2-1189508158/
там как раз про отрисовку сабитемов ветка.


 
newanat   (2007-09-12 09:26) [5]

Ещё раз спасибо. Буду с этим работать.

Но у меня все ещё остается не решенным вопрос с отступом, в первой колонке. Я не придумал как этого избежать. ?

Может можно как-то назначить картинки для Column.ImageIndex, не через присвоенный SmallImages в ListView?


 
newanat   (2007-09-12 09:40) [6]

И ещё вопрос по отрисовке как изменить расположение картинок в Column, хочу что бы картинка была показана после текста, а не до него.


 
korneley ©   (2007-09-12 09:41) [7]


> Но у меня все ещё остается не решенным вопрос с отступом,
>  в первой колонке

Может поможет совет из той же ветки?
"Я бы вообще посоветовал выставить ListView стиль OwnerDraw := true и выполнять отрисовку всего в OnDrawItem" (с)DVM



Страницы: 1 вся ветка

Текущий архив: 2007.10.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
2-1189180739
Black_Tomcat
2007-09-07 19:58
2007.10.07
Ошибка при удалении Edit.


3-1180595713
DVM
2007-05-31 11:15
2007.10.07
Подружить TDBImage и jpeg. Как лучше всего?


15-1189318951
Dmitriy_
2007-09-09 10:22
2007.10.07
Распознавание текста


4-1175969967
AGGRESSOR
2007-04-07 22:19
2007.10.07
GUI (redirect output from console application)


2-1189407438
AndrewK
2007-09-10 10:57
2007.10.07
Как обратиться к родителю