Problema con TextWidth en Access 2010

Cuestiones y dudas acerca de lenguajes de programación diversos.

Moderador: Moderadores

Avatar de Usuario
jordiamat

Problema con TextWidth en Access 2010

Mensaje por jordiamat » Lun Abr 08, 2013 11:31 pm

Hola a todos,

Os expongo un caso curioso que se me ha planteado.

He realizado un pequeño código en Access 97, que lo que hace es que al dar formato a un informe el tamaño de la fuente de un cuadro de texto se reduce en función de la longitud y tamaño del campo.

Es decir, tengo un cuadro de texto al que le caben perfectamente centradas 10 letras "X" Arial y de tamaño 40, si le informo 15 letras el tamaño se reduce a 32 por ejemplo y así se evita que el texto se corte.

Ahora bien, he ejecutado este código en Access 2007 y en Access 2010, y algo ocurre porque no funciona bien.
He observado que la fuente se reduce pero no al mismo tamaño que con Access97.

He realizado un pequeño comparativo y he visto lo siguiente:

Valores obtenidos con WidthSpace:

Access 97 (Tamaño Fuente 48)
15 caracteres = 9576
10 caracteres = 6384
1 caracter = 638

Access 2007 o 2010 (Tamaño Fuente 48)
15 caracteres = 7483
10 caracteres = 4992
1 caracter = 499

___________

Access 97 (Tamaño Fuente 20)
15 caracteres = 4032
10 caracteres = 2688
1 caracter = 269

Access 2007 o 2010 (Tamaño Fuente 20)
15 caracteres = 3091
10 caracteres = 2059
1 caracter = 206


No se si queda muy claro el problema que tengo. Por si las moscas os pongo el código utilizado:


Private Sub Detalle_Format(Cancel As Integer, FormatCount As Integer)
Me![txtJust1] = Justifica(Me![txtAJust1], Me![txtAJust1], Me)
End Sub

____________________________________________________

Function Justifica(lpzText, ControlText As Control, objReport As Report) As String

inici1:

Dim tamañofuente1 As Integer
Dim tamañofuente2 As Integer
Dim WidthControl As Integer
Dim WidthSpace As Integer
Dim SizeText As Integer

objReport.FontSize = ControlText.FontSize

WidthControl = ControlText.Width

WidthSpace = objReport.TextWidth(lpzText)

tamañofuente1 = ControlText.FontSize

SizeText = Len(lpzText)

Do While WidthSpace > WidthControl Or tamañofuente1 <= 6
WidthSpace = objReport.TextWidth(lpzText)
tamañofuente2 = tamañofuente1 - 1
Set objReport = Me
With objReport
txtAJust1.FontSize = tamañofuente2
GoTo inici1
End With
Loop
txtAJust1.FontSize = tamañofuente1

End Function

____________________________________




Gracias anticipadas por los comentarios y posibles soluciones a mi problema.
Espero no haberos metido mucho rollo.

Saludos,

Jordi