Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-10-2006
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Arrow Aparecer una Imagen (cual "Recuadro saliente")

Tengo una imagen BMP grabada en el disco de 128x128, quiero ver la forma de que esta vaya apareciendo de a poco desde un tamaño 8x8 por así decirlo hasta llegar a su tamaño normal en alguna coordenada del Form (dicho punto elegido [coordenada] debe ser el centro de la imagen para que inicie la aparición) algo así mas o menos como el efecto de Power Point (u otros programas) que tienen el efecto de transición = "Recuadro Saliente", no en si el efecto mismo sino que, la imagen vaya apareciendo cual si fuera un recuadro saliente.

¿De que me valgo de un TIMage, PaintBox?

Un Gif no quiero crear para evitarme conflictos con Delphi y usar otros componentes.

¿Como encaro esta situación?
Responder Con Cita
  #2  
Antiguo 22-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
A falta de una solución mejor, usa un TImage y coloca la imagen en el. El TImage debe tener su propiedad Strech a True, tu solo tendrás que variar su tamaño y posición para hacer el efecto. También convendría que utilizaras las propiedad DoubleBuffered del formulario para evitar el parpadeo, pero esta propiedad no esta presente en todas las versiones de delphi.

Código Delphi [-]
var
  i,x,y: integer;
begin
  DoubleBuffered:= TRUE;
  Image1.Stretch:= TRUE;
  for i:= 2 to 32 do
  begin
    Image1.Width:= 4*i;
    Image1.Height:= 4*i;
    // Coordenadas
    x:= 100;
    y:= 100;
    Image1.Left:= x - (Image1.Width div 2);
    Image1.Top:= y - (Image1.Height div 2);
    Application.ProcessMessages;
    Sleep(50);
  end;
end;
Responder Con Cita
  #3  
Antiguo 22-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Código Delphi [-]
DoubleBuffered:= TRUE;

Qué genial Domingo. Se ha planteado en ocasiones el tema del parpadeo y no sé yo si se llegó a dar alguna solución como el "DoubleBuffered", probablemente, porque no esté disponible en algunas versiones de Delphi. Lo cierto es que la diferencia entre usarlo o no en este caso es abismal. Hay que tomar nota. Gracias Domingo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 23-10-2006
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Question

Y si deseara mostrarlo en un PaintBox, ¿como soluciono la propiedad que no tiene del strech?
Responder Con Cita
  #5  
Antiguo 23-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Un TPaintBox, eso ya es otra cosa. Aunque supongo que ya los sabes, cuando dibujas algo sobre un Paintbox el dibujo no es permanente, se borra cuando es ocultado por otra ventana, por ejemplo. Normalmente se utiliza el evento OnPaint del PaintBox para volver a dibujar lo borrado,y ahí esta el problema. Me explico:

Si estas dibujando directamente sobre el TPaintBox, e ignorando por completo el evento OnPaint, no hay problema:
Código Delphi [-]
var
  i,j,k,x,y: integer;
  Bitmap: TBitmap;
begin
  Bitmap:= TBitmap.Create;
  try
    Bitmap.LoadFromFile('d:\1.bmp');
    for k:= 2 to 32 do
    begin
      i:= 2*k;
      j:= 2*k;
      // Coordenadas
      x:= 100;
      y:= 100;
      PaintBox1.Canvas.StretchDraw(Rect(x-i,y-j,x+i,y+j),Bitmap);
      Application.ProcessMessages;
      Sleep(50);
    end;
  finally
    Bitmap.Free;
  end;
end;

Pero lo malo es como incluimos luego esto en el evento OnPaint para que redibuje parte de nuestra imagen en caso de que se borre. Si no estas usando el evento OnPaint ignora esto ultimo, si lo estas utilizando, déjame ver como lo usas.
Responder Con Cita
  #6  
Antiguo 23-10-2006
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
.....................................

Última edición por Deiv fecha: 23-10-2006 a las 23:03:43.
Responder Con Cita
  #7  
Antiguo 23-10-2006
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Acabo de probar el ejemplo de Seoane en un botón donde copié el código y modifiqué algunas coordenas "x", "y" y "k" inclusive (pues la imagen aparecia por un costado y crecía; y si la imagen era mas grande que el TPaintBox entonces solo mostraba cual si fuera un recorte).

Pude observar algo:

Luego que la imagen crece finalmente, Yo me paso a otra ventana cualquiera a trabajar, regreso a la ventana de mi aplicación y observo que la imagen desapareció, cual si hubiera sido borrado ¿a que se debe esto?

Lo único que requiero es que cuando se cree mi Form aparezca este efecto de la Imagen (pues con una TImage no hay problema) en un TPaintBox y permanezca ahí pegado, mmm..... me parece que no utilizaré el evento OnPaint (parece). Voy haciendo una especie de Tutor, pues habrá OTRO PaintBox (con imagen) encima de este PaintBox que creció, e ira recorriendo a través del mismo sobreponiéndose, por ello en mis últimas preguntas en el Foro enfaticé mucho en la transparencia de imágenes cargadas en un TiMage, TImageList y TPaintBox. Bueno pero eso más adelante en otro hilo. Ahora:
¿Como evitar ese borrado "automático" al cambio de ventanas?
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
Ventana MDI, "Siempre visible" y "Pantalla completa" ixMike API de Windows 7 11-04-2007 18:36:55
¿cuál es mejor: "close" o "application.terminate"? unreal4u Varios 5 05-03-2007 11:01:19
"ChequeaEsto" elegido el futuro "Killer CLubDelphi" mamcx Noticias 51 31-10-2006 20:56:32
Firebir y usar "IF" en la clausula "SELECT" papulo SQL 6 25-07-2006 21:38:04
porque no me reconoce los caracteres "*" ni "%" cuando filtro mrmago Conexión con bases de datos 10 27-01-2006 04:21:16


La franja horaria es GMT +2. Ahora son las 04:03:08.


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