Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Limpiar un TImage

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Limpiar un TImage Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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. Sad
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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. Sad

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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. Embarassed
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Angel escribió:

¡Da lo mismo lo que ponga! Con Bitmap->, con ->Update()... No lo limpia. Embarassed


¿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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Angel escribió:

...
Foto->Picture = NULL;
...


Alternativamente a Imagen->Picture->Assign(NULL);

Código:
Imagen->Picture = NULL;
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

[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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.