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