Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-12-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Limpiar un TImage

Tengo un formulario hecho en BCB 6 con un TImage que cargo a partir de una tabla de Firebird. Hasta ahí, ningún problema. Si la ficha tiene foto, la muestra. El problema viene cuando avanzo en la tabla; en este caso, si la 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("Foto"));
y el query se carga a partir de una vista en FB y esto se ejecuta bien. ¿Qué puedo estar haciendo mal?
Responder Con Cita
  #2  
Antiguo 17-12-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Image1.Picture := nil;
Responder Con Cita
  #3  
Antiguo 17-12-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Angel.Matilla Ver Mensaje
Tengo un formulario hecho en BCB 6 con un TImage que cargo a partir de una tabla de Firebird. Hasta ahí, ningún problema. Si la ficha tiene foto, la muestra. El problema viene cuando avanzo en la tabla; en este caso, si la 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("Foto"));
y el query se carga a partir de una vista en FB y esto se ejecuta bien. ¿Qué puedo estar haciendo mal?
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.
Responder Con Cita
  #4  
Antiguo 19-12-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Yo también lo había hecho siempre así y siempre me había funcionado.
Cita:
Empezado por escafandra Ver Mensaje
Código:
Imagen->Picture->Bitmap->Assign(NULL);
¡Da lo mismo lo que ponga! Con Bitmap->, con ->Update()... No lo limpia.
Responder Con Cita
  #5  
Antiguo 19-12-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Angel.Matilla Ver Mensaje
Yo también lo había hecho siempre así y siempre me había funcionado.

¡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 PHP:
void ReDrawWindow(HWND hWnd)
{
  
TRect cr;
  ::
GetClientRect(hWnd, &cr);
  
InvalidateRect(hWnd, &crtrue);
  
SendMessage(hWndWM_NCPAINT00);
  
RedrawWindow(hWnd, &cr0RDW_FRAME|RDW_ERASE|RDW_INVALIDATE|RDW_UPDATENOW|RDW_ALLCHILDREN);


Saludos.
Responder Con Cita
  #6  
Antiguo 20-12-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

El código del primer mensaje debería borrar la imágen sin problemas, sería interesante verlo dentro del contexto ¿ Existe algún condicional previo al código ? por ejemplo:
Código PHP:
void __fastcall TForm1::qryTempAfterScroll(TDataSet *DataSet)
{
  if ( !
qryTemp->FieldByName("FOTO")->IsNull ) {
    
Image1->Picture NULL;
    
Image1->Picture->AssignqryTemp->FieldByName("FOTO") );
  }

provocaría precisamente ese comportamiento.

Pero por otro lado, el moldeo:
Código:
TImage *Imagen = static_cast<TImage>(Source);
me hace pensar que el código está en un evento del propio TImage ¿ en cuál ?

Tal vez con mas datos nos sea posible ver el motivo de ese extraño proceder.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 20-12-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Hola ecfisa. Gracias.
Cita:
Empezado por ecfisa Ver Mensaje
El código del primer mensaje debería borrar la imágen sin problemas, sería interesante verlo dentro del contexto ¿ Existe algún condicional previo al código ? por ejemplo:
No, tal como está escrito el código no hay ningún condicional del estilo del que sugieres. Pero tienes razón en que sería así como se comportaría si existiera.
Cita:
Empezado por ecfisa Ver Mensaje
Pero por otro lado, el moldeo:
Código:
TImage *Imagen = static_cast<TImage>(Source);
me hace pensar que el código está en un evento del propio TImage ¿ en cuál ?
No, no está declarado en un evento del propio TImage
Cita:
Empezado por ecfisa Ver Mensaje
Tal vez con mas datos nos sea posible ver el motivo de ese extraño proceder.
En el adjunto hay dos ficheros de texto (Ficha y Función). En el primero está la llamada al segundo.
Archivos Adjuntos
Tipo de Archivo: rar Funciones.rar (2,2 KB, 5 visitas)
Responder Con Cita
  #8  
Antiguo 20-12-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
¿Has comprobado con el debugger que el código pasa por donde quieres?


Saludos.
Responder Con Cita
  #9  
Antiguo 20-12-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
¿Has comprobado con el debugger que el código pasa por donde quieres?
Sí lo hace.
Responder Con Cita
  #10  
Antiguo 20-12-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Revisa los valores de las líneas (1) y (2) al ejecutarse,
Código PHP:

void __fastcall TfPersona
::VerFicha(int Codigo)
{
     
LimpiaForm(this);

     if (
Codigo 1) return;  // (1)

     
...

     if (!
Ficha(fPersonaQuery)) return; //(2)
          

     
...

     
Foto->Picture    NULL;  // (3)

     
... 
ya que si Codigo < 1 (1) o, si ficha == false (2), implica que (3) no se ejecutará nunca y por tanto no se limpiará la imágen.
Intenta mover la línea (3) al inicio de la función, si ese es el problema, debería solucionarse.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
limpiar un tImage Luli Gráficos 5 19-11-2016 04:53:06
Girar un Timage con respecto a otro Timage Tuvan Gráficos 1 05-11-2016 21:30:50
¿Como limpiar un Componente Timage? soma25 C++ Builder 5 14-03-2012 08:51:39
¿Como limpiar un Timage? Nelly Varios 2 26-10-2007 19:03:02
como combinar 2 Timage en un tercer Timage JefeNet Gráficos 10 02-09-2004 16:51:35


La franja horaria es GMT +2. Ahora son las 04:09:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi