Shell 05-10-2024, 11:27
Buenas!.

Usando un comando externo a Gambas. Intente usar Try, Catch, Error para comprobar si el proceso
me detectaba error, pero no lo he logrado de esa manera.

Si lo he logrado mediante la gestión del proceso.

Ejemplo uno. No me funciona.

Código:
Public Sub Button1_Click()

  'Es solo un ejemplo, el comando podía haber sido otro

  Shell "ls -l /home/pepe/"

  If Error Then
    Print "El directorio no existe"
  Else
    Print "Fin"
  Endif

End

Como es normal no he usado Try, que esto hace que se ejecute la instrucción si o si, de error o no lo de.

Ahora usando Procesos, el que me ha funcionado.
Ejemplo dos.

Código:
Private textoError As String

Public Sub Form_Open()

End

Public Sub Button1_Click()

  'Limpiamos siempre el contenido de la variable
  textoError = ""

  'Es solo un ejemplo, el comando podía haber sido otro

  Shell "ls -l /home/pepe/" For Read Write As "Proceso"

End

Public Sub Proceso_Error(sError As String)

  textoError &= sError

End

Public Sub Proceso_Read()

  Dim sLinea As String

  sLinea = Read #Last, Lof(Last)

  Print sLinea;

End

Public Sub Proceso_Kill()

  If textoError Then Message.Error(textoError)
  Print "Proceso Finalizado"

End

Saludos
AlfredoSC 05-10-2024, 03:24
Hola a todos:

Ufff....BIOS y UEFI, me parece complejo....

Hace unos días decidí formatear el disco duro de una portátil DELL Inspiron con un procesador dual core (ya es ancianita). Primero instalé Win10 y todo bien. Abrí el gestor de Discos y particioné el DD para dejar otros dos espacios, uno para Linux y otro de Reserva o Almacén para respaldos.

Como ya había tomado algo de experiencia al haber hecho esto varias veces en otras PC's, introduje el DVD de LinuxMint 21.1 y obedientemente comenzó a iniciar ese sistema operativo en Live. Ahí está el ícono para iniciar la instalación. Llegado el momento, me gusta hacer la selección de la partición en forma manual, así que fui por esa opción, pero salía una leyenda sobre GPT o BIOS, cosa con la que nunca me había topado.

Por no caer en un desastre (que poco importaba), di marcha atrás y elegí "Instalar LinuxMint junto a Windows". Lo que son las cosas, inició el proceso y terminó sin decir nada mas.

Yo esperaba que Linux tomara el control del arranque, como siempre ha sucedido en mis instalaciones múltiples, pero vi con asombro que solamente Windows arrancaba, sin el querido GRUB. Que pasó?...

Usé mis discos de recuperación "Super Grub 2" y si aparecía Linux Mint, pero nuevamente mencionaba UEFI, GPT, BIOS, y de todos modos no lograba hacer arrancar LinuxMint.

Luego de picar por todos lados, incluyendo Internet, que no logré aclarar nada, reinicié la portátil por n-ésima vez, pero ahora con F12 para elegir la unidad para bootear. Me sorprendió ver que en el menú apareció primero en modo BIOS el arranque de la partición Windows. Mas abajo, apareció UEFI --> Ubuntu, así que me desplacé a ese renglón, Enter y de esa forma inició LinuxMint.

Será la edad, pero cada vez entiendo menos. Je je....Lo voy a comentar con los amigos del foro, seguramente alguien mas avezado me pueda explicar con detalle todo ese mundillo de la BIOS, la UEFI, la EFI, el GPT, etc....Vaya forma de complicar las cosas.....
Harpo 03-10-2024, 20:44
Saludos,

Les traigo una pequeña aplicación que he desarrollado para editar temas de Gambas, por si a alguien le es de utilidad. Estaba con un editor de ficheros SVG y el editor de Gambas no tiene definido ese formato, lo más parecido es HTML. Y en Gnome en modo oscuro se visualiza muy mal. Así que me puse a investigar como cambiarlo.

Para quien el interese, el editor de Gambas (gb.form.editor) tiene dos propiedades:
  • Mode: cómo identifica el código.
  • Highlight: como formatea el código, colores, tipo de letra.
En ambos casos hay una lista predefinida: Gambas - HTML - CCS - SQL - ....

Todo lo relativo al formateo de código está en el componente gb.Highlight. Dentro tenemos 3 clases:
  • TextHighlighter: la clase padre de todos los formateadores de código, es estática. Y contiene las palabras claves (States) y su formato.
Por ejemplo el siguiente código lista todos los estados de todos los TextHighlighters:
Código:
   Dim sHighLighter, sState As String

   For Each sHighLighter In TextHighlighter.List
      For Each sState In TextHighlighter[sHighLighter].States
         Debug sHighLighter & "." & sState
      Next
   Next

' Salida HTML
' html.Attribute
' html.Comment
' html.Doctype
' html.Entity
' html.Markup
' html.Normal
' html.Value
  • TextHighlighterStyle: Es la clase que define el estilo usado para pintar los States,
  • TextHighlighterTheme: Unifica los anteriores, un tema básicamente es un conjunto de estilos:
Código:
[Gambas Highlighting Theme 1.0]
Attribute="#FFFFFF,Bold"
Comment="#33D17A"
Doctype="#929291,Bold"
Entity="#E67E22,Bold"
Markup="#99C1F1,Bold"
Normal="#FFFFFF"
Value="#F5C211"
Background="#494949"

Y aclarado lo anterior, la aplicación. Es un 3 en 1.

