Insertar Imagen en un Grid

782 views
Skip to first unread message

integral

unread,
Aug 22, 2023, 11:05:47 PM8/22/23
to Comunidad de Visual Foxpro en Español

Que tal Amigos :

En la Tabla  Gen_Stock de SQL Server guardo la ruta de la imagen según el articulo

Al ordenar por ciertos criterios en el formulario la imagen del Grid comienza a parpadear.

Por ello decidí cambiar la codificación con el siguiente código para probar si es posible quitar de esta forma dicho parpadeo en el  Grid.
 
.Column1.header1.Caption = "Imagen del Producto"
.Column1.AddObject("Imagen_Pic","Image")
.Column1.CurrentControl =  "Imagen_Pic"
.Column1.Imagen_Pic.Visible = .T.
.Column1.Imagen_Pic.Picture = Cur_resulPro.Ruta_Prod
.column1.Imagen_Pic.Stretch = 2    
.Column1.Imagen_Pic.BorderStyle = 0
.Column1.Header1.WordWrap = .T.
.Column1.Sparse = .F.

Ahora como pueden observar se repite la imagen del primer registro.

Algún colega que me pueda orientar con la solución al problema presentado. 

GRID CON PRIMERA IMAGEN.jpg

Saludos,

Integral

Víctor Hugo Espínola Domínguez

unread,
Aug 23, 2023, 10:45:25 AM8/23/23
to publice...@googlegroups.com
En la columna 1 debes enlazar un evento DynamicAlgunoCualquiera con un método del formulario donde asignas la imagen. 
Como ni yo entiendo lo que acabo de escribir es mejor que leas http://sandstorm36.blogspot.com/2012/03/various-images-in-grid-part-ii.html
http://yousfi.over-blog.com/2016/01/vfp-grid-cosmetics-partii.html aquí más ejemplos

Saludos,
Víctor.
Lambaré - Paraguay.



--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/8dfc0a0b-c968-4df5-a062-4aaf6f2ae724n%40googlegroups.com.

Esteban Bastida

unread,
Aug 23, 2023, 10:58:52 AM8/23/23
to publice...@googlegroups.com

Buenos días. Proba con la propiedad de la columna “Parse en .T. o en .F.”

Saludos.

Esteban.

--

Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/8dfc0a0b-c968-4df5-a062-4aaf6f2ae724n%40googlegroups.com.


Libre de virus.www.avast.com
image001.jpg

Esteban Bastida

unread,
Aug 23, 2023, 11:02:07 AM8/23/23
to publice...@googlegroups.com

Buenos días. Proba con la propiedad de la columna “Sparse en .F.”

Saludos.

Esteban.

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de integral
Enviado el: miércoles, 23 de agosto de 2023 00:06
Para: Comunidad de Visual Foxpro en Español
Asunto: [vfp] Insertar Imagen en un Grid

 

 

Que tal Amigos :

--

Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/8dfc0a0b-c968-4df5-a062-4aaf6f2ae724n%40googlegroups.com.


Libre de virus.www.avast.com
image001.jpg

integral

unread,
Aug 23, 2023, 2:33:36 PM8/23/23
to Comunidad de Visual Foxpro en Español
Que tal Amigo Víctor

Muy Buenas Tardes

Gracias por el link que me sugieres. Hice la prueba con el código aplicado en el primer link y claro muestras las 21 imágenes en el Grid. 

Pero aun continua el parpadeo de las imágenes al elegir una de las 3 opciones de ordenamiento de la información

Al inicio aplique otra forma de cargar las imágenes y también se aprecia el mismo parpadeo.

Ya busque información sobre el tema y aplique las soluciones que indican y tampoco sirvieron

Ej.
      Thisform.LockScreen = .T.    

Agradezco tus sugerencias.

Saludos,

Integral
GRID CON IMAGENES PARPADEAN.jpg

Cristian Novoa

unread,
Aug 23, 2023, 3:59:14 PM8/23/23
to Comunidad de Visual Foxpro en Español
No lo hagas con grid, hazlo como son los catálogos web.

Zarlu

unread,
Aug 23, 2023, 5:04:00 PM8/23/23
to Comunidad de Visual Foxpro en Español
Que tal integral!

Te adjunto un proyecto ejemplo. Espero te ayude

Sin título.png

zarlu
Chetumal, Quintana Roo, México
imagen_combo_grid.2zip

integral

unread,
Sep 1, 2023, 11:35:22 PM9/1/23
to Comunidad de Visual Foxpro en Español
Que tal Amigo Zarlu :

Decidí crear una clase contenedor para mostrar ahí la imagen contenida en un cursor, aplico el siguiente código :

     IF Type(".Column1.oImagen") <> "O"                            
           .Column1.AddObject("oImagen","clsImage")
     ENDIF    
     .Column1.CurrentControl = "oImagen"
     .Column1.Sparse = .F.
     .Column1.Width = 87
     .Column1.oImagen.Visible = .T.

Utilizo el siguiente código para enlazar un método al Grid
 
