Главная страница
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.021 c
15-1189495429
BOA_KAA
2007-09-11 11:23
2007.10.07
Как сделать это быстрее?


15-1189186950
barakuda
2007-09-07 21:42
2007.10.07
аналог mainmenu


2-1189499934
vasyl
2007-09-11 12:38
2007.10.07
Автозапуск


15-1187816153
Real
2007-08-23 00:55
2007.10.07
Видеозахват: глюки на экспорте


2-1189145720
Bast
2007-09-07 10:15
2007.10.07
Можно ли как нибудь увеличить быстродействие?