Главная страница
    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.035 c
6-1092745571
ИМХО
2004-08-17 16:26
2004.10.24
OnDownloadComplete или не OnDownloadComplete - вот в чем вопрос


4-1095139219
leonidus
2004-09-14 09:20
2004.10.24
Список кодировок


14-1097128849
Fanat
2004-10-07 10:00
2004.10.24
Онлайн игрушки


4-1095799384
BlackTiger
2004-09-22 00:43
2004.10.24
Проблема с COM-портом


8-1088930530
VVV
2004-07-04 12:42
2004.10.24
Обмен переменными между Flash ем и Delphi





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