Página 1 de 1

TDBCardBox, TMemDataSet e Imagenes

Publicado: Lun Feb 12, 2018 11:31 pm
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

Re: TDBCardBox, TMemDataSet e Imagenes (ok)

Publicado: Mar Feb 13, 2018 12:22 am
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 '} )

Re: TDBCardBox, TMemDataSet e Imagenes

Publicado: Mar Feb 13, 2018 11:30 am
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

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

Publicado: Mar Feb 13, 2018 4:25 pm
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