| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 22 Nov, 2011 4:33 pm Asunto: Poner imagen al fondo de un boton |
|
|
Hola a todos,
Después de mirar y remirar por el foro no encuentro lo que busco, a ver si me podéis echar una mano.
La idea es tener un botón y ponerle una imagen de fondo como si fuera su propio fondo, me explico, cuando pones una imagen a un botón y quieres escribir en el caption el problema que tenemos es que la imagen se queda abajo o a la derecha o donde sea, lo que yo quiero es tener la imagen de fondo y poder escribir con el caption donde normalmente se pondría cuando no tiene imagen, osea en el centro del botón y con la imagen de fondo.
Estuve viendo un mensaje aquí para hacerlo a un Form y funciona bien, pero lo he intentado de todas maneras a un botón y no hay forma, también he probado con las LMD pero no hay nada así.
Se os ocurre como?
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Mie 23 Nov, 2011 11:14 am Asunto: |
|
|
Solo se me ocurre que escribas en la propia imagen, yo hace mucho tiempo en un problema similar utilicé el componente TPaintBox para simular un boton con imagen.
Saludos,
Juanma |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mie 23 Nov, 2011 2:04 pm Asunto: |
|
|
Escribir en la propia imagen???
Como se haría? seria una opción interesante la verdad.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Jue 24 Nov, 2011 8:10 am Asunto: |
|
|
Una función sencilla para dibujar texto centrado puede ser esta:
| Código: |
DrawText(TCanvas* Canvas, String Text, int W, int H)
{
int x = (W - Canvas->TextWidth(Text))/2;
int y = (H - Canvas->TextHeight(Text))/2;
Canvas->Brush->Style = bsClear;
Canvas->TextOut(x, y, Text);
}
|
Ejemplo de uso en un botón TBitBtn:
| Código: |
DrawText(BitBtn1->Glyph->Canvas, "BOTON1", BitBtn1->Glyph->Width, BitBtn1->Glyph->Height);
|
Saludos. |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Nov, 2011 12:45 pm Asunto: |
|
|
Muchas gracias,
Voy a probarlo ahora mismo a ver que tal me sale.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Nov, 2011 12:52 pm Asunto: |
|
|
Escafandra,
Lo tengo casi casi, lo único que me haría falta es justamente lo mismo pero con un TImage, se te ocurre como? estaba probando lo que me has puesto con el TImage pero me da error y no sale.
Es que seria estupendo por que podría poner una imagen normal y corriente y simplemente escribir encima.
También sabrías como poner la fuente, tamaño y color que quisiera al texto?
Un abrazo y muchas gracias.
Carlos |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Jue 24 Nov, 2011 1:12 pm Asunto: |
|
|
En el siguiente ejemplo te muestro como hacerlo con un TImage. Para que funcione el TImage debe tener asignada una Imagen en su Bitmap
| Código: |
DrawText(TImage* Image, String Text, TFont* Font=0)
{
Graphics::TBitmap* Bitmap = Image->Picture->Bitmap;
int x = (Bitmap->Width - Bitmap->Canvas->TextWidth(Text))/2;
int y = (Bitmap->Height - Bitmap->Canvas->TextHeight(Text))/2;
Bitmap->Canvas->Brush->Style = bsClear;
if(Font) Bitmap->Canvas->Font->Assign(Font);
Bitmap->Canvas->TextOut(x, y, Text);
}
|
Ejemplo de uso:
| Código: |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DrawText(Image1, "HOLA", Button1->Font);
}
|
Saludos. |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Nov, 2011 1:24 pm Asunto: |
|
|
Jo que rapido tio,
Muchas gracias, me pongo con ello.
Un abrazo y te debo una.
Carlos |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Nov, 2011 9:01 pm Asunto: |
|
|
Me va todo perfecto,
Ahora tengo un problemilla mas, resulta que también pongo imágenes en un TPageControl en cada uno de sus TTabSheet a través de una lista de TImageList
Como podría hacerlo? se te ocurre una forma directa de escribir sobre la imagen que se ha puesto encima del TabSheet o directamente en el TImageLis o alguna otra format?
Le estoy dando vueltas pero no encuentro la forma.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Vie 25 Nov, 2011 12:09 am Asunto: |
|
|
Tendrás que decidir donde realizas la escritura del texto, donde mas convenga, en el TImageList si las imagenes con texto las reutilizas. En cambio si deseas guardar la original no lo modifiques.
Puedes modificar el código para trabajar con un Bitmap:
| Código: |
DrawText(Graphics::TBitmap* Bitmap, String Text, TFont* Font=0)
{
int x = (Bitmap->Width - Bitmap->Canvas->TextWidth(Text))/2;
int y = (Bitmap->Height - Bitmap->Canvas->TextHeight(Text))/2;
Bitmap->Canvas->Brush->Style = bsClear;
if(Font) Bitmap->Canvas->Font->Assign(Font);
Bitmap->Canvas->TextOut(x, y, Text);
}
|
Saludos. |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Vie 25 Nov, 2011 2:28 am Asunto: |
|
|
Al final he metido el texto en el tImageList
Nos las reutilizo con lo que me viene bien asi.
Muchas gracias por todo, me has ayudado mucho.
Un abrazo,
Carlos |
|
| Volver arriba |
|
 |
|