24.11.2014, 17:35
|
|
Новичок
|
|
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
|
|
Здравствуйте.
А в
Код:
LVN_COLUMNCLICK : ListView_SortItems(LV, @CompareFunc, PNMLISTVIEW(lParam).iSubItem);
оставить так(3 параметр?)?
Код:
LVSize: Integer;
isSorted: Boolean;
Где они еще используются?
isSorted - прямая, обратная сортировка.
LVSize = я так понимаю, клик по SubItem.
Забыл: У меня только строки.
Кликаю по колонке №0- - нет сотировки. Кликаю по любой другой -- сортирует по №0.
что не так?
заполняю:
Код:
var
item : tLVITEM;
...
for zz := 0 to 10 do
begin
FillChar(item, sizeof(item), 0 );
item.mask := LVIF_TEXT;
item.iItem := ListView_GetItemCount(lv);
item.pszText := PChar(inttostr(zz));
ListView_InsertItem(LV, Item);
for b := 1 to 7 do
begin
item.iSubItem := b;
item.pszText := PChar(nttostr(random(100)));
ListView_SetItem(LV, item);
end;
end;
Код:
LVN_COLUMNCLICK:
begin
if (LVSize = PNMLISTVIEW(lParam).iSubItem) then // Если это та же самая колонка - меняем направление сортировки
isSorted := not isSorted
else // иначе - прямая сортировка
isSorted := False;
LVSize := PNMLISTVIEW(lParam).iSubItem;
ListView_SortItems(LV, @CompareFunc, PNMLISTVIEW(lParam).iSubItem);
end;
Код:
function CompareFunc(lParam1, lParam2, SortType : Longint) : Integer; stdcall;
var
lvi : LV_ITEM;
Size1,
Size2 : Integer;
Column : Word;
St1, St2 : String;
begin
Column := LOWORD(SortType);
lvi.mask := LVIF_TEXT;
if Column = 0 then
begin
Result := AnsiCompareText(LV_GetItemText(LV, lParam1, 0), LV_GetItemText(LV, lParam2, 0));
end
else if Column = LVSize + 1 then
{begin
try
Size1 := StrToInt(Copy(LV_GetItemText(LV, lParam1, Column), 1, Pos(' ', LV_GetItemText(LV, lParam1, Column)) - 1));
Size2 := StrToInt(Copy(LV_GetItemText(LV, lParam2, Column), 1, Pos(' ', LV_GetItemText(LV, lParam2, Column)) - 1));
Result := Size1 - Size2;
except
Result := 0;
end;
end
else }
begin
St1 := LV_GetItemText(LV, lParam1, Column);
St2 := LV_GetItemText(LV, lParam2, Column);
Result := AnsiCompareText(St1, St2);
if (St1 = '') or (St2 = '') then
Result := 0;
end; // SetWindowText(Form, IntToStr(LVSize)); }
if isSorted then
Result := Result
else
Result := -Result;
end;
|