Bueno....
Hace mucho, mucho tiempo que no miro para el foro, así que no he sabido que había esta pregunta.
La primera posibilidad que se me ocurre es la de organizar un campo en la consulta que haces de origen, en la que usarías texto: 'Estimado Sr'||
CampoNombre||' '||
Campoapellidos||' le comunicamos por la presente.....'
Esto te sirve si la frase en cuestión no la haces para que sea toda la carta, y lo meterías todo como un único campo.
Hay otras tres posibilidades que yo vea, todas con ventajas e inconvenientes, que pueden ser importantes según cómo o cual sea tu forma de trabajar. La primera ya la expuse en otro hilo, que se titulaba Campo autoextensible en informe 2. (si resulta confuso, estoy intentando hacer un 'tutorial' paso a paso para hacerlo).
La otra es combinando correspondencia desde f4 y usando como fuente la consulta que empleas (estoy urgando a ver si lo puedo automatizar).
La tercera es aplicando la macro que pongo abajo y que alguien tendrá que mejorar: uso el tamaño de letra del formulario sin modificarla, de tal manera que son 90 los caracteres que caben en un campo de longitud de 17500, así que si variamos la letra ya se desconfigura todo. Ah!, es un híbrido de dos cosas que me mandaron Fornelasa y SLV.
Hay que tener en cuenta también que la he preparado para que el campo Texto1 empiece en Point.x = 2000
Point.y = 1000 (es decir, que empieza a 2cm del borde izquierdo del papel y 1cm del borde superior).
Sirve para campos tipo nota (LONGVARCHAR), pero si usas intros, no te los tiene en cuenta para calcular las filas (es decir, la altura final ) y te lo vuelve a descuadrar todo. Además no justifica el texto.
Lo estoy usando para informes, pero no termino de afinar el código (en realidad no sé cómo hacer, tan solo hago el afamado método del ensayo y error)
A ver si sirve:
Código: Seleccionar todo
Sub CambioTamano1(Evento)
Dim Doc As Object
Dim Shape as Object
Dim I as integer
Dim Texto1 as string
Dim Texto2 as string
Dim Texto3 as string
Dim oForm as object
Dim Form as Object
const w = 90
const f = 35
Dim Size As New com.sun.star.awt.Size
Dim Point As New com.sun.star.awt.Point
oForm = Evento.Source.Parent
Form = oForm.getByName("Formulario")
'--------------------------------------------------------------------------------------------------------
Texto1= Form.GetByName ("Texto1").Text
Doc = ThisComponent
For i = 0 to Doc.DrawPage.Count - 1
Shape = Doc.DrawPage(i)
If HasUnoInterfaces(Shape, "com.sun.star.drawing.XControlShape") Then
If Shape.Control.Name = "Texto1" Then
Exit FOR
End If
End If
Next
l=len(Texto1)
h = (cInt( l / w )+1)*500
if l < 90 then
j=l*(17500/90)
Else j=17500
end if
Size.Width = j
Size.Height = (cInt( l / w )+1)*500
Shape.Size = Size
Point.x = 2000
Point.y = 1000
Shape.Position = Point
End Sub