Текущий архив: 2004.10.24;
Скачать: CL | DM;
ВнизListView Найти похожие ветки
← →
Justas (2004-10-11 19:00) [0]Вопрос скорее всего покажется глупым, но как отсортировать элементы в ListView по алфавиту?
Заранее спасибо
← →
begin...end © (2004-10-11 19:24) [1]ListViewName.SortType := stText
← →
Vit@ly © (2004-10-11 19:38) [2]begin...end © (11.10.04 19:24) [1]
Не заметил где поймать, на какой столбец кликнули
У себя реализовал следующим образом:function CustomDateSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
begin
result:=0;
if strtodatetime(item1.SubItems[colN])< strtodatetime(item2.SubItems[colN]) then
Result :=1
else
if strtodatetime(item1.SubItems[colN])> strtodatetime(item2.SubItems[colN]) then
Result :=-1;
end;
function CustomNameSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
begin
result:=0;
if (item1.SubItems[colN])> (item2.SubItems[colN]) then
Result :=1
else
if (item1.SubItems[colN])< (item2.SubItems[colN]) then
Result :=-1;
end;procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
if column =ListView1.columns[1] then begin ColN:= 0;
ListView1.CustomSort(@CustomNameSortProc, 0); end;
if column =ListView1.columns[2] then begin ColN:= 1;
ListView1.CustomSort(@CustomNameSortProc, 0); end;
if column =ListView1.columns[3] then begin ColN:= 2;
ListView1.CustomSort(@CustomNameSortProc, 0) end;
if column =ListView1.columns[4] then begin ColN:= 3;
ListView1.CustomSort(@CustomDateSortProc, 0) end;
end;
Лень вспоминать старые наработки.
Идея по клику на:
1..3 столбцы (в работающем у меня проекте) - сортировка по алфавиту
по 4 столбцу - сортировка по дате
Брал, если не ошибаюсь с Дельфи Кинг Дом???
← →
begin...end © (2004-10-11 19:42) [3]
> [2] Vit@ly © (11.10.04 19:38)
> Не заметил где поймать, на какой столбец кликнули
Просто в вопросе этого не было. [1] отсортирует по Caption"ам.
← →
Vit@ly © (2004-10-11 19:58) [4]begin...end © (11.10.04 19:42) [3]
Действительно
← →
Justas (2004-10-12 04:04) [5]
> Vit@ly
Большое спасибо
← →
Семен Сорокин © (2004-10-12 10:20) [6]Vit@ly © (11.10.04 19:38) [2]
хм, а я реализовал так, работает с любым ListView, с любым количеством столбцов с сортировкой в обе стороны.
Используется 2 события: OnColumnClick и OnCompare.procedure TfmFlights.lvColumnClick(Sender: TObject; Column: TListColumn);
begin
TListView(Sender).Tag := Column.Index;
Column.Tag := iif(Column.Tag = 0, 1, 0);
TListView(Sender).AlphaSort;
if Assigned(TListView(Sender).Selected) then begin
TListView(Sender).Selected.MakeVisible(false);
TListView(Sender).Selected.Focused := true
end
end;
procedure TfmFlights.lvCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
begin
with TListView(Sender) do
if Tag = 0 then
Compare := InverseValue(CompareTextLng(Item1.Caption, Item2.Caption), Columns[Tag].Tag = 0)
else
Compare := InverseValue(CompareTextLng(Item1.SubItems[Tag-1], Item2.SubItems[Tag-1]), Columns[Tag].Tag = 0)
end;
CompareTextLng - расширение ф-ии CompareText - где сравниваемые значения добиваются слева пробелами до максимальной длины.
InverseValue - функция котороя по второму аргументу (boolean), инвертирует результат если нужно (Result := -Result).
← →
Семен Сорокин © (2004-10-12 10:22) [7][6] еще
function iif(AOk: boolean; const AValue1, AValue2: integer): integer;
begin
if AOk then
Result := AValue1
else
Result := AValue2
end;
function InverseValue(AValue: integer; AInverse: boolean = true): integer;
begin
Result := AValue;
if AInverse then
Result := -AValue
end;
Страницы: 1 вся ветка
Текущий архив: 2004.10.24;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.034 c