https://foro.gambas-es.org/viewtopic.php?f=4&t=2388
-----------------------------------
Shell
Sabado, 26 May 2012, 13:40

Ajustar El Tamaño De Una Celda
-----------------------------------
Hola Comunidad!.

A veces cuando rellenamos una fila de estos componentes.No se ajustan los tamaños automáticamente al contenido
del texto.(La columna de titulo).

Solemos dar unos valores de ancho a las celdas que pueda tener un componente como TableView,ColumView y GridView.

Encontré una forma que es,según el tamaño de la fuente y el texto,se adapta el ancho o alto de la celda a este, aproximadamente.
El verdadero problema que me encontré es que debe recordarse cada tamaño de celda de un registro para saber si el siguiente
es mayor que el anterior, si no volveremos a tener que jugar haciendo click en cada columna que nos interese.

Que lo mismo hay un evento para esto y solo es cuestión de llamarlo.

Hice este ejemplo:

 [img]http://foro.gambas-es.org/files/images/768/tabla.png[/img]

Como veis no tienen un tamaño establecido las columnas.

Y el código es este:

[code linenumbers=false syntax=gambas]
Private filas As Integer

Public Sub _new()

End

Public Sub Form_Open()
  Me.Center
  Me.Caption = "Práctica con TableView"
  Tabla = titulos(Tabla)
  txtNombre.SetFocus
  filas = 0
End


Public Function titulos(hTabla As TableView) As TableView
  
  With hTabla
    .Header = 3
    .Columns.Count = 5   
    .Columns[0].Title = "Nombre"    
    .Columns[1].Title = "Apellidos"
    .Columns[2].Title = "Dirección"
    .Columns[3].Title = "Ciudad"
    .Columns[4].Title = "C.P"
  End With
  Return hTabla
  
End

Public Sub btnSalir_Click()
  Me.Close
End

Public Sub btnInsertar_Click()
  Dim cajatexto As Object
  
  If txtNombre.Text <> "" And txtApellidos.Text <> "" And txtDireccion.Text <> "" And txtCiudad.Text <> "" And txtCP.Text <> "" Then
    Tabla.Rows.Count = filas + 1
    Tabla[filas, 0].Text = txtNombre.Text
    Tabla.Columns[0].Width = tamcelda(txtNombre)
    Tabla[filas, 1].Text = txtApellidos.Text
    Tabla.Columns[1].Width = tamcelda(txtApellidos)
    Tabla[filas, 2].Text = txtDireccion.Text
    Tabla.Columns[2].Width = tamcelda(txtDireccion)
    Tabla[filas, 3].Text = txtCiudad.Text    
    Tabla[filas, 4].Text = txtCP.Text   
    filas += 1
    
    For Each cajatexto In FMain.Controls
        If cajatexto Is TextBox Then
            cajatexto.Text = ""
        Endif
    Next
    txtNombre.SetFocus
  Else
      Message.Info("Te falta algun campo por rellenar")
  Endif
  
End

Public Function tamcelda(cajatexto As TextBox) As Integer  
  Return (cajatexto.Font.TextWidth(cajatexto.Text)) * 1.1  
End
[/code]

La función añade un 10% mas de tamaño a la celda en cuestión.
Llega un momento que se va a dejar de ver bien  si el tamaño de la siguiente es mas pequeño.
Entonces, creo que si hago un array que conserve los tamaños anteriores y los compares con los nuevos de los siguientes texto.
El tamaño se ajuste al mayor,siempre.

Si tenemos 5 campos.Pues el array tamcelda[0],tamacelda[2]...tamacelda[4], se comparan con el actual tamaño nuevo de cada campo 
y si es mayor se cambia el ancho, que no, pues se deja el valor que estaba en el array.

Tengo que hacerlo.

Os añado el código fuente por si queréis probar también vosotros.Es para Gambas 3.1.1

Creo que es algo que nos interesa a todos, por que luego quedan mal las columnas.

Saludos.


-----------------------------------
Shell
Sabado, 26 May 2012, 23:23

Re: Ajustar El Tamaño De Una Celda
-----------------------------------
Al final fue bien con el uso de un array para guardar los valores mas grandes de ancho de celda.

[code linenumbers=false syntax=gambas]
Private filas As Integer
Private tcelda[5] As Integer

Public Sub _new()

End

Public Sub Form_Open()
  Dim x As Integer  
    Me.Center
    Me.Caption = "Práctica con TableView"
    Tabla = titulos(Tabla)
    txtNombre.SetFocus
    filas = 0
    For x = 0 To 4
        tcelda[x] = -99
    Next
End