Editor de Temas, tiene dos áreas:
  • En la parte superior
    • Un ComboBox para seleccionar el Highlighter y un CheckBox para incluir todos los estados definidos, no solo los del Highlighter seleccionado.
    • Un ColumnView con los estilos de base, en negrita y subrayado los estilos propios del Highlighter seleccionado.
    • Un segundo ColumnView con los estilos que queremos en el nuevo tema.
    • Una columna de botones para mover estilos entre los dos ColumnView
    • Unos controles a la derecha para cambiar los estilos del nuevo tema: color y tipos de letra.
    • 3 botones: para probar el nuevo tema en el editor de abajo, para guardar el tema y para cargar un fichero con la definición de un tema.
  • En la parte inferior un editor y un FileBox para cargar ficheros en el editor.
[Imagen: p6S8QTY.png][Imagen: bHsoDT8.png]

Colores, básicamente es un selector de colores y dos utilidades: Color Merge y SetAlpha. El código de Gambas usa esas dos funciones muy habitualmente y siempre estaba probando números. Una observación, el selector de colores de este formulario se actualiza cuando seleccionamos un elemento en cualquiera de los dos ColumnView del formulario anterior. Para ello usa una clase Dictionary, un Collection con eventos y algunas cosas más.

[Imagen: APfPYCC.png]

Palette. Un generador de paletas de colores usando Color.HSV. Se selecciona el valor del Spinbox de arriba a la izquierda y pulsando el botón de debajo genera la paleta en un GridView. Abajo a la derecha es lo mismo pero pudiendo modificar tres parametros: HUE - Saturación - Valor.
[Imagen: HQ6UV0s.png]

Clase Dictionary. En ocasiones hecho de menos poder añadir información a una clase Collection, además de el par Key-Value y de ahí que haya desarrollado esta clase.
Deriva de Collection pero no usa herencia, reimplementa la clase. En vez de usar un Variant para Value usa una clase _Dictionary_Item, un Variant[2].
Las diferencias son las siguientes:

Código:
   Dim hCol As Collection
   Dim hDict As Dictionary
   Dim hItem As _Dictionary_Item
   
   Dim sKey As String
   Dim vValue, vAttrib As Variant
   
   ''Asignar valor: _put
   hCol[sKey] = vValue      'Collection
   hCol.Add(vValue, sKey)
   
   hDict[sKey] = vValue         'Dictionary
   hDict[sKey].Attrib = vAttrib
   hDict.Add(vValue, sKey, vAttrib)
   
   'Esto no funciona!!
   With hDict[sKey]
      .Value = vValue
      .Attrib = vAttrib
   End With
   
   ''Leer valor: _get
   vValue = hCol[sKey]        'Collection
   
   hItem = hDict[sKey]    'Dictionary devuelve un objeto _Dictionary_Item
   vValue = hDict[sKey].Value
   vAttrib = hDict[sKey].Attrib
   
'
   With hDict[sKey]
      vValue = .Value
      vAttrib = .Attrib
   End With

   ''Bucle lectura
   For Each vValue In hCol
      '.....
   Next    
   For Each hCol
      '.....
   Next
   
   For Each hItem In hDict
      '.....
   Next
   For Each hDict
      '.....
   Next
   For Each sKey In hDict.Keys
      '.....
   Next

Y el proyecto con el programa. Espero que les sea de utilidad.
Un saludo, Harpo.

Una última observación sobre la clase Dictionary, tiene dos eventos:
  • Event Change(Key As String, Modify As Boolean)
  • Event Remove(Key As String)
Y funciona como cualquier evento:
Código:
cThemeColors = New Dictionary As "ThemeColors"

Public Sub ThemeColors_Change(Key As String, Modify As Boolean)      ''Dictionary event

   ' Se dispara al añadir un elemento al Dictionary o modificarlo.

End

Y una última observación, la clase Dictionary también emula a una JSONCollection, admite nulos. Por otro lado importa y exporta JSON:
  • Public Sub FromString(JSONString As String)     ''Load Dictionary from JSON string
  • Public Sub JSONLoad(JSONFile As String)      ''Load Dictionary from JSON file
  • Public Function ToString(Optional Indent As Boolean) As String             ''Export Dictionary to JSON string,
  • Public Function JSONSave(JSONFile As String, Optional Indent As Boolean) As Boolean   ''Save Dictionary to JSON file.
El Indent de las funciones no tiene relevancia, siempre indenta las cadenas o ficheros.

Y agradecimientos, parte importante del código no es mio. La función para formatear JSON es autoria de Tincho sino recuerdo mal. Las funciones para convertir colores de Shordi. Gracias a los maestros.
Archivos adjuntos
.gz
Colors-1.0.6.tar.gz (Tamaño: 39.56 KB Descargas: 2)
Páginas (520):    1 9 10 11 12 13 520   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 264
Último miembro: NEURO
Temas del foro: 1,595
Mensajes del foro: 8,330
Últimos temas
Ver los repositorios del ...
Foro: Mundo Linux
Último mensaje por: Shordi, Hace 6 horas
Respuestas: 1 - Vistas: 27
¿Cómo crear servidor FTP ...
Foro: General
Último mensaje por: Shordi, Hace 6 horas
Respuestas: 2 - Vistas: 46
TextEditor. Formateado. E...
Foro: General
Último mensaje por: Shell, Ayer, 14:33
Respuestas: 2 - Vistas: 34
Gambas 3.20
Foro: Instalación
Último mensaje por: Shell, Ayer, 14:32
Respuestas: 11 - Vistas: 287
Antiguo foro. ¿ Viable ?
Foro: Sobre gambas-es.org
Último mensaje por: Shell, Ayer, 11:50
Respuestas: 0 - Vistas: 21
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.