Главная страница
    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.47 MB
Время: 0.037 c
1-1183471965
Kolan
2007-07-03 18:12
2007.10.07
Придумал архетиктуру с пакетами и медиатором, помогите реализоват


2-1189577653
Washington
2007-09-12 10:14
2007.10.07
Местоположение формы


2-1189510675
FreeTT
2007-09-11 15:37
2007.10.07
Как получить всех родителей в TreeView


2-1189420317
Nikola62
2007-09-10 14:31
2007.10.07
Как не дать форме открыться


2-1189589824
Darvin
2007-09-12 13:37
2007.10.07
Как сравнить два GUID?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский