2016-01-29 6 views
-1

Я пытаюсь сортировать элементы ListView по их показателям изображения. Итак, если элемент установлен для изображения 4, он останется перед всеми другими элементами. Я не могу понять этого. Может кто-то указать мне верное направление?пытается сортировать список по индексу изображения

+1

Показать, что у вас есть, и попросить о помощи. –

+0

как вы форматируете код в сообщениях здесь? –

+0

Я получил код от поиска Google http://delphi.about.com/od/adptips2005/qt/qtsortlistview.htm модифицирован его немного, чтобы использовать ImageIndex, но не было ничего хорошего –

ответ

0
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; 
    Data: Integer; var Compare: Integer); 
begin 
    if Item1.ImageIndex = 4 then 
    Compare := -1 // Item1 should be first 
    else if Item2.ImageIndex = 4 then 
    Compare := 1 // Item2 should be first 
    else 
    Compare := 0; // the order doesn't matter 
end; 

Это положит все элементы с ImageIndex 4 спереди, но в любом случае у всех предметов будет естественный порядок.

Если вы хотите получить больше контроля над тем, как элементы изображения сортируются по отношению друг к другу, и как другие элементы сортируются по отношению друг к другу, вы можете расширить сравнения:

procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; 
    Data: Integer; var Compare: Integer); 
begin 
    if Item1.ImageIndex = 4 then 
    begin 
    if Item2.ImageIndex = 4 then 
    begin 
     // two image items, do other comparisons here... 
     Compare := ...; 
    end else 
    begin 
     // image and non-image items, image item goes first... 
     Compare := -1; 
    end; 
    end 
    else if Item2.ImageIndex = 4 then 
    begin 
    // non-image and image items, image item goes first... 
    Compare := 1; 
    end else 
    begin 
    // two non-image items, do other comparisons here... 
    Compare := ...; 
    end; 
end;