Grandamakulo 22-08-2021, 12:01
Hola a todos:
¿Existe alguna manera de acceder directamente a un elemento de un XML de manera similar a cómo se hace con «.Key» de un TreeView?
Ahora mismo estoy accediendo a los subelementos de un elemento así:

Código:
Public Sub trvProyecto_Select()

  Dim txtPaso As String
  Dim Elemento As XmlElement
  Dim Elementos As XmlElement[]
  Dim Subel As XmlElement
  Dim Subels As XmlElement[]
  Dim Valores As New String[]
  Dim i As Byte
  
'Estos en realidad se leen de CDATA del XML
  Dim Campos As String[] = ["contenido", "notas", "sinopsis"]
'Estos deberían ser constantes de la aplicación
  Dim intContenido As Integer = 0
  Dim intNotas As Integer = 1
  Dim intSinopsis As Integer = 2

  Valores.Resize(Campos.Count)  
  txtPaso = trvProyecto.Item.Key
  lblActual.Caption = trvProyecto.Item.Text
  Elemento = xmlObjeto.Root
  Elementos = Elemento.GetChildrenByNamespace("id")
  
  For Each Elemento In Elementos
    If Elemento.Value = txtPaso Then
      For i = 0 To Campos.Max
        Subels = Elemento.Parent.GetChildrenByNamespace(Campos[i],, 2)
        If Subels.Count Then 
          Subel = Subels[0]
          Valores[i] = Subel.Value
        Endif 
      Next
    Endif
  Next
  
'Y aquí ya se hacen «cositas» con los datos leídos.
  txtPral.RichText = Valores[intContenido]

End

¿Habría alguna manera menos aparatosa?
Muchas gracias compañeros.[/i][/i]
Shordi 20-08-2021, 20:33
Aquí os dejo un nuevo control que he desarrollado. Es un reproductor de mp3, wav y ogg con un espectrómetro incorporado, al estilo de Audacious. El control se basa en la clase SpectrumPlayer del proyecto AudioSpectrum que podéis encontrar aquí: https://github.com/prokopyl/AudioSpectrum Lo que yo he aportado a ésto ha sido la conversión de las clases estáticas y módulos de AudioSpectrum en un control de gambas.
No podía utilizar el mismo nombre y lo he abreviado a SpPlayer.

Como propiedades expuestas al IDE tenéis el FileName, el color de Fondo, el número de barras y el fondo animado (el fondo cambia de color según la intensidad de la música)

En el proyecto gbAmp, que tenéis aquí: https://gitlab.com/shordi/gbamp tenéis un ejemplo completo de uso del control.

[Imagen: V3HRLit.png]

Os dejo aquí el fuente de un pequeño proyecto en forma de componente que lo incluye y del que podéis crear el paquete de instalación e instalarlo en vuestras máquinas. A partir de entonces dispondrés del control como un componente más de Gambas.

Espero que os sea útil.

Saludos.
Archivos adjuntos
.gz
spPlayer-0.0.2.tar.gz (Tamaño: 10.93 KB Descargas: 4)
tincho 20-08-2021, 13:48
Hola amigos.
Aquí les propongo una función que formatea un texto Json de una forma mas legible para humanos.
Gracias al aporte de  Laurent Carlier
https://gitlab.com/lordheavy/alpha/-/blo...class#L100
Para usar esto les recomiendo que creen una clase en vuestro proyecto llamada JSON (en mayúsculas) y luego pongan esto dentro y luego llamen al método normalmente desde todas partes con JSON.Encode2

Código:
' Gambas class file

' This program is free software; you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation; either version 2 of the License, or
' (at your option) any later version.

Export

'' Encode in JSON format in a human readable way. Based on a Laurent tool

Static Public Function Encode2(vData As Variant) As String
 
  Dim sInput As String
  Dim sOutput As String
  Dim iStream As Stream
 
  Dim $sReadChar As String
  Dim $iTab As Integer
  Dim $bQuote, $bBracket As Boolean
 
  sInput = JSON.Encode(vData)
 
  iStream = Open String sInput For Read
 
  While (Not Eof(iStream))
    $sReadChar = Read #iStream, 1
    If ($sReadChar = "{" And Not $bQuote) Then
      $iTab += 1
      $sReadChar &= "\n" & Space$($iTab * 2)
    Else If ($sReadChar = "}" And Not $bQuote) Then
      $iTab -= 1
      $sReadChar = "\n" & Space$($iTab * 2) & $sReadChar
    Else If ($sReadChar = "\"") Then
      $bQuote = Not $bQuote
    Else If ($sReadChar = "[") Then
      $bBracket = True
    Else If ($sReadChar = "]") Then
      $bBracket = False
    Else If ($sReadChar = ":" And Not $bQuote) Then
      $sReadChar &= " "
    Else If ($sReadChar = "," And Not $bQuote) Then
      If (Not $bBracket) Then
        $sReadChar &= "\n" & Space$($iTab * 2)
      Else
        $sReadChar &= " "
      Endif
    Endif
    sOutput &= $sReadChar
  Wend
 
  Close iStream
  ' replace null with ""
  sOutput = Replace(sOutput, " null", " \"\"")
 
  Return sOutput
 
End
Páginas (557):    1 395 396 397 398 399 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,934
Últimos temas
Archivos .ods
Foro: General
Último mensaje por: tincho, 01-07-2025, 18:54
Respuestas: 8 - Vistas: 242
Publicidad
Foro: Sobre gambas-es.org
Último mensaje por: tincho, 01-07-2025, 18:48
Respuestas: 6 - Vistas: 328
Web con gambas, a ver si ...
Foro: WebApp/WebForms
Último mensaje por: tincho, 01-07-2025, 17:47
Respuestas: 41 - Vistas: 32,574
Un sistema de ayudas cont...
Foro: Videotutoriales
Último mensaje por: guizans, 22-06-2025, 19:55
Respuestas: 3 - Vistas: 304
Crear una aplicación para...
Foro: Bases de Datos
Último mensaje por: Shell, 29-05-2025, 20:11
Respuestas: 11 - Vistas: 1,482
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.