Autor Tema: JGrid - Reemplazo a ListView  (Leído 13831 veces)

0 Usuarios y 1 Visitante están viendo este tema.

J. Elihu

  • Bytes
  • *
  • Mensajes: 23
  • Reputación: +8/-0
    • Ver Perfil
JGrid - Reemplazo a ListView
« en: Abril 29, 2020, 05:49:01 pm »
Siempre he sido enemigo del ListView, porque no siempre se adapta a lo que quiero, debido a eso decidí hacer un grid a mi gusto, un control con algo mas de personalización y estetica. el control es casi como una version mas liviana de algunos grids que hay en la web, con la ventaja que no lleva dependecias.



El control tiene casi todas las propiedades básicas para un grid, dejo un pequeño ejemplo sobre su uso y el codigo fuente del mismo. El grid no permite agrupar items, reordenar las columnas, ni ocultar y mostrar columnas. Lo de reordenar y ocultar columnas estaban implementadas en una version anterior, pero queria que esta version fuera mas liviana y tuviera todo lo básico y necesario.

El Grid tambien es editable y tiene una rutina para reordenar los items en orden ascendente y descendente para cualquier columna, hay un ejemplo sobre como implementarlo.



Creo que hay algunas partes que pueden perfeccionarse, como por ejemplo el skin para el header.
dejo parta que ustedes mismos lo vean y hagan sus sugerencias.

PD: Se puede implementar el modo de vista LargeIcons como el del ListView, pero aun no le vi tanta utilidad.

Saludos!

*****************************************************************************
Edit:

BUGS FIXED:

Se ha arreglado los errores anteriores y a pedido de [AxioUk], se ha implementado la función MergeColumns, subclasificando el header y dibujando sobre el. Si no se desea la funcion MergeColumns borre todo lo relacionado a MergeColumns, variables, funciones, que no es demasiado. El Skin funciona mejor cuando esta compilado y con los temas de windows aplicados. Nuevamente reporten los errores. :) :)



Saludos!

----------------------------------------------------------------------------------------------------------------------------
EDIT 12/05/2021

Se ha actualizado el control a la versión 2.7, con algunas correcciones y  compatibilidad con DPI alto, corregí algunas cosas que encontré cuando usaba el control, aunque debe haber alguno que otro cabo suelto.

incluyo un ejemplo sobre como añadir el imagelist desde un PNG, segun la configuracion del DPI, sin la necesidad de tener varios bitmaps.
se ha cambiado la forma como se aplica el skin al header, ahora se debe dibujar sobre el header atraves de eventos y con la propiedad HeaderCustomDraw=true, esto con la finalidad de que el usuario pueda aplicar el skin segun el DPI y al modo deseado:

----------------------------------------------------------------------------------------------------------------------------
EDIT 12/08/2021

v2.8 - Ahora se expone el Graphics Handle en el evento ItemDraw para aquellos que quieran hacer un CustomDraw con GDI+ en los Ítems, se han cambiado/añadido algunos eventos: ItemDrawData, ItemDrawMeasureText, ItemDraw, HeaderBkgndDraw, HeaderColumnDraw, HeaderColumnTextDraw, EditStart, EditShow, EditEnd. para la edición crea un control en modo de ejecución, haciendo la grilla editable solo con asignar Editable=True. El Skin del header se debe dibujar ahora a través de eventos.

link: https://mega.nz/file/t9MlRaiT#aA5wwnlGO-oOZzDa0ggluDlydZkh-PoliI-dBhdzg3I

« última modificación: Agosto 12, 2021, 02:26:49 pm por J. Elihu »

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #1 en: Abril 30, 2020, 07:16:58 pm »
Muy bueno Edu, a eso le llamamos en el grupo hecho a lo macho con pelos en el pecho, jaja , muy bien esta todo el grid desde 0 a puro codigo, pensé que utilizaba la clase syslistview32 con apis y esas cosas. siempre quise hacer algo asi para hacerlo personalizado, pero es algo tedioso programarlo, si bien con el syslistview logre muchas cosas siempre me topo con algo que no me gusta, me paso sobretodo con la selección cuando uso custom draw.

si tendria que hacer una observación sobre el tu grid es simplemente un retardo en repintar cuando moves el mouse o haces scroll, pero no se si esto esta hecho aproposito para que evitar un repintado excesivo. lo demas esta perfecto.


Gracias por compartir!

xxdoc

  • Bytes
  • *
  • Mensajes: 20
  • Reputación: +0/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #2 en: Mayo 03, 2020, 07:35:16 am »
