tincho 15-04-2021, 16:47
Cuando damos click en el boton de geshi aparece una caja de dialogo y allí ponemos el lenguaje de programación y acto seguido inserta las etiquetas en el cuerpo del mensaje, pero el cursor no se posiciona entre las etiquetas sino al final. Me pregunto si seria posible cambiarlo.
Por ejemplo en Atom cuando usas un fragmento de código el cursor se posiciona en el lugar de la variable

Gracias.
tincho 15-04-2021, 16:38
Hola a todos.
En respuesta a Shell que proponía un ejemplo de como ordenar los elementos de un TableView, se me ocurrió proponer otra forma sin usar el evento _Data.
Código:
' Gambas class file

Private aState As Integer[]
Private aNamesSorted As New String[]
Private aAgesSorted As New Integer[]

Private aNames As String[] = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
Private aAges As New Integer[]
Private iLast As Integer = -1

Public Sub Form_Open()

  Dim i As Integer

  For i = 0 To aNames.Max
    aAges.Add(Rand(1, 100))
  Next

  aState = [0, 0]
  FormatTable(TableView1)

  aNamesSorted = aNames.Copy()
  aAgesSorted = aAges.Copy()

  DataTable(TableView1)

End

Public Sub FormatTable(tv As TableView)

  Dim r As Integer

  tv.Header = GridView.Horizontal
  tv.Columns.Count = 2
  tv.Rows.Count = aNames.Count
  'tv.Sorted = True
  tv.Columns[0].Title = ("Name")
  tv.Columns[1].Title = ("Age")

End

Public Sub DataTable(tv As TableView)

  Dim r As Integer

  For r = 0 To aNamesSorted.Max
    tv[r, 0].Text = aNamesSorted[r]
    tv[r, 1].Text = aAgesSorted[r]
  Next

End

Public Sub TableView1_ColumnClick(Column As Integer)

  Dim age As Integer
  Dim Name As String
  Dim id As Integer

  Select Column
    Case 0
      aNamesSorted.Clear
      aAgesSorted.Clear

      If aState[Column] = 0 Then
        aNamesSorted = aNames.Copy()
        aAgesSorted = aAges.Copy()
        aState[Column] = 1
      Else

        If aState[Column] = 1 Then
          aNamesSorted = aNames.Copy().Sort(gb.Ascent)
          aState[Column] = -1
        Else
          aNamesSorted = aNames.Copy().Sort(gb.Descent)
          aState[Column] = 0
        Endif

        For Each Name In aNamesSorted
          id = aNames.Find(Name)
          If id > -1 Then
            aAgesSorted.Add(aAges[id])
          Endif
        Next

      Endif

    Case 1
      aNamesSorted.Clear
      aAgesSorted.Clear

      If aState[Column] = 0 Then
        aAgesSorted = aAges.Copy()
        aNamesSorted = aNames.Copy()
        aState[Column] = 1
      Else

        If aState[Column] = 1 Then
          aAgesSorted = aAges.Copy().Sort(gb.Ascent)
          aState[Column] = -1
        Else
          aAgesSorted = aAges.Copy().Sort(gb.Descent)
          aState[Column] = 0
        Endif

        For Each age In aAgesSorted
          id = aAges.Find(age)
          If id > -1 Then
            aNamesSorted.Add(aNames[id])
          Endif
        Next

      Endif

  End Select

  DataTable(TableView1)

End
Saludos.
Shell 15-04-2021, 14:01
Buenas!.

Pues ya que estamos. Tengo una tabla tal como esta.

[Imagen: 1c1Gyun.png]

Tiene dos columnas, nombres y edades por ejemplo. La columna de las edades es editable.
Me gustaría ordenarla tanto por nombres como edades y un orden que sea "natural" ( por decirlo de alguna manera).

Como tal, no son números lo que vemos en la tabla, son textos o caracteres. De ahí el problema.

De principio este es el código:

Código:
Private nombres As New String[]
Private edades As New Byte[]

Public Sub Form_Open()

  nombres = ["Ana López Ruíz", "Carlos García Domingo", "José Zampaña Castillo", "Olivia Torres Ramirez",
    "Antonio Pardo Casas", "María Castro Arenas", "Luis Cavanillas Torres", "Enrique Duarte Panda",
    "Manuel Bonilla Perez", "Elisa Gutierrez Loma"]

  With tbEjemplo
    .Header = tbEjemplo.Horizontal
    .Rows.Count = nombres.Count
    .Columns.Count = 2
    .Columns[0].Title = "Nombres"
    .Columns[0].Alignment = Align.Center
    .Columns[1].Title = "Edades"
    .Columns[1].Alignment = Align.Center
    .Sorted = True  
  End With

  edades.Resize(nombres.Count)

End

Public Sub tbEjemplo_Data(Row As Integer, Column As Integer)

  If Column = 0 Then tbEjemplo[Row, 0].Text = nombres[Row]
  If Row Mod 2 = 0 Then tbEjemplo[Row, Column].Background = &hDDDDFF
  tbEjemplo.Columns[0].Width = -1 'Ancho automático

End

Public Sub tbEjemplo_Activate()

  If tbEjemplo.Column = 0 Then tbEjemplo.Edit

End

Public Sub tbEjemplo_Click()

  If tbEjemplo.Column = 1 Then tbEjemplo.Edit

End

Public Sub tbEjemplo_Save(Row As Integer, Column As Integer, Value As String)

  tbEjemplo[Row, Column].Text = Value
  If Column = 1 Then
    edades[Row] = Value
  Else
    nombres[Row] = Value
  Endif

End

Public Sub tbEjemplo_ColumnClick(Column As Integer)

  tbEjemplo.Save

  With tbEjemplo
    '.Sorted = True
    .Columns.Sort = Column
  End With  
  OrdenarTabla(tbEjemplo, Column, tbEjemplo.Columns.Ascending, Column = 1)
    
End

Public Sub OrdenarTabla(latabla As TableView, Column As Integer, ascendente As Boolean, numerico As Boolean)

  Dim z As New String[]
  Dim y As New String[]
  Dim s As String
  Dim i, j As Integer

  For i = 0 To latabla.Rows.Max
    If numerico Then
      s = latabla[i, Column].Text
      s = String(5 - Len(s), "0")
    Else
      s = latabla[i, Column].Text
    Endif
    For j = 0 To latabla.Columns.Max
      s &= "-" & latabla[i, j].Text
    Next
    z.Add(s)
  Next

  If ascendente Then
    z.Sort(gb.Ascent)
  Else
    z.Sort(gb.Descent)
  Endif

  For i = 0 To z.Max
    y = Split(z[i], "-")
    For j = 1 To y.Max
      latabla[i, j - 1].Text = y[j]
    Next
  Next

End

'Modificado para el ejemplo usando el disponible en la ayuda online de Gambas
' Public Sub tbEjemplo_Sort()
'
'   Dim Values, ValueSorted As New String[]
'   Dim Nx, iNx As Integer
'
'   ' Load sort column into string array
'   For Nx = 0 To tbEjemplo.Rows.Max
'     Values.Add(tbEjemplo[Nx, tbEjemplo.Columns.Sort].Text)
'   Next
'
'   ' Copy values to new array and sort it based on status of sort indicator
'   ValueSorted = Values.Copy()
'   ValueSorted.Sort(IIf(tbEjemplo.Columns.Ascending, gb.Ascent, gb.Descent))
'
'   ' Iterate through table swapping appropriate values
'   For Nx = 0 To ValueSorted.Max
'     For iNx = 0 To tbEjemplo.Columns.Max
'       Swap tbEjemplo[Nx, iNx].Text, tbEjemplo[Values.Find(ValueSorted[Nx], 0, Nx), iNx].Text
'     Next
'
'     ' Pick up new order to preserve proper handling of indexing and duplicate values
'     Values.Clear()
'     For iNx = 0 To tbEjemplo.Rows.Max
'       Values.Add(tbEjemplo[iNx, tbEjemplo.Columns.Sort].Text)
'     Next
'   Next
'
'   tbEjemplo.Refresh()
'
' End

No tengo problema con ordenar los nombres, pero si con los números.
Con los nombres:

[Imagen: ZmoIYn2.png]

Con los números (texto).

[Imagen: ztUzgWi.png]

 ¿ Qué estoy haciendo mal ?.

Podría crear un array y ordenar esos números y luego mostrarlos, pero entonces,¿ que hago con la columna de los nombres ?.
¿ Qué debería hacer para que quedasen juntos el nombre y la edad en su fila correspondiente al ordenarse ?.

Marchando el código.

Algo complicado...(Esto hubiera sido otro mensaje, contestando al anterior..pero es otro lio con el editor).
O al menos no encuentro la forma adecuada.

17.7.4 GridView - Sorting the data

El ejemplo se puede bajar en alemán, se puede traducir. Desde Gambas se puede traducir ciertas partes de la aplicación. Lo que vemos
se traduce, el contenido de un botón, la parte visual de un formulario.

Pregunto. Si el ejemplo si se sube a la comunidad. ¿ En que  idioma debe subirse ?

"Sprichst du Deutsch ? "

En parte me parece enrevesado, crear una clase. Y por otro lado que aún no se haya solucionado o pretendido dar una solución en el IDE de Gambas.
O es propio de la librería.

Saludos
Archivos adjuntos
.gz
EjemploConTabla-0.0.1.tar.gz (Tamaño: 12.72 KB Descargas: 2)
Páginas (569):    1 465 466 467 468 469 569   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 299
Último miembro: auroratomas
Temas del foro: 1,755
Mensajes del foro: 9,122
Últimos temas
El ratón no hace click do...
Foro: Instalación
Último mensaje por: guizans, 30-01-2026, 20:41
Respuestas: 2 - Vistas: 102
Parámetro de clase y pará...
Foro: General
Último mensaje por: guizans, 30-01-2026, 20:40
Respuestas: 8 - Vistas: 235
Gmao-Factory: Aplicación ...
Foro: Python
Último mensaje por: jguardon, 25-01-2026, 15:53
Respuestas: 5 - Vistas: 204
SqetchDB, un proyecto re-...
Foro: General
Último mensaje por: guizans, 21-01-2026, 19:57
Respuestas: 8 - Vistas: 381
Soporte para pasar Arrays...
Foro: Bases de Datos
Último mensaje por: Shordi, 19-01-2026, 19:14
Respuestas: 3 - Vistas: 262
Powered By MyBB, © 2002-2026 MyBB Group.
Made with by Curves UI.