Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Texto vertical en informes

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Texto vertical en informes Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

El componente que cita Leo (QRANGLBL.ZIP), ¿vale par Builder 5? Si es así, ¿ Cómo se instala en Builder?
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Mensaje    Asunto: Texto Vertical empezando por arriba Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: UFF!! Responder citando

Más problemas, he estado buscando y coRightToLeft en CanvasOrientation me da un error!! Confused

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Problema Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Aclaración Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Gracias Responder citando

wmfCanvas->Brush->Style = bsClear;

Esta era la pega!! ferpecto!! ahora si que funciona.
Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.