Private Declare Function OleTranslateColor Lib "oleaut32.dll" (ByVal lOleColor As Long, ByVal lHPalette As Long, ByVal lColorRef As Long) As Long
Private Declare Function OleTranslateColor2 Lib "olepro32.dll" Alias "OleTranslateColor" _
    (ByVal OLE_COLOR As Long, _
    ByVal hPalette As Long, _
    pccolorref As Long) As Long
           
'''''''FIX IF select systemcolor
If m_Striped And lRow Mod 2 Then
            Dim clrref As OLE_COLOR
            OleTranslateColor2 m_StripedColor, 0, clrref
           
                DrawBack uDC, clrref, iRct
            End If

J. Elihu

  • Bytes
  • *
  • Mensajes: 23
  • Reputación: +8/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #3 en: Mayo 03, 2020, 02:35:15 pm »
Ok, gracias  :) :)

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #4 en: Mayo 16, 2020, 03:40:00 pm »
Mil Gracias Amigo, funciona impecablemente...


_____________________________
Sé un poco de todo y mucho de nada... ;)

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #5 en: Mayo 18, 2020, 07:00:44 pm »
Muy buena la actualizacion, ahora repinta mucho mas rápido al pasar el mouse, y no se como habras hecho para repintar de esa forma el columnheader quedo muy bien!

hardgeek

  • Bit
  • Mensajes: 5
  • Reputación: +0/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #6 en: Abril 25, 2021, 06:53:40 pm »
buenas puedes sacarlo en OCX? trate pero no funciona da error

liza

  • Bit
  • Mensajes: 5
  • Reputación: +0/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView - Modificacion VBFlexgrid similar al JGrid
« Respuesta #7 en: Abril 28, 2021, 01:59:20 pm »
Hola saludos, J. Elihu, una pregunta crees que podrias por favor acondicionar este control: https://github.com/Kr00l/VBFLXGRD

Se le puede agregar propiedades como:

1.- Ordenar en forma ascendente y descendente al hacer click en el encabezado de la columna.
2.- Agregar un Extendedlastcol similar al de VsFlexgrid8.
3.- Agregar alguna función para que el grid en tiempo de ejecucion o de diseño adquiera el thema de de Windows sin importar la versión.
4.- Que la fila seleccionado sea al estilo Windows 7. como en el caso de JGrid2020.

Muchas gracias caballero, agradecería y apreciaría su gran ayuda

J. Elihu

  • Bytes
  • *
  • Mensajes: 23
  • Reputación: +8/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #8 en: Mayo 12, 2021, 08:48:26 pm »
buenas puedes sacarlo en OCX? trate pero no funciona da error

Hola hardgeek, te envio el enlace del proyecto en la version activex, solo habia que cambiar las declaraciones: Control por tipo: Object, tambien le cambie los parametros del evento Scroll, que enviaban un argumento enum, y los reemplace por un argumento tipo long.

link: https://mega.nz/file/tkd0ERbZ#MywiTykWyNxqYq0bszmFVqVJIRrgnJujVHpd0VkQafE

J. Elihu

  • Bytes
  • *
  • Mensajes: 23
  • Reputación: +8/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #9 en: Mayo 12, 2021, 09:05:32 pm »
Hola saludos, J. Elihu, una pregunta crees que podrias por favor acondicionar este control: https://github.com/Kr00l/VBFLXGRD

Se le puede agregar propiedades como:

1.- Ordenar en forma ascendente y descendente al hacer click en el encabezado de la columna.
2.- Agregar un Extendedlastcol similar al de VsFlexgrid8.
3.- Agregar alguna función para que el grid en tiempo de ejecucion o de diseño adquiera el thema de de Windows sin importar la versión.
4.- Que la fila seleccionado sea al estilo Windows 7. como en el caso de JGrid2020.

Muchas gracias caballero, agradecería y apreciaría su gran ayuda


Saludos Liza, siento responder recién tu mensaje, he estado viendo el proyecto en cuestión y esta terrible (tienen muchas cosas, me pierdo fácilmente entre todos eso modulos  ;D ;D) y eso complica un poco encontrar la forma como trabaja el control internamente, lo estaba revisando, me parece que crea el FlexGrid con apis, encontre esto:

