Здравствуйте, DreamMaster, Вы писали:
DM>Подскажите, пожалуйста, как отсортировать TListView. Все перепробовал — результата никакого... Буду признателен любым рекомендациям. DM>вот как я делаю сортировку: (получается полная белиберда, хотя я думаю, что все делаю правильно)
Вожможно событие OnCompare поможет.
.....
ColumnToSort: integer;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
ColumnToSort := 1;
end;
procedure TForm1.ListView4ColumnClick(Sender: TObject; Column: TListColumn);
begin
if Abs(ColumnToSort-1) = Abs(Column.Index) then ColumnToSort := -1 * ColumnToSort else ColumnToSort := Column.Index + 1;
TCustomListView(Sender).AlphaSort;
end;
procedure TForm1.ListView4Compare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
var
Col: integer;
begin
Col := Abs(ColumnToSort) - 1;
if Col = 0 then begin// в первом столбце у меня числа
Compare := CompareValue(StrToInt(Item1.Caption), StrToInt(Item2.Caption));
end else if Col = 1 then begin// здесь у меня дата
Compare := CompareDateTime(StrToDateTime(Item1.SubItems[Col - 1]), StrToDateTime(Item2.SubItems[Col - 1]));
end else begin// ну а тут всякий текст
Compare := CompareText(Item1.SubItems[Col - 1],Item2.SubItems[Col - 1]);
end;
if ColumnToSort < 0 then Compare := -1 * Compare;
end;
Подскажите, пожалуйста, как отсортировать TListView. Все перепробовал — результата никакого... Буду признателен любым рекомендациям.
вот как я делаю сортировку: (получается полная белиберда, хотя я думаю, что все делаю правильно)
procedure TForm1.ListView4ColumnClick(Sender: TObject;
Column: TListColumn);
begin
ListView_sorting(false, ListView4, Column.Index);
end;
procedure TForm1.ListView_sorting(Down:boolean;var ListView:TListView; column: integer);
Var Skach,m,n:integer;
St:boolean;
Tmp:TListItem;
begin
if(column=0) then exit; //колонка с порядковыми номерами
dec(column);
Skach:=ListView.Items.Count-1;
While Skach>0 do
begin
Skach:=Skach div 2;
repeat
St:=True;
for m:=0 to ListView.Items.Count-1-Skach do
begin
n:=m+Skach;
if ( Down and (ListView.Items.Item[n].SubItems[column]<ListView.Items.Item[m].SubItems[column]) )
or ( (not Down) and (ListView.Items.Item[n].SubItems[column]>ListView.Items.Item[m].SubItems[column]) ) then
begin
Tmp:=ListView.Items.Item[m];
ListView.Items.Item[m]:=ListView.Items.Item[n];
ListView.Items.Item[n]:=Tmp;
St:=False;
end;
end;
until St;
end;
end;
Здравствуйте, DreamMaster, Вы писали:
S>>Ты код читал?
DM>??? что ты хочешь этим сказать?
В смысле, что пора спуститья на землю и, засучив рукава, переваривать код by Vital, пытаясь накормить им компилятор. В случае же возникновения вопросов сверяться с хелпом: OnColumnClick, AlphaSort, OnCompare, CompareText example.
Ну, а если ничего не получается, излагаешь обнаруженные трудности простым и понятным языком: Как правильно задавать вопросы.
Кроме того, "Тему" обычно не меняют, если, конечно, обсуждение не сильно от нее отошло.