PDA

Ver la Versión Completa : Imitar Fondo Web en Delphi


Deiv
05-12-2006, 01:37:12
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:


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


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:


procedure TForm1.FormCreate(Sender: TObject);
begin
Espiral := TBitmap.Create;
Espiral.LoadFromFile('asterisk_orange.bmp');
end;


y destruyes al final:


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 Roman, una vez mas demostrado que en Delphi todo se puede.
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!