Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Duda sobre la función MoveTo y LineTo (https://www.clubdelphi.com/foros/showthread.php?t=29588)

Javi2 26-01-2006 10:52:36

Duda sobre la función MoveTo y LineTo
 
Hola a todos,

Estoy intentando imprimir una línea de tipo subrayado que vaya desde donde termina el texto hasta un punto determinado. (Ejemplo: "Texto___________")

Para ello, primero muevo el Pen a la posición donde debe empezar a imprimirse la línea mediante la función MoveTo. Como la línea debe empezar a imprimirse al final del texto, había pensado en utilizar la función Printer.Canvas.TextWidth( "Texto") para obtener este punto, pero no lo está haciendo bien.
Código Delphi [-]
Printer.Canvas.MoveTo( Printer.Canvas.TextWidth( ATitulo ) , Y );
Printer.Canvas.LineTo( X, Y );

¿Hay alguna diferencia entre la métrica que utiliza la función MoveTo y TextWidth?
¿Cómo puedo solucionarlo?

Muchísimas gracias por vuestra ayuda.

delphi.com.ar 26-01-2006 13:41:02

El texto se empieza a dibujar sobre el margen izquierdo???.. Sino vas a tener que sumar tambien la posición del texo ;)

Javi2 26-01-2006 16:18:54

Sí, sí, el texto empieza sobre el margen izquierdo (ojala fuera eso).

Yo creo, aunque hablo desde la ignorancia absoluta, que tal vez estas funciones trabajen con alguna unidad métrica (mm o pulgadas) y la función TextWidth trabaja con píxels, o viceversa, pero me gustaría que alguien me lo confirmase y me pudiese indicar como solventarlo.

Gracias por tu colaboración

Javi2 26-01-2006 18:37:38

¡¡¡¡ Solucionado !!!!

No se trataba de un problema de unidades métricas ni nada que se le parezca. El problema era mío, tenía un error en el cálculo de las coordenadas.

Perdón por las molestias y muchas gracias a todos por vuestra colaboración.

dec 26-01-2006 18:44:43

Hola,

Me alegra saber que lo has solucionado. Yo he echado un vistazo a la ayuda de la función "TextWidth" y esta devuelve su resultado en píxeles. El caso es que creo que lo que he conseguido es más o menos lo que precisabas. Como ya lo hize lo copio aquí, aunque ya solucionaras el asunto, por si puede servirte de algo o puede servir de algo a alguien.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  anchoTexto: integer;
const
  posicionY  = 10;
  posicionX  = 10;
  anchoLinea = 200;
  cadena     = 'Una cadena cualquiera';
begin
  anchoTexto := Canvas.TextWidth(cadena);
  Canvas.TextOut(posicionX, posicionY, cadena);
  Canvas.MoveTo(anchoTexto + posicionX, posicionY * 2);
  Canvas.LineTo(anchoLinea, posicionY * 2);
end;


La franja horaria es GMT +2. Ahora son las 13:11:30.

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