Public Function titulos(hTabla As TableView) As TableView
  
  With hTabla
    .Header = 3
    .Columns.Count = 5   
    .Columns[0].Title = "Nombre"    
    .Columns[1].Title = "Apellidos"
    .Columns[2].Title = "Dirección"
    .Columns[3].Title = "Ciudad"
    .Columns[4].Title = "C.P"
  End With
  Return hTabla
  
End

Public Sub btnSalir_Click()
  Me.Close
End

Public Sub btnInsertar_Click()
  Dim cajatexto As Object
  Dim cajatextotemp As TextBox
  Dim ttemp As Integer 'Declaro esta variable para evitar más de un llamamiento a la función
  Dim x As Integer
    
  If txtNombre.Text <> "" And txtApellidos.Text <> "" And txtDireccion.Text <> "" And txtCiudad.Text <> "" And txtCP.Text <> "" Then
    Tabla.Rows.Count = filas + 1
        
  For x = 0 To 4 
  
    Select Case x      
      Case 0
         cajatextotemp = txtNombre
      Case 1
         cajatextotemp = txtApellidos  
      Case 2
          cajatextotemp = txtDireccion
      Case 3
          cajatextotemp = txtCiudad
      Case 4
          cajatextotemp = txtCP          
    End Select
    
    Tabla[filas, x].Text = cajatextotemp.Text
    ttemp = tamcelda(cajatextotemp)
    If ttemp > tcelda[x] And Tabla.Columns[x].Width < ttemp Then
      Tabla.Columns[x].Width = ttemp  
      tcelda[x] = Tabla.Columns[x].Width
    Endif
    
  Next
  filas += 1
  
  For Each cajatexto In FMain.Controls
    If cajatexto Is TextBox Then
      cajatexto.Text = ""
    Endif
  Next
  txtNombre.SetFocus
  
  Else
      Message.Info("Te falta algun campo por rellenar")
  Endif 
   
End

Public Function tamcelda(cajatexto As TextBox) As Integer
  
  Return (cajatexto.Font.TextWidth(cajatexto.Text)) * 1.1
  
End
[/code]

Lo cierto es que estoy perdiendo una pasta en monólogos.
Si llego a saber que esto era lo mio me hago de oro en el club de la comedia.


Saludos


-----------------------------------
jsbsan
Sabado, 26 May 2012, 23:41

Re: Ajustar El Tamaño De Una Celda
-----------------------------------
Shell:

Tus monologos son muy interesantes.... :!:  :!: 


Seguro que mucha gente lo reutilizaran en sus programas.

Gracias por compartir tus aportes con todos  :mryellow:  :mryellow: 

Saludos


-----------------------------------
Shell
Domingo, 27 May 2012, 00:49

Re: Ajustar El Tamaño De Una Celda
-----------------------------------
Gracias Julio. :wink: 

Saludos.


-----------------------------------
arubioc
Domingo, 27 May 2012, 09:57

Re: Ajustar El Tamaño De Una Celda
-----------------------------------
jajaja!.
Buen buen.
Que envidia eso de ser tan creativo....


-----------------------------------
Shell
Domingo, 27 May 2012, 13:59

Re: Ajustar El Tamaño De Una Celda
-----------------------------------
arubioc:

El problema de la creatividad, es tener la idea y no saber como llevarlo a cabo.
No saber desarrollarla por falta de conocimiento.

Por otro lado, según el conocimiento de cada uno,no saber hacerlo de otra manera que
a lo mejor es mas productiva por que no conoces otra.Es limitarse mucho.
Cuestión de tiempo.Para un profesional ni en broma.

Si yo se hacer un programa con programación estructurada pero con programación
objeto no tengo ni idea, me quedo con la duda y las ganas.

Y ahora viene el problema como puedo aprender a entender la POO y desarrollar para Gambas, 
cuando no encuentro los recursos que se salgan de lo normal. Necesito aprender mas lenguajes
y sacar tiempo para llevarlo acabo.

Para muchos de nosotros que no somos programadores tiene que ser bastante
fastidioso no poder llegar a cabo lo que quieres.Por mucho que te esfuerzas.
Y tienes que dejar pasar el tiempo para ganar experiencia y luego aquel  proyecto
que tanto te gustaba,ya no te parece tan importante como antes.

Ojala  pueda ver que Gambas llegue a ser tan importante como cualquier 
lenguaje que manejen mucha pasta.

Saludos.


-----------------------------------
tonixs
Domingo, 27 May 2012, 18:16

Re: Ajustar El Tamaño De Una Celda
-----------------------------------
Si teneis razon, yo pongo hras de trabajo, para aprender, y no salgo de lo mismo, haber cuando se bastante como para hacer el programa que estoy intentando crear desde que empece.
Aunque al ritmo que voy, tardare unos meses, hay un colega que se ha ofrecido a ayudarme, haber si asi gano un poco de tiempo y aprendo mas rápido.


