| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Ginkgo_ Cdt

Registrado: 06 Jul 2003Mensajes: 4
|
Publicado: Vie 26 Dic, 2003 12:00 pm Asunto: Texto vertical en informes |
|
|
Hola, quería preguntaros si hay alguna posibilidad de girar una QRLabel dentro de un QuickReport, de forma que se pueda poner un texto vertical.
Mi intención es poner un número identificativo del informe en la parte izquierda, y orientado verticalmente, pero he buscado y no doy con ninguna solución al problema.
Muchas gracias por la ayuda. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 29 Dic, 2003 1:35 am Asunto: |
|
|
Hola, si quieres una solución rápida sin instalar un nuevo componente puedes "dibujar" el texto vertical en un TQRImage. Por ejemplo:
- Añade un TQRImage (QRImage1) con el tamaño que necesites en el lugar del informe donde quieres que aparezca el texto vertical. Y luego añade el siguiente código en el evento OnBeforePrint del QuickReport:
| Código: | // OnBeforePrint
String texto = " Prueba ";
TCanvas* imgCanvas = QRImage1->Canvas;
imgCanvas->Font->Name = "Verdana";
imgCanvas->Font->Size = 16;
imgCanvas->Font->Style = TFontStyles() << fsBold;
imgCanvas->Font->Color = clWhite;
imgCanvas->Brush->Color = clRed;
LOGFONT lf;
GetObject(imgCanvas->Font->Handle, sizeof(lf), &lf);
lf.lfOrientation = lf.lfEscapement = 10 * 90;
HFONT hFont = CreateFontIndirect(&lf);
imgCanvas->Font->Handle = hFont;
int y = imgCanvas->TextWidth(texto);
imgCanvas->TextOut(0, y, texto); |
Y si quieres conseguir mejor calidad al previsualizar o al hacer ampliaciones o reducciones del informe, añade lo siguiente en lugar del código anterior:
| Código: | // OnBeforePrint
// Añadimos: #include<memory>
String texto = " Prueba ";
std::auto_ptr<TMetafile> wmf(new TMetafile);
wmf->Width = QRImage1->Width;
wmf->Height = QRImage1->Height;
std::auto_ptr<TMetafileCanvas> wmfCanvas(new TMetafileCanvas(wmf.get(),0));
wmfCanvas->Font->Name = "Verdana";
wmfCanvas->Font->Size = 16;
wmfCanvas->Font->Style = TFontStyles() << fsBold;
wmfCanvas->Font->Color = clWhite;
wmfCanvas->Brush->Color = clRed;
LOGFONT lf;
GetObject(wmfCanvas->Font->Handle, sizeof(lf), &lf);
lf.lfOrientation = lf.lfEscapement = 10 * 90;
HFONT hFont = CreateFontIndirect(&lf);
wmfCanvas->Font->Handle = hFont;
int y = wmfCanvas->TextWidth(texto);
wmfCanvas->TextOut(0, y, texto);
wmfCanvas.reset();
QRImage1->Picture->Metafile->Assign(wmf.get()); |
Si prefieres instalar un componente, tienes uno gratuito y otro de pago en la propia web del QuickReport:
http://www.qusoft.com
concretamente en:
http://www.qusoft.com/getfile.asp?level=0&Filename=QRANGLBL.ZIP |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Lun 29 Dic, 2003 1:21 pm Asunto: |
|
|
Muchas gracias.
Al final no lo hice con el componente, si no con la imagen, pero el primer código que me pusiste, porque el 2º da un problema de linkaje debido al TMetafileCanvas.
El problema es que la resolución no es buena. |
|
| Volver arriba |
|
 |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Lun 25 Oct, 2004 9:10 am Asunto: Texto Vertical empezando por arriba |
|
|
Uso para girar un texto, el segundo ejemplo de _LEO, perfecto, el texto me aparece vertical emezando por abajo, el tema es que me gustaria poder empezar a escribir desde arriba, y he estado provando y no lo consigo.
Alguien sabe como? Gracias. |
|
| Volver arriba |
|
 |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Lun 25 Oct, 2004 10:12 am Asunto: UFF!! |
