Ajustar El Tamaño De Una Celda


Objetivo: 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:

tabla

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

Y el código es este:

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


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.


EjemploTableView.tar.gz
Descripción:  
Descargar
Nombre del archivo: EjemploTableView.tar.gz
Tamaño: 7.24 KB
Descargado: 53 veces
EjemploTableView.tar.gz
Descripción:  
Descargar
Nombre del archivo: EjemploTableView.tar.gz
Tamaño: 7.24 KB
Descargado: 53 veces
EjemploTableView.tar.gz
Descripción:  
Descargar
Nombre del archivo: EjemploTableView.tar.gz
Tamaño: 7.24 KB
Descargado: 53 veces

Objetivo: 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.

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


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

última edición por Shell el Sabado, 26 May 2012, 23:26; editado 1 vez
Objetivo: 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

Saludos

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

Saludos.

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

Objetivo: 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.

Objetivo: 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.


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 9.0808s (PHP: -98% SQL: 198%)
Consultas SQL: 47 - Debug off - GZIP Activado