AlfredoSC 13-10-2022, 01:38
Hola a todos:

Con gran tristeza cada vez le digo adiós a mis mejores conectores de electrónica, fabricados para durar muchos años, con una resistencia "bruta", para uso rudo. Entre ellos puedo mencionar:
Conectores DB-9, DB-15, DB-25 machos y hembras
Conectores Centronics para impresoras
Conectores DIN y Minidin para teclados y ratones
Conectores IDE para discos duros y otros dispositivos
Conectores USB 1.0, 2.0 Tipo A y tipo B

Los conectores de hoy día, duran menos, no hacen buen contacto, se aflojan. Hacen honor al consumismo, pero dan empleo a reparadores. No por eso dejan de ser muy malos. Cómo es que ganaron terreno en el mundo de la electrónica y computación?.

El tema viene a colación, por la recién noticia de que la UE (Unión Europea) ha obligado a los fabricantes a estandarizar un sólo conector para los dispositivos informáticos electrónicos. Acaso será lo mejor de lo mejor que haya existido?. Habrá quien se oponga a semejante orden?.

Saludos...
Shell 12-10-2022, 12:12
Buenas!.

He creado un ejemplo que tomando un directorio, indexa todos los nombres de los archivos y los muestra en un TabStrip.
En este caso, una vez que se muestran los archivos se desactiva el botón de seleccionar directorio.
La salida es esta:

[Imagen: 3ktQE75.png]

El formulario tiene su propiedad arrangement a vertical. Activadas a True, tanto Margin como Spacing.
El botón está dentro de un contenedor junto con un muelle y tiene su arrangement a horizontal
El TabStrip tiene su arrangement a vertical y su propiedad Expand a True.

Se muestra así en modo diseño.

[Imagen: VQDImoq.png]

Al ejecutarlo por primera vez, vemos el TabStrip tal como se ve en esa imagen, vacío, pero se ve.
Si lo hacemos no visible, el contenedor donde se encuentra el botón subirá arriba y una vez se haya seleccionado
un directorio, volverá a su lugar, mostrándose correctamente. No queda arriba y debajo el TabStrip ( eso es correcto).

¿ No creéis que el contenedor donde se encuentra el botón debería quedarse mejor abajo al inicio ?.
Pero al hacerse invisible TabStrip, desaparece este y sube el otro contenedor donde esta el botón.
No existe control que lo empuje abajo.

¿ Qué debería ser lo más estético ?.

El tema del control de errores puede no estar depurado, si recibe datos el array de los datos creo que lo solucioné.
Últimamente usando la clase Dialog, me muestra errores en la salida de consola cuando no hago algo bien.
( Creo que esto no solía mostrarse en otras versiones de Gambas, puede que se haya añadido con el tiempo, me parece bien).

Os adjunto el código.

Código:
Private grupoficheros As New String[]
Private carchivos As New Collection

Public Sub btndSelectDir_Click()
 
  Dim i As Integer
 
  grupoficheros.Clear()
 
  Dialog.Title = "Selecione un directorio"
  If Dialog.SelectDirectory() Then Return
 
  grupoficheros = Dir(Dialog.Path, "*.*", gb.File).Sort()
 
  Indexar(grupoficheros, TabStrip1)
  TabStrip1.Visible = True

  For i = 0 To TabStrip1.Count - 1
    TabStrip1.Index = i   
    CrearGridView(TabStrip1, carchivos[TabStrip1.Current.Text])
  Next
  btndSelectDir.Enabled = False
 
End

Public Sub Indexar(atmp As String[], tabstripficheros As TabStrip)
 
  Dim letra As String
  Dim archivo As String
  Dim aarchivos As String[]
  Dim i As Integer  
 
  i = 0
 
  For Each archivo In atmp
    letra = Left(archivo, 1)
    If Not carchivos.Exist(letra) Then
      aarchivos = New String[]
      carchivos[letra] = aarchivos
      tabstripficheros.Count = i + 1
      tabstripficheros[i].Text = letra
      carchivos[letra].add(archivo)
      Inc i
    Else
      carchivos[letra].add(archivo)
    Endif
  Next
 
End