BINDEVENT(Thisform.Grid_Filtro.Column1,"DynamicFontBold",THISFORM,"ImagenDinamica")

El siguiente código contiene el Método :

 WITH Thisform.Grid_Filtro
    .Column1.oImagen.Picture = Cur_ResulPro.ruta_prod
 ENDWITH

No se que falta para que muestre la imagen en el Grid los registros del Cursor

 Agradezco tu comentario y sugerencia.

PD : HE CAMBIADO EL CODIGO PARA EVITAR EL PARPADEO EN EL GRID CUANDO SE REALIZA EL FILTRO...

Atte.,

Integral
Sin Imagen.jpg
Clase_Contenedor.jpg

Zarlu

unread,
Sep 2, 2023, 9:26:31 AM9/2/23
to Comunidad de Visual Foxpro en Español
Buenos días Integral!

Emulé tu código...prueba según lo señalado en rojo

I

IF Type(".Column1.oImagen") <> "O"                            
           .Column1.AddObject("oImagen","Image")

     ENDIF    
     .Column1.CurrentControl = "oImagen"
     .Column1.Sparse = .F.
     .Column1.Width = 87
     .Column1.oImagen.Visible = .T.
    .Column1.oImagen.Picture = Cur_ResulPro.ruta_prod

.Column1.DynamicBackColor = 'thisform.ImagenDinamica()'
EndWith

*BINDEVENT(Thisform.Grid_Filtro.Column1,"DynamicFontBold",THISFORM,"ImagenDinamica")&&comentado

Suerte
zarlu
Chetumal, Quintana Roo, México

integral

unread,
Sep 2, 2023, 5:23:09 PM9/2/23
to Comunidad de Visual Foxpro en Español
Amigo Zarlu :

Seguí tu sugerencia e hice los cambios indicados y tan solo me muestra en el Grid la imagen del 1er. registro en forma repetida.

Al comienzo no utilizaba la clase contenedor para mostrar la imagen lo hacia todo vía código y ahí si funcionaba bien pero seguía el efecto. Vi el siguiente video y se me ocurrió implementarla.


PD : Lo que deseo realmente es evitar el parpadeo de las imágenes dentro del Grid al ordenar los registros.

Saludos,

Integral

integral

unread,
Sep 3, 2023, 10:43:41 AM9/3/23
to Comunidad de Visual Foxpro en Español
Amigo Zarlu

Buenos Días

Haciendo algunas pruebas logre hacer funcionar el Grid utilizando la clase contenedor creada con el siguiente codigo.

    .Column1.DynamicCurrentControl = "THISFORM.ImagenDinamica()" 

Pero el efecto del parpadeo sigue igual.

He creado una nueva clase Contenedor con todos los campos que aparecen en el Grid

En verdad yo no usaba el Grid porque me parecio algo complicado al inicio. Pero hace algunos años trabajando para una empresa aprendí la técnica que utilizaba
el Jefe de Programación que consistía en crear vía programación la funcionalidad del Grid.

Te comento además que me parece  algo extraño que utilizando el Bindevent no se pueda lograr enlazar el Método con el Grid para mostrar la imagen.

Te consulto como le hago ahora para enlazar la nueva clase contenedor al Grid.(ver imagen adjunta)

Agradezco tus comentarios y sugerencias.

Saludos,

Integral
Nueva_Clase_Contenedor.jpg
Message has been deleted

Zarlu

unread,
Sep 3, 2023, 1:23:43 PM9/3/23
to Comunidad de Visual Foxpro en Español
Buenas tardes Integral!

Te adjunto un ejemplo con una clase contenedora en el grid, más o menos como lo comentas.
Pero he cambiado el método de la visualización de las imágenes usando SETALL. Ver INIT del Form.

En los grid prefiero configurar desde producción para no usar tanto código al ejecutar, Osea el grid ya está configurado con objetos agregados y etc...
No es que no funcione el BindEvent sino creo que hay codificarlo de otra manera. Ya que, según entiendo, valida se ejecute un primer método para entonces ejecutar el segundo.
Haré pruebas al respecto.

Cabe precisar que mis pruebas se basan en una sola tabla/cursor donde están contenidas las rutas/nombres de los archivos de las imágenes . No sé cual sea tu escenario.

Suerte
zarlu
Chetumal, Quintana Roo, México

Sin título.png
form-class-setall.zip
Message has been deleted

Zarlu

unread,
Sep 3, 2023, 1:48:03 PM9/3/23
to Comunidad de Visual Foxpro en Español
Qué tal Integral!

Aquí tienes el ejemplo con BindEvent.
De uno de los códigos que subiste anteriormente sólo faltaba "detonarlo" agregando la línea:

    .Column1.DynamicFontBold="THISFORM.ImagenDinamica()"

al configurar el grid.

zarlu
Chetumal, Quintana Roo
grid-bindevent.zip

Alejandro Isla

unread,
Sep 3, 2023, 10:26:06 PM9/3/23
to Comunidad de Visual Foxpro en Español
Buena, respecto al parpadeo, no probaste poner un  thisform.LockScreen = .t. al inicio del click del botón y un thisform.LockScreen = .f. al final.

