In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

TDBCardBox, TMemDataSet e Imagenes

Foro de Xailer profesional en español
Responder
Claudio C
Mensajes: 60
Registrado: Dom Sep 20, 2015 8:13 pm
Ubicación: Buenos Aires

TDBCardBox, TMemDataSet e Imagenes

Mensaje por Claudio C »

Estimados:

Tengo un TDBCardBox asociado a un TMemDataSet
¿ Es posible mostrar una imagen en la tarjeta ?
La imágenes están en disco. En el memdataset tengo el nombre de los jpg.
Si es posible ... no encuentro cómo ni dónde.

Gracias por su tiempo
Claudio C
Mensajes: 60
Registrado: Dom Sep 20, 2015 8:13 pm
Ubicación: Buenos Aires

Re: TDBCardBox, TMemDataSet e Imagenes (ok)

Mensaje por Claudio C »

Me respondo a Mi mismo.

Es simple... sobre todo si lees el manual :)

Dejo el ejemplo basico que quiza ayude a otro compañero. Saludos.

method cgaActividad() CLASS fmGNreitra

local aFila := { }
local oPicture
local a := { ;
{'foto_02.jpg' , 'Carlos' , 'Puesto' , 'Sector' , 'Producto' , 'Tarea' , 'Obs '} , ;
{'foto_03.jpg' , 'Maria' , 'Puesto' , 'Sector' , 'Producto' , 'Tarea' , 'Obs '} , ;
{'foto_01.jpg' , 'Jode' , 'Puesto' , 'Sector' , 'Producto' , 'Tarea' , 'Obs '} ;
}

FOR EACH aFila in a
oPicture := TPicture():New( Self )
oPicture:LoadFromFile( 'graf/'+aFila[1] )
aFila[1]:=oPicture
NEXT

::oMDSpuestos:Open( a , {'Foto' , 'Nombre' , 'Puesto' , 'Sector' , 'Producto' , 'Tarea' , 'Obs '} )
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: TDBCardBox, TMemDataSet e Imagenes

Mensaje por ignacio »

Buenos días,

Tu solución funciona, pero no es la más adecuada cuando la matriz tiene cientos o miles de filas ya que estás creando innecesariamente un montón de objetos GDI que pueden perjudicar a tu aplicación. Mi recomendación es que lo resuelvas así (NO PROBADO):

Código: Seleccionar todo

METHOD CardBox1CardPaint( oSender, oItem, Value, nClrText, nClrPane, nPos, lActive, hDC, aRect ) CLASS TForm1

 WITH OBJECT oItem
  IF :nItem == 1
   Value := Memoread( 'graf/'+Value )
  ENDIF
 END WITH

RETURN Nil
Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Claudio C
Mensajes: 60
Registrado: Dom Sep 20, 2015 8:13 pm
Ubicación: Buenos Aires

Re: TDBCardBox, TMemDataSet e Imagenes (ok - mejor! )

Mensaje por Claudio C »

Estimado Ignacio.

Funciona Perfecto !

Al no tener eventos en el TCardItem ( busque OnGetData() del item ) ... le entré al problema por los datos.
No se me ocurrió ir al contenedor y tratar el problema con un evento desde allí.
Además, mi dataset solo tendrá 10 , como máximo 20 registros ... y esa cantidad de imagenes se soportaba sin problema.
Pero la mejor solución es la propuesta por Ud. Lejos.

Menos mal que están los que saben !

Muchas Gracias.
Claudio


ignacio escribió:Buenos días,

Tu solución funciona, pero no es la más adecuada cuando la matriz tiene cientos o miles de filas ya que estás creando innecesariamente un montón de objetos GDI que pueden perjudicar a tu aplicación. Mi recomendación es que lo resuelvas así (NO PROBADO):

Código: Seleccionar todo

METHOD CardBox1CardPaint( oSender, oItem, Value, nClrText, nClrPane, nPos, lActive, hDC, aRect ) CLASS TForm1

 WITH OBJECT oItem
  IF :nItem == 1
   Value := Memoread( 'graf/'+Value )
  ENDIF
 END WITH

RETURN Nil
Saludos
Responder