Mira,es muy fácil lo de la selección y el ordenamiento.
La selección: RowSelect a True. En cuanto al ordenamiento te digo la manera en que yo lo hago y que siempre me han dicho que es la más rápida.
Primero escribes una función de ordenamiento:
Código:
function CustomProc(Item1,Item2:TListItem;Data:Integer):Integer;stdcall;
en la implementación:
Código:
function CustomProc(Item1,Item2:TListItem;Data:Integer):Integer;stdcall
begin
Result:=0;
case Data of
0:Result:=CompareText(Item1.Caption,Item2.Caption);
1:Result:=StrToInt(Item1.SubItems[0])-StrToInt(Item2.SubItems[0]);
end;
if not Form1.FOrders[Data] then
Result:=Result*-1
end;
Te habrás fijado en FOrders,ese debe ser un arreglo de boolean (es una manera), indexado en 0(cero) y con el tamaño acorde al numero de columnas del TListView en el ejemplo es con 2 columnas,y suponiendo que la primera contiene Strings y la segunda numeros enteros.
Luego en el OnColumnClick del TListView:
Código:
procedure TfmMain.lvListaColumnClick(Sender: TObject; Column: TListColumn);
begin
FOrders[Column.Index]:=not FOrders[Column.Index];
(Sender as TListView).CustomSort(@CustomProc,Column.Index);
end;
En cuanto a las flechitas para arriba y para abajo,imagino que se puedan dibujar en los OnCustomDraw y familia,pero no te lo puedo asegurar ya que no lo he hecho nunca.Espero te sirva