Código: [Seleccionar]
VBFlexGridHandle = CreateWindowEx(dwExStyle, StrPtr("VBFlexGridWndClass"), 0, dwStyle, 0, 0, UserControl.ScaleWidth, UserControl.ScaleHeight, UserControl.hWnd, 0, App.hInstance, ByVal ObjPtr(Me))
Si es asi se podria quizas interceptando el WM_PAINT se pueda dibujar el header segun el tema de windows, pero habra que buscar la documentacion sobre la estructura de los columnheaders de FlexGrid.

en cuanto a la seleccion, aun no he encontrado el punto donde se dibuja la misma.

Como mencionaba, creo que se requiere bastante tiempo para estudiar y analizar este proyecto.

« última modificación: Mayo 12, 2021, 09:20:13 pm por J. Elihu »

J. Elihu

  • Bytes
  • *
  • Mensajes: 23
  • Reputación: +8/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #10 en: Mayo 12, 2021, 09:23:37 pm »
Nueva Versión JGrid2.7..... Actualizado!  :) :) :) :) :) 8) 8) 8) 8)

« última modificación: Mayo 12, 2021, 09:31:51 pm por J. Elihu »

liza

  • Bit
  • Mensajes: 5
  • Reputación: +0/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #11 en: Mayo 18, 2021, 01:28:35 pm »
Hola J. Elihu un gran saludo de mi parte y felicitarle por su aporte en código del Grid, lo que detecte son alguno errores por ejemplo al cargar regular cantidad de registros unos 20 000 hay un leve demora y parpadeo al maximizar o minimizar el formulario que lo contiene también al momento de ordenar en forma alfabética ya sea ascendente o descendente no lo ordena adecuadamente con pequeños registros si, pero con grandes registros no, algunas mejoras también se podría implementar como por ejemplo un ExtendedLastCol, una imagen de flecha en la parte del Header que me indique si esta ordenado en forma ascendente o descendente y otros como los del link que le dejo con algunos ejemplos que se podría implementar para mejorar muchísimo el control: https://mega.nz/folder/oR83nSJA#CGR9jWKeAa3XrU2GudSAKA

Sin mas que agradecerte por todo el sacrificio en bien de nuestra comunidad de foros, muchas gracias

JoseLiza

  • Bit
  • Mensajes: 2
  • Reputación: +0/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #12 en: Julio 20, 2021, 07:46:21 pm »
Acabo de hacerle mejoras a este JGrid, como que maneje su propia página de ImageList con lo ya proporcionados en este proyecto, así mismo asignarles los iconos a las columnas desde su creación AddColumn, se agregó la función de AutoSize de las columnas con el doble click en el divisor de las mismas, voy a procurar automatizarlos para que sea como una propiedad.
También se agregó la creación de controles de edición en tiempo de ejecución para que estos puedan ser seleccionables desde el evento RequestEditControl.
Agregue algunas propiedades para poder personalizar los colores de fondo, StripBackColor1 y StripBackColor2.

Creo que aun hay mejoras que se pueden hacer, como crear el Skin para las cabeceras sin necesidad de imagen, pero ya lo voy a ir trabajando dentro de unos cuantos días.

Si creen que se le puede aplicar alguna mejora más… favor de comentarlo.

Descargar: https://mega.nz/file/Mx5G3IjD#jaduZQkYXEEZ3xWL0LRQ1pY8cdqsZYzgFkSvZFWAf9s

JoseLiza

  • Bit
  • Mensajes: 2
  • Reputación: +0/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #13 en: Julio 26, 2021, 09:52:07 pm »
Se agregó la creación del skin desde las propiedades de colores HeaderColorGradient1, HeaderColorGradient2,HeaderColorOver, HeaderColorPressed.

Se agrego la propiedad ColumnAutosize para que el grid se autoajuste de forma automática al llenarlo con datos.

Se agrego el Arrow para identificar las columnas ordenadas de forma Ascendente y Descendente.

Se agrego la propiedad DataSource para que así se pueda enlazar a un control de origen de datos como Adodc

Descargar: https://mega.nz/file/ltIyGLjY#DOAHENUCGDD9MrNskBhj986oD8Yk418VzDXa8eHAC8U

Si tienen algun aporte de ideas se los agradeceré.

hardgeek

  • Bit
  • Mensajes: 5
  • Reputación: +0/-0
    • Ver Perfil
Re:JGrid - Reemplazo a ListView
« Respuesta #14 en: Agosto 06, 2021, 02:36:09 am »
buenas como puedo hacer para solucionar el siguiente problema, decidi implementar el JGRID en mi proyecto pero al hacerlo me da el error siguiente Ambiguous name detected WM_LBUTTONDOWN cuando trato de crear el objeto en tiempo de diseño