Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
ВнизКак реализовать сортировку в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c