De esa forma no te estaría mostrando el refresco de cada imagen.

Saludos.

integral

unread,
Sep 3, 2023, 10:42:04 PM9/3/23
to Comunidad de Visual Foxpro en Español
Que tal Amigo :

Te comento que utilizo el código que mencionas, parece que al 1er. filtro el parpadeo no es tan notorio pero a medida que se utiliza los otros 2 filtros ahí ya se agudiza el parpadeo de las imágenes.

Alguna otra sugerencia.

Saludos,

Integral

Hernán Medina

unread,
Sep 5, 2023, 10:43:20 PM9/5/23
to publice...@googlegroups.com
Buenas noches amigo integral. He tenido varias experiencias en el tema de los Grid. Me tropecé con el mismo caso que te pasa a tí.
Después de profundizar en la ruta de los eventos que allí suceden, encontré un evento que se disparaba igual que el evento OnMove de un control, así que para poder parar el parpadeo simplemente utilice una propiedad a la cual le asignaba el valor de un campo de la tabla actualmente en uso y que estaba enlazada al grid, que me indicaba si el registro era el mismo. En caso de ser el mismo, retornaba sin más, de lo contrario lo dejaba pasar y actualizaba la propiedad con un campo del nuevo registro. Así lo resolví hace muchos años y hasta la fecha no he tenido problemas de parpadeo en los grid y cuando navego en ellos...
saludos,

Ans. Hernán Medina.

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Francisco

unread,
Sep 12, 2024, 12:35:35 PM9/12/24
to Comunidad de Visual Foxpro en Español
Tengo el mismo problema que el compañero Integral, he intentado de todo pero el parpadeo incluso el cambio de imágenes entre celdas sigue.

Empleo el DynamicFontBold

THIS.column2.DynamicFontBold = "Thisform.mostrar_imagen_producto(This.Columns(2).Articulo_imagen1,MICURSOR_ARTICULOS.IMAGEN)"

Y el metodo Thisform.mostrar_imagen_producto
LPARAMETERS toImagen, tcImagen
toImagen.Picture=tcImagen

Lo malo es que he visto que ese metodo mostrar_imagen_producto se realiza muchas veces, incluso al moverse por el grid lo que hace que se aprecie algo raro, parpadeos, incluso a veces repite la misma imagen varias veces.

Lo que indica el compañero ga.......w@gmail.com , sinceramente no lo entiendo, dado que habla de un evento pero no dice cual... 

Francisco

unread,
Sep 26, 2024, 4:15:56 AM9/26/24
to Comunidad de Visual Foxpro en Español
Bueno por si alguno tiene este problema del parpadeo de la imágenes o cosas raras al pulsar sobre ellas como que desaparecen o se intercambian. Esto pasa cuando el origen de datos del grid es un consulta sql y se va actualizando. La solución que he encontrado es en vez de usar el DynamicFontBold de la columna es crear el backstyle_access en un objeto container que contiene la imagen y desde el llamar al procedimiento del form mostrar_imagen_producto pasando como parametros el propio container y la ruta y nombre completo de la imagen. 

Y el metodo Thisform.mostrar_imagen_producto
LPARAMETERS toImagen, tcImagen
toImagen.Picture=tcImagen

Para evitar que se realice muchas veces podeis poner un tipo de control en el Backsyle_access tal que asi

*To do: Modify this routine for the Access method
IF USED("CURSOR_X")
IF this.nid <> CURSOR_X.ID
this.nid = CURSOR_X.ID
Thisform.mostrar_imagen_producto(This,CURSOR_X.IMAGEN)
endif
ENDIF
RETURN THIS.BackStyle


Hernán Medina

unread,
Nov 11, 2024, 10:36:22 AM11/11/24
to publice...@googlegroups.com
Hola a todos, lo que traté de explicar en el tema de parpadeo de cualquier fila y que además se repiten, es agregar una propiedad que se encargue de validar si en registro al cual estoy visualizando es el mismo que anteriormente había visualizado.
Cuando se muestra un grid con datos de cualquier tipo, se ejecuta un evento relacionado al movimiento de los registros en dicho grid.
En ese evento es donde se debe añadir en las primeras líneas si la referencia de un registro es el mismo, si es el mismo, se retorna o no hace nada, si es diferente, significa que se puede visualizar...

Propiedad
this.xReferenciaAnterior=null
...
...
...
evento que se dispara al moverse en el grid y que tenga o no código igual se dispara causando dicho efecto. Yo lo ubiqué como el evento  
GRID_onSelChange o su equivalente, en ese evento es donde coloqué un código como este...

if this.xReferenciaAnterior=cCodigo   // Aquí puede ser una variable, campo de la tabla enlazado, un control enlazado, etc. en éste caso                                                                           //(cCodigo es una variable que tiene un campo de la tabla que está visualizando en el grid).
   return
endif
...
...
this.xReferenciaAnterior=cCodigo
...
return

de esa forma fué que logré quitar el parpadeo.

Saludos...



Reply all
Reply to author
Forward
0 new messages