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


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Sab 17 Dic, 2016 11:51 am Asunto: Limpiar un TImage |
|
|
Tengo un formulario con un TImage que cargo a partir de una tabla de Firebird. Hasta ahí, ningún problema. Si la ficha tiene la foto, la muestra. El problema viene cuando avanzo en la tabla; en este caso, si al nueva ficha no tiene foto que mostrar, el formulario no me limpia el TImage. Tengo puesto este código para cargar la imagen en el formulario:
| Código: | TImage *Imagen = static_cast<TImage>(Source);
Imagen->Picture->Assign(NULL);
Imagen->Picture->Assign(qryTemp->FieldByName(Imagen->Name)); |
y el query se carga a partir de una vista en FB y esto se ejecuta bien. ¿Qué puedo estar haciendo mal? _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Ultima edición por Angel el Sab 17 Dic, 2016 12:27 pm, editado 1 vez |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Sab 17 Dic, 2016 12:17 pm Asunto: |
|
|
Hola Angel
Yo siempre he "rellenado" los Timages para borralos leyendo un bmp en blanco y en vez de | Código: | Imagen->Picture->Assign(NULL); | hago | Código: | Imagen->Picture->LoadFromFile("vacio.bmp") |
Saludos |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Sab 17 Dic, 2016 12:33 pm Asunto: |
|
|
| bosoft escribió: | Hola Angel
Yo siempre he "rellenado" los Timages para borralos leyendo un bmp en blanco |
Gracias por la respuesta, pero ¡le da lo mismo! Me he creado un BMP en blanco y sigue haciendo lo mismo: No me limpia el TImage previo.  _________________ 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: Sab 17 Dic, 2016 12:42 pm Asunto: |
|
|
Hay algo más y ya si que me pierdo del todo. Por probar he puesto la propiedad visible del TImage en false salvo que haya una imagen a poner.
| Código: | TImage *Imagen = static_cast<TImage>(Source);
Imagen->Visible = true;
Imagen->Picture->Assign(qryTemp->FieldByName(Imagen->Name)); |
Y sigue haciendo lo mismo. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Sab 17 Dic, 2016 12:47 pm Asunto: |
|
|
| Angel escribió: | | bosoft escribió: | Hola Angel
Yo siempre he "rellenado" los Timages para borralos leyendo un bmp en blanco |
Gracias por la respuesta, pero ¡le da lo mismo! Me he creado un BMP en blanco y sigue haciendo lo mismo: No me limpia el TImage previo.  |
Yo lo hago justo antes de leer la imagen nueva. Y siempre me a funcionado
Si no te funciona.... ya me pillas
Saludos |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Sab 17 Dic, 2016 9:11 pm Asunto: |
|
|
Ese código debería limpiar el TImage, si es un Bitmap también debe limpiar así:
| Código: |
Imagen->Picture->Bitmap->Assign(NULL);
|
Dependiendo de si tienes un bucle que no permita leer los mensajes de Windows, quizás debas añadir:
| Código: | Imagen->Update(); |
Saludos. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 19 Dic, 2016 9:54 am Asunto: |
|
|
Yo también lo había hecho siempre así y siempre me había funcionado.
[quote=escafandra;511855] | Código: | Imagen->Picture->Bitmap->Assign(NULL); | [/quote]
¡Da lo mismo lo que ponga! Con Bitmap->, con ->Update()... No lo limpia.  _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Lun 19 Dic, 2016 4:48 pm Asunto: |
|
|
| Angel escribió: |
¡Da lo mismo lo que ponga! Con Bitmap->, con ->Update()... No lo limpia.  |
¿Si minimizas la ventana y la restauras, o si la mueves fuera del área del monitor, se borra?
Pienso que es un problema de "repintado".
Prueba este código que obliga a un repintado total:
| Código: | void ReDrawWindow(HWND hWnd)
{
TRect cr;
::GetClientRect(hWnd, &cr);
InvalidateRect(hWnd, &cr, true);
SendMessage(hWnd, WM_NCPAINT, 0, 0);
RedrawWindow(hWnd, &cr, 0, RDW_FRAME|RDW_ERASE|RDW_INVALIDATE|RDW_UPDATENOW|RDW_ALLCHILDREN);
}
|
Saludos. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 19 Dic, 2016 6:00 pm Asunto: |
|
|
CReo que el problema debe ser otro. El pintado de la iamgen, igual que el resto de campos del formulario, lo tengo en una función externa que uso en varios formularios por aquello de ahorrar código. Sin embargo, si ese campo concreto lo cargo directamente en el propio formulrio sí se pinta bien; lo he hecho así:
| Código: | void __fastcall TfPersona::VerFicha(int Codigo)
{
LimpiaForm(this);
Query->Close();
Query->SQL->Text = "SELECT FIRST 1 * FROM Fp01 WHERE CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') AND Codigo = :Codigo";
Query->ParamByName("Codigo")->AsInteger = Codigo;
Query->Open();
if (!Ficha(this, Query))
return;
Foto->Picture = NULL;
Query->Close();
Query->SQL->Text = "SELECT FIRST 1 Imagen, Fecha FROM Imagenes WHERE CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') AND Codigo = :Codigo AND Tipo = 1 ORDER BY Fecha DESC";
Query->ParamByName("Codigo")->AsInteger = GroupBox1->Tag;
Query->Open();
if (!Query->IsEmpty())
Foto->Picture->Assign(fPersona->Query->FieldByName("Imagen")); |
| Cita: | - LimpiaForm es una función que deja "limpios" los campos del formulario.
- Ficha es la función en la que se rellena el formulario |
Puesto así, ¡lo hace bien! Si funciona, no lo toques. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
Publicado: Lun 19 Dic, 2016 6:11 pm Asunto: |
|
|
| Angel escribió: |
...
Foto->Picture = NULL;
...
|
Alternativamente a Imagen->Picture->Assign(NULL);
| Código: | Imagen->Picture = NULL; |
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 19 Dic, 2016 7:28 pm Asunto: |
|
|
[quote="Felip"] | Angel escribió: | | Código: | Imagen->Picture->Assign(NULL);
|
|
Si te fijas es lo que usaba y no me lo borraba. No he probado la sugerencia de escafandra de repintar el formulario. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
|