Ver Mensaje Individual
  #2  
Antiguo 09-12-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Reputación: 19
xEsk Va por buen camino
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
    // Get the ListView Header Handle
    Header := ListView_GetHeader(ListView.Handle);
    FillChar(HDItem, SizeOf(HDItem), 0);
    HDItem.Mask := HDI_BITMAP or HDI_IMAGE or HDI_FORMAT;
      // current status secure
    Header_GetItem(Header, Index, HDItem);
    // arrow delete
    HDItem.fmt := HDItem.fmt and not HDF_SORTUP and not HDF_SORTDOWN
      and not HDF_BITMAP_ON_RIGHT and not HDF_IMAGE;
    // changes use
    Header_SetItem(Header, Index, HDItem);
  end;

  procedure SetImage(Index: Integer; Direction: Boolean);
  var
    Header: THandle;
    HDItem: THDItem;

  begin
    // Get the ListView Header Handle
    Header := ListView_GetHeader(ListView.Handle);
    FillChar(HDItem, SizeOf(HDItem), 0);
    HDItem.Mask := HDI_BITMAP or HDI_IMAGE or HDI_FORMAT;
    // current status secure
    Header_GetItem(Header, Index, HDItem);
    // arrow is to appear right
    HDItem.fmt := HDItem.fmt and not HDF_SORTUP and not HDF_SORTDOWN
      and not HDF_IMAGE or HDF_BITMAP_ON_RIGHT;
    // set direction
    if Direction = true then //sdUp then
      HDItem.fmt := HDItem.fmt or HDF_SORTUP
    else
      HDItem.fmt := HDItem.fmt or HDF_SORTDOWN;
    // changes use
    Header_SetItem(Header, Index, HDItem);
  end;

begin
  // remove icons
  for n:=0 to ListView.Columns.Count - 1 do
    RemoveImage(n);
  // set the "arrow icon"
  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!

Última edición por xEsk fecha: 09-12-2007 a las 22:41:38.
Responder Con Cita