Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.034 c
1-1097049379
Галинка
2004-10-06 11:56
2004.10.24
Диалоги


9-1087530602
VolanD
2004-06-18 07:50
2004.10.24
Вращение точки


1-1097474516
aleshap
2004-10-11 10:01
2004.10.24
Как определить какие свойства изменились


14-1096880228
Sour
2004-10-04 12:57
2004.10.24
Где найти алгоритмы методов краткосрочного прогнозирования


3-1096274444
Bless
2004-09-27 12:40
2004.10.24
Как восстановить удаленную таблицу!