Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
3-1096264060
V-A-V
2004-09-27 09:47
2004.10.24
Не проходят несколько Left Join - ов


1-1097344096
VitGun
2004-10-09 21:48
2004.10.24
Удаление пустых строк из Memo


1-1097467293
TeNY
2004-10-11 08:01
2004.10.24
Как рисовать на экране?


14-1096972138
Kadr
2004-10-05 14:28
2004.10.24
Ваше мнение?


1-1097049347
456
2004-10-06 11:55
2004.10.24
создать кнопку (на форме) во время работы программы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский