Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Tamaño de texto en control que se desajusta al traducir
#1

Buenas!.

Es normal, la palabra puede ser más corta en inglés y luego en español es más larga.
Ejemplo:

[Imagen: G5D8Wng.png]

¿ Hay una forma sencilla de solucionar este problema ?. ¿ Y si el proyecto tiene traducción para varios idiomas ?. Huh
¿ Expandimos manualmente cada uno de los controles que produzca esto ?.
 

No me he fijado bien si se produce este efecto.
Con la propiedad Autoresize. Creo que no suelo usarla mucho. Por algún motivo será.

El texto hice que salga mal a drede. Su propiedad AutoResize está a False.

[Imagen: YVM2a19.png]

Y en este caso a True y se compara.

[Imagen: Sg7rvXC.png]

Como se expande el botón para que su contenido, que es un texto se vea completo. Eso si, el botón está descentrado.

¿ Mejoras ?.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#2

He añadido un observador al boton1 para saber cuando cambia de tamaño.
Tiene su propiedad AutoResize a True.

Lo cierto es que no dice nada.

GAMBAS
  1. Private observador1 As Observer  
  2.  
  3. Public Sub Form_Open()
  4.  
  5.   observador1 = New Observer(Button1) As "Observar1"
  6.  
  7.  
  8. Public Sub Observar1_Rezise()
  9.  
  10.   Print "Botón 1 cambia de tamaño"
  11.  



¿ Es que su propiedad Autoresize a True no hace que entre en funcionamiento el método Resize del botón ?.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#3

...y de esta manera ?
GAMBAS
  1. Private Button1 As Button
  2.  
  3.  
  4. Public Sub Form_Open()
  5.  
  6.   With Button1 = New Button(Me) As "Button1"
  7.     .X = 100
  8.     .Y = 100
  9.     .W = 100
  10.     .H = 30
  11.     .AutoResize = True
  12.     .Text = "Aeneidos"
  13.  
  14. End 
  15.  
  16. Public Sub Button1_Click()
  17.  
  18.   Dim c As Short
  19.  
  20.   With Button1
  21.     .Text = "Tantaene animis caelestibus irae?"
  22.     c = .Font.TextWidth(.Text)
  23.     .Resize(c, .H)
  24.   End With 
  25.  



"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
[-] Los siguientes 1 usuarios dice gracias a vuott por este post:
  • Shell
    ¡Gracias!
#4

Aquí está mi versión del código de Vuott.
GAMBAS
  1. HBox1 As HBox
  2. Label1 As Label
  3. Button1 As Button
  4. hSpring As Spring
  5. iCount As Integer
  6.  
  7. Public Sub Form_Open()
  8.  
  9.   With Me
  10.     .Height = 100
  11.     .Width = 375
  12.     .Padding = 5
  13.     .Arrangement = Arrange.Vertical
  14.     .Center
  15.  
  16.   With HBox1 = New HBox(Me)
  17.     .Height = 28
  18.     .Width = 100
  19.  
  20.   hSpring = New Spring(HBox1)
  21.  
  22.   With Button1 = New Button(HBox1) As "Button1"
  23.     .Height = 28
  24.     .Text = "Uno"
  25.     .AutoResize = True
  26.  
  27.   hSpring = New Spring(HBox1)
  28.   hSpring = New Spring(Me)
  29.  
  30.   With Label1 = New Label(Me) As "Label1"
  31.     .Height = 28
  32.     .AutoResize = True
  33.     .Alignment = Align.Center
  34.     .Text = "Button1.Width = " & Str(Button1.Width)
  35.  
  36.  
  37. Public Sub Button1_Click()
  38.  
  39.   Dim sText As String[] = ["Uno", "Uno, Dos", "Uno, Dos, Tres", "Uno, Dos, Tres, Cuatro", "Uno, Dos, Tres, Cuatro, Cinco", "Uno, Dos, Tres, Cuatro, Cinco, Seis", "Uno, Dos, Tres, Cuatro, Cinco, Siete", "Uno, Dos, Tres, Cuatro, Cinco, Siete, Ocho", "Uno, Dos, Tres, Cuatro, Cinco, Siete, Ocho, Nueve", "Uno, Dos, Tres, Cuatro, Cinco, Siete, Ocho, Nueve, Diez"]
  40.  
  41.   Inc iCount
  42.   Button1.Text = sText[iCount]
  43.   If iCount = sText.Max Then iCount = -1
  44.   Label1.Text = "Button.Width = " & Str(Button1.Width)
  45.  


[-] Los siguientes 1 usuarios dice gracias a cogier por este post:
  • Shell
    ¡Gracias!
#5

Hola, en una oportunidad tuve un problema parecido y lo resolví con diseño en el formulario, no sé si te servirá.

Trabajé los botones contenidos en cajas con tensores.

En mi caso, el caption cambiaba según ciertas condiciones y entonces el texto a veces era corto y en otras largo.

Por supuesto habilitando el autoresize en true

Saludos


Archivos adjuntos Miniatura(s)
   
[-] Los siguientes 1 usuarios dice gracias a alberto-moyano por este post:
  • Shell
    ¡Gracias!
#6

(27-09-2022, 14:22)Shell escribió:  ¿ Hay una forma sencilla de solucionar este problema ?

Si, .Autoresize = True
Pero tienes que usas contenedores y "springs" como te indico Alberto.

Pero si tienes que crear los controles por código o tienes que "estirar" un gruop de controles para que tengna el mismo tamaño a veces es util calcular el ancho antes de crear los controles o para alterar controles existentes.

En el formulario:
GAMBAS
  1. .W = TextWidth(sText, Me.Font.Name, Me.Font.Size) + 7



Funcion:
GAMBAS
  1. '' Returns the value in pixels of a text string, regarding the typography
  2.  
  3. Public Function TextWidth(str As String, sFont As String, zSize As Integer) As Integer
  4.  
  5.   Dim fnt As New Font
  6.  
  7.   fnt.Name = sFont
  8.   fnt.Size = zSize
  9.  
  10.   Return fnt.TextWidth(str)
  11.  



1 Saludo.
[-] Los siguientes 1 usuarios dice gracias a tincho por este post:
  • Shell
    ¡Gracias!
#7

(27-09-2022, 15:39)vuott escribió:  ...y de esta manera ?

No es muy distinto a solo aplicar la propiedad AutoResize a True y decirle la localización inicial al botón.
En este caso lo haces por código. Con esto quiero decir que no parece necesario esta parte.

GAMBAS
  1.  'Dim c As Short
  2.  
  3.   With Button1
  4.     .Text = "Tantaene animis caelestibus irae?"
  5.   '  c = .Font.TextWidth(.Text)
  6.    ' .Resize(c, .H)
  7.  



Ya que la propia propiedad Autoresize = True logra el mismo efecto.
Prueba.

Cogier:

Muy detallado.

Alberto:

Intenté usar un contenedor pero no salió a la primera. Ya veo que a tí si te funcionó.

Tincho:

Calcular antes el tamaño según el texto y luego aplicar al tamaño del control, junto con el uso de contenedores y "muelles",
parece la más adecuada.

Gracias a todos.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#8

(27-09-2022, 20:46)Shell escribió:  Ya que la propia propiedad Autoresize = True logra el mismo efecto.
Sì, en efecto.
...y no es mejor ? Màs breve, màs corto este modo ? Dodgy

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!
#9

(27-09-2022, 22:31)vuott escribió:  ...y no es mejor ? Màs breve, corto aquel modo ?

Ahora entiendo. No había llegado a esa conclusión. Demuestras que los dos hacen lo mismo pero de distinta manera.
En ese caso, si del código del FormLoad haces que la propiedad Autoresize del Botón1 este a False.

Ahora ejecuta el evento Click() del botón se ve que se ajusta, pero es muy justo no hay unos bordes por el texto, está
muy cerca a los lados del botón, tanto el izquierdo  como su derecho. Habría que añadirle manualmente ademas a lo que
de, un tamaño a ojo.

Diría que los dos códigos cumplen su función. Si lo haces por código, tienes que añadirle la localización del componente, si o si.
La propiedad AutoResize es más cómoda en este caso. Ya que solo es un botón y con su propiedad AutoResize es suficiente.
En cambio si la cosa fuera más compleja, si es más adecuado el segundo método, averiguar el ancho del texto, cambiar
el tamaño de su contenedor y añadirle algo más. Esto aplicado a controles como un GridView, mejora mucho el ajuste
de las columnas.

"Errare Humanun est."

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)