| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 19 Feb, 2008 1:50 pm Asunto: Error al asignar un TQRImage |
|
|
Tengo un TQRImage que cargo a partir de una tabla Firebird. Lo tengo hecho así:
| Código: | QRImage1->Picture->Assign(Query->FieldByName("Imagen")); |
Exactamente igual lo tengo hecho para un TImage de otro formulario. En algunos casos en la fila seleccionada no hay ninguna imagen, pero mientras el TImage me muestra el cuadro en blanco, al hacer el Preview() del QuickReport me da un error: Bitmap image is not valid.
He probado a poner en el Preview() un try...catch, pero sigue dando el error; he probado a verificar si el campo de la tabla tiene contenido o si este es nulo, pero no hace nada. Ejecuta la línea de carga anterior sin dar error en ningún caso hasta que se visualiza.
¿Cómo puedo evitarlo? _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 19 Feb, 2008 9:59 pm Asunto: |
|
|
Si el contenido del campo NO es un BMP, el error siempre sale pues los componente del Quick Report solo manejan BMP
una solucion que me funciona es convertir el contenido del campo a un BMP de la siguiente manera
| Código: | Graphics::TBitmap *tbmp = new Graphics::TBitmap();
// de esta manera seria en tu caso
tbmp->Assign(Query->FieldByName("Imagen"));
// pero si el campo es un JPG, recuerda extraerlo y enviarlo
// como bmp usando lasl funciones del foro para el tratamiento
// de imagenes en Firebird.
//tbmp->Assign(::BLOBtoJPG(Query->FieldByName("Imagen")));
// y posteriormente ya lo insertas en el QRImage
// que tienes
QRImage1->Picture->Assign(tbmp); |
Saludos _________________
 |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 20 Feb, 2008 8:08 am Asunto: |
|
|
Gracias César. Lo probaré en cuanto pueda y casi seguro que me resolverá el problema. No obstante si me he dado cuenta que el error aparece en aquellos elementos en los que el campo debería estar vacío porque sé que no tienen imagen en la tabla, y esto es lo que me tiene desconcertado. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 20 Feb, 2008 8:46 am Asunto: |
|
|
¡Solucionado! Me ha bastado con comprobar si había lago. Lo he hecho así:
| Código: | TMemoryStream *msImagen = new TMemoryStream;
static_cast<TGraphicField>(Query->FieldByName("Imagen"))->SaveToStream(msImagen);
if (msImagen->Size > 0)
QRImage1->Picture->Assign(Query->FieldByName("Imagen")); |
_________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 20 Feb, 2008 8:48 am Asunto: |
|
|
puedes evaular antes el campo de la siguiente manera
| Código: | if( !Query->FieldByName("Imagen")->Value.IsEmpty() )
{
Graphics::TBitmap *tbmp = new Graphics::TBitmap();
// de esta manera seria en tu caso
tbmp->Assign(Query->FieldByName("Imagen"));
// pero si el campo es un JPG, recuerda extraerlo y enviarlo
// como bmp usando lasl funciones del foro para el tratamiento
// de imagenes en Firebird.
//tbmp->Assign(::BLOBtoJPG(Query->FieldByName("Imagen")));
// y posteriormente ya lo insertas en el QRImage
// que tienes
QRImage1->Picture->Assign(tbmp);
} |
_________________
 |
|
| Volver arriba |
|
 |
|