Public Sub CrearGridView(contenedor As TabStrip, lista As String[])
 
  Dim ggridview As GridView
  Dim filas As Integer
  Dim x As Integer
 
  If lista.Count = 0 Then Return
 
  ggridview = New GridView(contenedor) As "hgrd"
  With ggridview
    .Expand = True
    .Columns.Count = 1
    .Rows.Count = 1
    .Header = GridView.Both
    .Mode = Select.Single
    .ScrollBar = Scroll.Both
  End With
 
  filas = 0
  'Rellenar las celdas  
  For x = 0 To lista.Max
    ggridview.Rows.Count = filas + 1
    ggridview[x, 0].Text = lista[x]
    Inc filas   
  Next
 
End

Public Sub Form_Open()

  TabStrip1.Visible = False

End

Y su código fuente.

Saludos

Un muelle entre el tabStrip y el contenedor inferior

[Imagen: fOM59N3.png]

Cuando se ejecuta bien, pero cuando el tabstrip aparece..

[Imagen: zfVy83e.png]

Problema de contenedores.
Archivos adjuntos
.gz
MostrarArchivosPorIndice-0.0.1.tar.gz (Tamaño: 12.5 KB Descargas: 2)
Shell 10-10-2022, 15:11
Buenas!.

Estoy ejecutando un test y me devuelve violación de segmento rápidamente. A ver como se depura eso.
Es un error en tiempo de ejecución.

Os adjunto el código. Lo primero que se me ocurre es que el array crece y crece.

Código:
Public Sub btnSelectDir_Click()
    
  ObtenerNomArchivos(ruta)
 
End

Public Sub ObtenerNomArchivos(directorio As String)
 
  Dim archivos As String[]
 
  archivos = Dir(directorio, "*.*", gb.File)
  If archivos.Length = 0 Then
    Return
  Else
    TestBenchMark("ObtenerExtensiones", archivos)
    TestBenchMark("ObtenerExtensiones2", archivos)    
  Endif   
 
End

Public Sub TestBenchMark(nombrefuncion As String, aelementos As String[])
 
  Dim i, t As Float
  Dim ob As Object
 
  ob = Me
 
  t = Timer
 
  For i = 1 To 10 ^ 6
    Object.Call(ob, nombrefuncion, aelementos)
  Next
 
  Print "Tiempo para 10^6 repeticiones, método: " & nombrefuncion & " = " & "\t"; Format(Timer - t, "0.######") & "s" & "\t"
 
End

Public Sub ObtenerExtensiones(aarchivos As String[]) As String[]
 
  Dim aextensiones As New String[]
  Dim nombref As String
  Dim extension As String
 
  Dim pos As Integer
 
  For Each nombref In aarchivos
    pos = RInStr(nombref, ".")
    extension = Mid(nombref, pos + 1)    
    If Not aextensiones.Exist(extension) Then
      aextensiones.Add(extension)
    Endif
  Next
  Return aextensiones
 
End

Public Sub ObtenerExtensiones2(aarchivos As String[]) As String[]
 
  Dim aextensiones As New String[]
  Dim nombref As String
  Dim extension As String
 
  For Each nombref In aarchivos
    extension = File.Ext(nombref)
    If Not aextensiones.Exist(extension) Then aextensiones.Add(extension)      
  Next  
  Return aextensiones
 
End

En la primera función no uso el componente gb.util y en el siguiente si. Casi me da igual en resultado por eso lo del test.
Por otra parte nadie recibe el valor devuelto por la función. Que podría ser un procedimiento que no devuelva valor.
 

De un post explicado que es y con el lenguaje "C"..yikes! ..es broma. Wink

¿Qué significa Violacion de Segmento?

Algo común: Se produce cuando...
Cita:- Intentar acceder una variable que ya fue liberada.
- Intentar escribir sobre una variable de solo lectura. ( No se da el caso , no es una propiedad ).
 

El error se produce en Object.Call desde la primera vez.
Páginas (557):    1 253 254 255 256 257 557   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 286
Último miembro: Emilio Uribe
Temas del foro: 1,720
Mensajes del foro: 8,936
Últimos temas
Archivos .ods
Foro: General
Último mensaje por: tincho, 01-07-2025, 18:54
Respuestas: 8 - Vistas: 334
Publicidad
Foro: Sobre gambas-es.org
Último mensaje por: tincho, 01-07-2025, 18:48
Respuestas: 6 - Vistas: 369
Web con gambas, a ver si ...
Foro: WebApp/WebForms
Último mensaje por: tincho, 01-07-2025, 17:47
Respuestas: 41 - Vistas: 32,725
Un sistema de ayudas cont...
Foro: Videotutoriales
Último mensaje por: guizans, 22-06-2025, 19:55
Respuestas: 3 - Vistas: 330
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.