|
|
Más problemas, he estado buscando y coRightToLeft en CanvasOrientation me da un error!!
Otro de los problemas seriaq intentar que el fondo del texto fuera transparente. Tampoco tengo ni idea de como conseguirlo.
Sigo buscando.
Gracias. |
|
| Volver arriba |
|
 |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Lun 25 Oct, 2004 10:43 am Asunto: Problema |
|
|
He encontrado lo siguiente:
| Código: |
Canvas->Font->Color = clBlack;
// Start with a reasonable size.
Canvas->Font->Size = 20;
// Fill in the LOGFONT structure.
LOGFONT lf2;
GetObject(Canvas->Font->Handle,
sizeof(LOGFONT), &lf2);
// Change escapement, orientation, output precision
lf2.lfEscapement = 2700;
lf2.lfOrientation = 2700;
lf2.lfOutPrecision = OUT_TT_ONLY_PRECIS;
// Create new font; assign to Canvas Font's Handle.
Canvas->Font->Handle =
CreateFontIndirect(&lf2);
// The following only works on NT!
SetGraphicsMode(Canvas->Handle, GM_ADVANCED);
// Set the brush style to clear.
Canvas->Brush->Style = bsClear;
// Display the text in the middle of the form.
Canvas->TextOut(300, Height/2, "Hello World!");
|
Con esto puedo crear un texto vertical, de abajo a arriba 90º y uno de arriba a abaja 270º, y su fondo es transparente si Style=bsClear o sea que cumple mis requisitos, el problema es que essobre en Canvas de la Form. Como lo hago para escribir en el QuickReport? Puedo sin poner una imagen, que no se hacer transparente?
Gracias. |
|
| Volver arriba |
|
 |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Lun 25 Oct, 2004 11:18 am Asunto: Aclaración |
|
|
Seré mas claro, el problema es poder escribir un texto vertical de arriba a abajo y de abajo a arriba en quickReport , de forma que este sea transparente para no tapar imagenes que pueda tener debajo.
Gracias. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 25 Oct, 2004 4:42 pm Asunto: |
|
|
Modificando el ejemplo anterior, quedaría así:
| Código: | // OnBeforePrint
// Añadimos: #include<memory>
String texto = " Prueba ";
std::auto_ptr<TMetafile> wmf(new TMetafile);
wmf->Width = QRImage1->Width;
wmf->Height = QRImage1->Height;
std::auto_ptr<TMetafileCanvas> wmfCanvas(new TMetafileCanvas(wmf.get(),0));
wmfCanvas->Font->Name = "Verdana";
wmfCanvas->Font->Size = 16;
wmfCanvas->Font->Style = TFontStyles() << fsBold;
wmfCanvas->Font->Color = clBlue;
wmfCanvas->Brush->Style = bsClear;
LOGFONT lf;
GetObject(wmfCanvas->Font->Handle, sizeof(lf), &lf);
lf.lfOrientation = lf.lfEscapement = 10 * 270;
HFONT hFont = CreateFontIndirect(&lf);
wmfCanvas->Font->Handle = hFont;
int x = wmfCanvas->TextHeight(texto);
wmfCanvas->TextOut(x, 0, texto);
wmfCanvas.reset();
QRImage1->Picture->Metafile->Assign(wmf.get()); |
Para que puedas ver como queda antes de probarlo aquí va una captura. He pintado la banda de color y he puesto una etiqueta de bajo del texto rotado para que se vea el efecto de transparencia:
No estoy seguro de si funcionara correctamente en todas las versiones de Windows. Esto esta bien si solo hay que añadir algún texto rotado muy de vez en cuando, sino seria mas apropiado usar algún componente como este:
http://ftp.qbss.com/qr0/QRANGLBL.ZIP |
|
| Volver arriba |
|
 |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Mar 26 Oct, 2004 5:46 pm Asunto: Gracias |
|
|
wmfCanvas->Brush->Style = bsClear;
Esta era la pega!! ferpecto!! ahora si que funciona.
Gracias. |
|
| Volver arriba |
|
 |
|