Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-12-2007
Esau Esau is offline
Miembro
 
Registrado: may 2003
Ubicación: Canto Rey
Posts: 140
Poder: 21
Esau Va por buen camino
ListView interesante

Hola Foristas, les cuento estoy haciendo una aplicación interesante en la cual tengo un ListView con datos de todo tipo, el ListView tiene en su propiedad ViewStyle = vsReport. Para que aparezca como un grid. Tengo varias columnas, cada columna de un tipo: enteros , textos y fechas.
Cuando el usuario desea que los datos se muestren en forma ascendente ordenado por una columna solo hace clic en el titulo de la columna, si desea que este ordenado pero de forma descendente vuelve ha hacer clic en la columna y se ordena de forma descendente. Hasta este punto todo funciona bien, pero me gustaría que al momento que los datos se encuentren de forma ascendente o descendente se dibuje en el titulo una flechita según sea el caso o algo muy parecido al explorador de Windows,
En el Explorador si Uds. hacen Clic al nombre se ordena y se dibuja en el titulo una flecha que nos indica en que orden se encuentra ordenado, si vuelven ha hacer clic en la misma columna el orden se invierte y también la flecha o indicador.

En Delphi existe alguna forma de hacer lo mismo en un ListView?

Saludos y Gracias
Responder Con Cita
  #2  
Antiguo 09-12-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 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
  #3  
Antiguo 10-12-2007
Esau Esau is offline
Miembro
 
Registrado: may 2003
Ubicación: Canto Rey
Posts: 140
Poder: 21
Esau Va por buen camino
Funciona de Maravilla

Funciona de maravilla, no me queda nada mas que agradecerte por tu tiempo...

Saludos y Gracias de Nuevo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Interesante Librero egostar La Taberna 6 12-07-2007 04:38:17
Web interesante FunBit Seguridad 5 05-09-2005 14:27:03
Problema interesante hgiacobone Tablas planas 4 10-06-2005 19:41:13
Virtual Listview e iconos virtuales. Muy interesante pero... Playwithfire Varios 4 14-10-2004 15:06:28
Interesante pregunta.... Pandre Internet 0 18-09-2003 03:31:24


La franja horaria es GMT +2. Ahora son las 18:14:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi