Shell   27-09-2022, 14:22
#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
Última modificación: 27-09-2022, 14:30 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shell   27-09-2022, 15:24
#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.

Código:
Private observador1 As Observer  

Public Sub Form_Open()
 
  observador1 = New Observer(Button1) As "Observar1"
 
End

Public Sub Observar1_Rezise()
 
  Print "Botón 1 cambia de tamaño"
 
End

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

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
vuott   27-09-2022, 15:39
#3
...y de esta manera ?
Código:
Private Button1 As Button


Public Sub Form_Open()

  With Button1 = New Button(Me) As "Button1"
    .X = 100
    .Y = 100
    .W = 100
    .H = 30
    .AutoResize = True
    .Text = "Aeneidos"
  End With

End 

Public Sub Button1_Click()

  Dim c As Short

  With Button1
    .Text = "Tantaene animis caelestibus irae?"
    c = .Font.TextWidth(.Text)
    .Resize(c, .H)
  End With 

End
Última modificación: 27-09-2022, 17:01 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
cogier   27-09-2022, 16:26
#4
Aquí está mi versión del código de Vuott.
Código:
HBox1 As HBox
Label1 As Label
Button1 As Button
hSpring As Spring
iCount As Integer

Public Sub Form_Open()

  With Me
    .Height = 100
    .Width = 375
    .Padding = 5
    .Arrangement = Arrange.Vertical
    .Center
  End With

  With HBox1 = New HBox(Me)
    .Height = 28
    .Width = 100
  End With

  hSpring = New Spring(HBox1)

  With Button1 = New Button(HBox1) As "Button1"
    .Height = 28
    .Text = "Uno"
    .AutoResize = True
  End With

  hSpring = New Spring(HBox1)
  hSpring = New Spring(Me)

  With Label1 = New Label(Me) As "Label1"
    .Height = 28
    .AutoResize = True
    .Alignment = Align.Center
    .Text = "Button1.Width = " & Str(Button1.Width)
  End With

End

Public Sub Button1_Click()

  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"]

  Inc iCount
  Button1.Text = sText[iCount]
  If iCount = sText.Max Then iCount = -1
  Label1.Text = "Button.Width = " & Str(Button1.Width)

End
alberto-moyano   27-09-2022, 16:34
#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
Última modificación: 27-09-2022, 16:36 por alberto-moyano.
tincho   27-09-2022, 19:50
#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:
Código:
.W = TextWidth(sText, Me.Font.Name, Me.Font.Size) + 7

Funcion:
Código:
'' Returns the value in pixels of a text string, regarding the typography

Public Function TextWidth(str As String, sFont As String, zSize As Integer) As Integer

  Dim fnt As New Font

  fnt.Name = sFont
  fnt.Size = zSize

  Return fnt.TextWidth(str)

End

1 Saludo.
Shell   27-09-2022, 20:46
#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.

Código:
 'Dim c As Short
 
  With Button1
    .Text = "Tantaene animis caelestibus irae?"
  '  c = .Font.TextWidth(.Text)
   ' .Resize(c, .H)
  End With
 

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
Última modificación: 27-09-2022, 21:27 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
vuott   27-09-2022, 22:31
#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
Última modificación: 28-09-2022, 14:48 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Shell   28-09-2022, 14:57
#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 conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 5 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.