Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Imitar Fondo Web en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=38147)

Deiv 05-12-2006 01:37:12

Imitar Fondo Web en Delphi
 
Hola,
Me preguntaba, y de repente sea una pregunta muy obvia y sencilla, porque estoy aprendiendo a construir Páginas Web, pero por salir de dudas pregunto:

Al construir las Páginas Web, uno le da fondo como imagen Gifs o JPEGs verdad? por ejemplo una imagen construida de 1150x24 ó 1000x10 bastaría para Fondo de una Página, esta imagen se repite en todo el fondo y Alto de la Página Web. Mi pregunta es, ¿Con Delphi habrá alguna forma de realizar este proceso en una TImage o en un TPaintBox de tal manera que esta imagen "delgada" se coloque una sobre otra y me quepa en todo el alto de estos componentes?

El objetivo de la pregunta es la siguiente, he visto fondos en algunas páginas Web que simulan un cuaderno en espiral (o sea el Gif de la Página Web tiene una sola espiral [imagen delgada de un alto pequeño que arriba mencioné] y al cargar la Página aparenta cual si fuera un cuaderno espiral COMPLETO) necesito algo parecido que quepa en el alto de una TImage, no puedo utilizar la propiedad Stretch ya que se deforma, y si la cargo así no más se ve solo la imagen delgada sin caber al alto de mi Timage.

Tal vez las soluciones estén de otra forma:

- Crear una nueva imagen del alto que desee con un programa gráfico (Photoshop) e ir uniendo (con CTRL+V) la imagen delgada acomodándolas una debajo de otra hasta lograr una única imagen del alto deseado, grabarlo y jalarlo a la TIMage. MUCHO TRABAJO.

- Colocar muchas TImage en columna en el Form de tal manera que aparente un cuaderno espiral. No lo veo adecuado.

- Quizá unir con algún Programa esta Imagen al alto deseado ¿Existe algún programa que una (junte) imágenes de la forma que estoy explicando, una sobre otra?

- Bueno finalmente de repente por código en Delphi se puede realizar este trabajo ¿será posible?, es ahí donde planteo mi pregunta por favor.
Deiv
Ps.- Con el formato de las imágenes no habría problema, ya que lo transformaría a BMP

roman 05-12-2006 01:52:21

Una idea:

En un Bitmap (TBitmap) cargas la imagen de la espiral. En lugar de un TImage usa un PaintBox y en su evento OnPaint usas el método PaintBox.Canvas.Draw:

Código Delphi [-]
// Calculas cuantos "pedazos" necesitas
N := PaintBox1.Height div BitmapEspiral.Height;

// Dibujas en el canvas
for Y := 0 to N do
begin
  PaintBox.Canvas.Draw(0, Y*BitmapEspiral.Height, BitmapEspiral);
end;

Algo así, tú llenas los detalles.

// Saludos

Deiv 05-12-2006 02:00:18

Gracias en este momento no tengo Delphi a mano, lo probaré en casa,
¿No hay forma de llevar el código a una TImage? Digo esto ya que he tenido problemas con el TPaintBox ultimamente debido a que luego de dibujar al cambiar de ventana se me borra.

roman 05-12-2006 02:08:42

Posiblemente se te borra porque dibujas en él y te olvidas. Pero debes hacerlo en su evento OnPaint para que se redibuje cada vez que sea necesario. Aquí está el ejemplo más detallado y ya probado :)

Código Delphi [-]
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  N, Y: Integer;

begin
  // Pintas el fondo del paintbox (blanco en este caso)
  Paintbox1.Canvas.Brush.Color := clWhite;
  PaintBox1.Canvas.Brush.Style := bsSolid;
  PaintBox1.Canvas.FillRect(PaintBox1.ClientRect);

  // Calculas cuantas veces debes repetir la espiral
  N := PaintBox1.Height div Espiral.Height;

  for Y := 0 to N - 1 do
  begin
    PaintBox1.Canvas.Draw(0, Y*Espiral.Height, Espiral);
  end;
end;

Espiral es un TBitmap que creas al principio:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Espiral := TBitmap.Create;
  Espiral.LoadFromFile('asterisk_orange.bmp');
end;

y destruyes al final:

Código Delphi [-]
procedure TForm1.FormDestroy(Sender: TObject);
begin
  Espiral.Free;
end;

// Saludos

Neftali [Germán.Estévez] 05-12-2006 11:04:56

A parte de hacerlo manualmente, si deseas utilizar esta imagen como fondo de un form (eso no me ha quedado claro), puedes utilizar un componente llamado TUpTiler (en torry está); Funciona muy bien, es sencillo, free, con fuentes, y además permite muchas opciones para colocar una imagen de fondo (strech, centrado, mosaico,...); Además permite rellenar con un color fijo o con degradados.

Deiv 05-12-2006 15:47:13

Gracias!
 
Gracias Roman, una vez mas demostrado que en Delphi todo se puede.
Cita:

Empezado por Roman
Posiblemente se te borra porque dibujas en él y te olvidas

Bueno esa parte no me daba cuenta, y casi en muchas de mis aplicaciones que iba trabajando fui cambiando a TImage, dejando de lado TPaintBox, ¿Cual la diferencia de tu código en una TIMage?.... o... es más presentable en un TPaintBox?

Neftali, probaré tu sugerencia del Componente TUpTiler, nunca lo he manejado, pues en realidad el objetivo era para colocar en alguna parte del Form (no en todo) y que sirviera a manera de Tutorial (cual si leer un texto de un cuaderno espiral), he ahí la insistencia del mismo espiral.

Deiv 06-12-2006 15:12:52

He probado efectivamente esta vez el código de Román como el Componente de TUpTiler (muy sencillo de manejar) que recomendó Neftali y ambos se parecen, muy buenos. Thanks!


La franja horaria es GMT +2. Ahora son las 09:01:37.

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