PDA

Ver la Versión Completa : Duda sobre la función MoveTo y LineTo


Javi2
26-01-2006, 10:52:36
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.

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.


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;