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

Вниз

Как реализовать сортировку в ListView по клику на заголовке?   Найти похожие ветки 

 
Nikulin   (2004-02-16 09:54) [0]

Как реализовать сортировку в ListView по клику на заголовке, чтобы значок указывающий напрвление сортировки отражался в заголовке?


 
Digitman ©   (2004-02-16 10:04) [1]

мухи - отдельно, котлеты - отдельно

значек значком (никакого отношения к собственно алгоритму сортировки не имеет), а сортировка сортировкой (соотв-но, не имеет отношения к отрисовке значка)

по клику или не по клику - тем более безразлично

собственно сортировка - см. метод TListView.CustomSort() (+ событие TListView.OnCompare)

собственно отрисовка значка - см. событие TListView.On[Advanced]CustomDraw


 
Семен Сорокин ©   (2004-02-16 11:04) [2]

>Сортировка

procedure TfmFlights.ListViewColumnClick(Sender: TObject; Column: TListColumn);
begin
TListView(Sender).Tag := Column.Index;
TListView(Sender).AlphaSort;
end;

procedure TfmFlights.ListViewCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
begin
with TListView(Sender) do
if Tag = 0 then
Compare := CompareText(Item1.Caption, Item2.Caption)
else if Tag in [5, 6] then
Compare := CompareText(Item1.SubItems[Tag-1], Item2.SubItems[Tag-1])
end;


 
Семен Сорокин ©   (2004-02-16 11:05) [3]

подправлю:

procedure TfmFlights.ListViewColumnClick(Sender: TObject; Column: TListColumn);
begin
TListView(Sender).Tag := Column.Index;
TListView(Sender).AlphaSort;
end;

procedure TfmFlights.ListViewCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
begin
with TListView(Sender) do
if Tag = 0 then
Compare := CompareText(Item1.Caption, Item2.Caption)
else
Compare := CompareText(Item1.SubItems[Tag-1], Item2.SubItems[Tag-1])
end;


 
BALU1111 ©   (2004-02-16 11:15) [4]

Вопрос в тему. Как сделать, чтобы сортировка была по порядку, (особенно числовой). Т.е. при сортировке числа сортируются сначала по первому знаку числа, например 1, 10, 11, 2 и т.д., но как сделать, чтобы была нормальная сортировка: 1, 2, ..., 10, 11 и т.д.?


 
Семен Сорокин ©   (2004-02-16 11:18) [5]

BALU1111 © (16.02.04 11:15) [4]
Сравнение двух строк с добавлением слева пробелов до максимума:
function CompareTextLng(AStr1, AStr2: string): integer;
var
_max : integer;
begin
_max := Length(AStr1);
if Length(AStr2) > _max then
_max := Length(AStr2);
AStr1 := PadLeft(" ", AStr1, _max);
AStr2 := PadLeft(" ", AStr2, _max);
Result := CompareText(AStr1, AStr2)
end;


 
Семен Сорокин ©   (2004-02-16 11:19) [6]

а еще забыл, PadLeft - добавляет нужное количество символов слева, домашнее задание :))


 
Digitman ©   (2004-02-16 11:25) [7]


> BALU1111 © (16.02.04 11:15) [4]


тем или иным образом заноси и храни в св-вах Item.Data и Subitems.Objects[..] инф-цию о РЕАЛЬНОМ типе данных, а не об их строковом представлении в том или ином формате


 
BALU1111 ©   (2004-02-16 11:33) [8]

> Digitman © (16.02.04 11:25) [7]

Немного не понял, это как?


 
Zergling ©   (2004-02-16 11:33) [9]

BALU1111 © (16.02.04 11:15) [4]

Для ListView (и других стрингоподобных) 1, 10, 15 - это текст, а не числа, как для тебя. Так, что такая вот сортировка получается. Возми это на заметку :)


 
Zergling ©   (2004-02-16 11:35) [10]

Упс. Опередили :)
Digitman © (16.02.04 11:25) [7]


 
Тимохов ©   (2004-02-16 11:43) [11]

Значок можно не рисовать. Можно устанавливать ImageIndex.
Кусок моего проекта:

PROCEDURE TFrame_CTCatalog.ListViewColumnClick(
Sender: TObject;
Column: TListColumn);
BEGIN
... сортировка
Column.ImageIndex := cImageIndex_Sort // установка значка
...
END;


 
Digitman ©   (2004-02-16 11:54) [12]

BALU1111 © (16.02.04 11:33) [8]

пример для integer-данных
var
li: TListItem;
...

with ListView.Items do
begin
BeginUpdate;
try
li := Add;
li.Caption := "1";
li.Data := Pointer(1);
with li.Subitems do
begin
AddObject("2", Pointer(2));
AddObject("3", Pointer(3));
end;
finally
EndUpdate;
end;
end;



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

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

Наверх




Память: 0.5 MB
Время: 0.019 c
3-93813
Крутыш
2004-02-03 00:18
2004.02.29
Проблемы с датами в запросе Update


14-94124
MPS
2004-02-08 10:30
2004.02.29
Драйвер модема для линукс! help!!!


14-94131
Думкин
2004-02-07 06:28
2004.02.29
С днем рождения! 7 февраля.


6-94075
Yaro
2003-12-20 12:35
2004.02.29
Где присутствует параметр Gateway?


14-94185
slivka
2004-02-06 23:20
2004.02.29
А что такое