Problema con TextWidth en Access 2010
Publicado por Jordi (8 intervenciones) el 08/04/2013 22:31:45
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
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
Valora esta pregunta


0