Hola, hace algún tiempo implementé el código que realiza lo que buscas, aquí lo tienes:
Código Delphi
[-]procedure SetColumnImage(const ListView: TListView; Column: Integer; Down: Boolean);
var
n: Integer;
procedure RemoveImage(Index: Integer);
var
Header: THandle;
HDItem: THDItem;
begin
Header := ListView_GetHeader(ListView.Handle);
FillChar(HDItem, SizeOf(HDItem), 0);
HDItem.Mask := HDI_BITMAP or HDI_IMAGE or HDI_FORMAT;
Header_GetItem(Header, Index, HDItem);
HDItem.fmt := HDItem.fmt and not HDF_SORTUP and not HDF_SORTDOWN
and not HDF_BITMAP_ON_RIGHT and not HDF_IMAGE;
Header_SetItem(Header, Index, HDItem);
end;
procedure SetImage(Index: Integer; Direction: Boolean);
var
Header: THandle;
HDItem: THDItem;
begin
Header := ListView_GetHeader(ListView.Handle);
FillChar(HDItem, SizeOf(HDItem), 0);
HDItem.Mask := HDI_BITMAP or HDI_IMAGE or HDI_FORMAT;
Header_GetItem(Header, Index, HDItem);
HDItem.fmt := HDItem.fmt and not HDF_SORTUP and not HDF_SORTDOWN
and not HDF_IMAGE or HDF_BITMAP_ON_RIGHT;
if Direction = true then HDItem.fmt := HDItem.fmt or HDF_SORTUP
else
HDItem.fmt := HDItem.fmt or HDF_SORTDOWN;
Header_SetItem(Header, Index, HDItem);
end;
begin
for n:=0 to ListView.Columns.Count - 1 do
RemoveImage(n);
SetImage(Column, not Down);
end;
El parámetro Down: Boolean sirve para indicar si la dirección es mirando hacia abajo, en caso de que "Down" sea false, entonces pinta la flecha mirando para arriba.
Ejemplo de uso:
Código Delphi
[-]procedure TForm1.FormCreate(Sender: TObject);
begin
SetColumnImage(ListView1, 0, false);
end;
Saludos, espero que te sea útil.
Editado: Se me olvidó poner que se debe añadir "CommCtrl" en los USES!