Siempre es enriquecedor ver tus videos, así que muchas gracias por preparar este material y compartirlo.
Te paso algo de feedback.
Configuraciones: Si bien la clase Settings hace su trabajo bastante bien, esta adolece de algunos problemas, por ejemplo si una variable es cero o nula la borra del archivo de configuraciones que es de tipo .ini (bastante obsoleto ya) luego no permite el uso del operador punto para recuperar o alterar los parámetros. En su lugar sugiero que usar la clase Config que usa un archivo tipo JSON, mas moderno y que permite que se construyan formularios de edición de la configuración de forma sencilla.
Clase config
Código:
' Gambas class file
Create Static
Export
'' Ejemplo de variables usadas en EditorForm
Public EditorTheme As String  '' Text editor theme
Public EditorWrap As Boolean  '' Wrap text in editor
Public EditorSwap As Boolean  '' Swap between image or web
Public EditorTextHeight As Integer
Public EditorLineNumber As Boolean
Public EditorIcon As Boolean
Public EditorPreview As Boolean
Public EditorLayout As Integer[]
Public EditorLearning As New Collection
Public Sub Load(sFile As String)
  Dim cConfig As Collection
  Dim sSymbol As String
  Dim obj As Object = Me
  Dim MyClass As Class = Object.Class(obj)
  If Exist(sFile) Then
    cConfig = JSON.FromString(File.Load(sFile))
    For Each sSymbol In myClass.Symbols
      If cConfig.Exist(sSymbol) Then
        Object.SetProperty(obj, sSymbol, cConfig[sSymbol])
      Endif
    Next
  Endif
End
Static Public Sub Save(sFile As String, Optional j As JSONCollection)
  Dim jConfig As New JSONCollection
  Dim obj As Object = Me
  Dim MyClass As Class = Object.Class(obj)
  Dim sSymbol As String
  Dim Var As String
  Dim Valor As Variant
  If Not Exist(File.Dir(sFile)) Then
    Shell "mkdir -p " & File.Dir(sFile) Wait
  Endif
  If j Then
    jConfig = j.Copy()
    For Each sSymbol In myClass.Symbols
      If jConfig.Exist(sSymbol) Then
        Object.SetProperty(obj, sSymbol, jConfig[sSymbol])
      Endif
    Next
  Else
    For Each Var In myClass.Symbols
      If (MyClass[var].kind = Class.Variable) Or (MyClass[var].kind = Class.Property) Then
        valor = Object.GetProperty(obj, var)
        jConfig.Add(Valor, var)
      End If
    Next
  Endif
  File.Save(sFile, JSON.Encode2(jConfig))
End
Luego en el formulario principal hay que iniciar la clase y cargar la configuración del archivo.
Código:
'' Startup the config environment data
  Config.AppDir = User.Home &/ ".config/rad"
  Config.Depot = Config.AppDir &/ "config.json"
'' Uploading and setting up the configuration
  Config.Load(Config.Depot)
Luego cada vez que algún parámetro es alterado en cualquier parte
Código:
    Config.Save(Config.Depot) ' Config.Depot es la ruta al arcuvo cargada al inicio, reconozco que esto podría mejorarse y ser un parametro opcional que este definido al pincipio y luego no sea necesario especificarlo cada vez. o tal vez que la misma clase guarde cada cambio instantáneamente.
Para recuperar el valor de una variable solo basta con poner, en cualquier parte del programa:
Código:
Config.NombreDeLaVariable
'Por ejemplo
Config.EditorIcon
' Esto devolverá un booleano
' para alterar el valor de la variable
Config.EditorIcon = False
' No se por que no hice que se guarde inmediatamente. revisare el tema