Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Aparecer una Imagen (cual "Recuadro saliente") (https://www.clubdelphi.com/foros/showthread.php?t=36730)

Deiv 22-10-2006 00:03:36

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?

seoane 22-10-2006 00:49:52

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;

dec 22-10-2006 00:59:41

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. :)

Deiv 23-10-2006 15:09:30

Y si deseara mostrarlo en un PaintBox, ¿como soluciono la propiedad que no tiene del strech?

seoane 23-10-2006 15:28:50

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.

Deiv 23-10-2006 15:36:20

.....................................

Deiv 23-10-2006 23:17:26

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?


La franja horaria es GMT +2. Ahora son las 14:44: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