Grandamakulo   28-07-2023, 11:45
#1
Hola a todos:
Tengo un formulario en el que he incrustado el IconPanel «iconpAyuda». Pretendo leer varios archivos «html» de un directorio y que cargue cada uno en una nueva «Tab» en la que creo un TextEditor para poder incorporar el «RichtText» de cada ayuda. Antes lo hacía con un «ListView», un solo editor y una matriz de cadenas, pero me gustaría poder cambiarlo a la idea que explico.
El problema que tengo es que no sé cómo crear los TextEditor de manera dinámica. ¿Podéis ayudarme? Gracias de antemano.

El código que uso es éste:

Código:
Public Sub _new()

  Dim sArchivos As String[]       ' Archivos de ayuda en formato html
  Dim sArchivo As String          ' Nombre archivo en tratamiento
  Dim sPaso As String             ' Para traspasar y operar cadena
  Dim rTitulo As New RegExp       ' RegExp para extraer el valor del título
  Dim i As Integer                ' Contador
  Dim txeAyuda As New TextEdit[]  ' TextEditor para mostrar la ayuda en RichText
  
  ' Título: se supone que este formulario va en una aplicación mayor
   Me.Text = ("Ayuda") & " " & Application.Name & " " & Application.Version
  
  sArchivos = Dir(Application.Path &/ "Ayuda").Sort()
  i = 0
  For Each sArchivo In sArchivos
    sPaso = File.Load(Application.Path &/ "Ayuda" &/ sArchivo)  ' Lista de archivos
    rTitulo.Compile("<title[^>]*>(.*)</title>")                 ' Extraer título con RexEx
    rTitulo.Exec(sPaso)
    icopAyuda.Count = i + 1                                     ' Por cada archivo se añada una «Tab»
    If rTitulo.Count > 0 Then 
        icopAyuda[i].Text = Util.HTMLaTexto(rTitulo[0].Text)    ' Si existe título, se nombra la «Tab»
      Else 
        icopAyuda[i].Text = ("Anónimo")                         ' Si no, ya veré qué poner...
    Endif
    txeAyuda.Add("Qué narices pongo aquí")  '' ¿Qué narices pongo aquí? Tiene que ir un txe, pero es el 
    txeAyuda[i].Reparent(icopAyuda[i])      '' que estoy creando justo ahora...
    txeAyuda[i].Expand = True
    txeAyuda[i].RichText = sPaso
    i = i + 1
  Next
  

End
Última modificación: 28-07-2023, 13:57 por Grandamakulo.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
Shordi   28-07-2023, 13:28
#2
Buff... no comprendo muy bien lo que quieres hacer, pero te apunto otra vía más sencilla:

creas un formulario con tu texteditor y todo lo que quieras y lo llamas (para el ejemplo FormEditador). Luego:

 
Código:
dim f as formEditador
sArchivos = Dir(Application.Path &/ "Ayuda").Sort()
icopAyuda.Count=sArchivos.count  ' Por cada archivo se añada una «Tab»

  For i=0 to sArchivos.max
    sPaso = File.Load(Application.Path &/ "Ayuda" &/ sArchivos)  ' Lista de archivos
 
    'Estas dos líneas de abajo las cambias al evento open del formulario f, que creamos a continuación
    ' rTitulo.Compile("<title[^>]*>(.*)</title>")                 ' Extraer título con RexEx
    ' rTitulo.Exec(sPaso)
    f=new formEditador(icopAyuda[i)  'o como sea que se referencie la nueva tab.
    f.Tag=sPaso 'en el tag le pasamos el archivo
   f.visible=True
  Next

El icoAyuda debera tener arrangement a Fill para que el formEditador llene la pestaña por completo y cada formEditador creado dispone del archivo en su propiedad Tag, y todo proceso lo haces dentro de él (evento open, sobre todo)

Así toda manipulación visual y todo tejemaneje sobre el archivo está aislada dentro del formEditador.

Es como yo lo haría.


Saludos
Última modificación: 28-07-2023, 13:32 por Shordi.

No podemos regresar
Grandamakulo   28-07-2023, 13:45
#3
Solucionado gracias a Curso de Gambas


Código:
' Gambas class file

Public Sub _new()

  Dim sArchivos As String[]       ' Archivos de ayuda en formato html
  Dim sPaso As String             ' Para traspasar y operar cadena
  Dim rTitulo As New RegExp       ' RegExp para extraer el valor del título
  Dim i As Integer                ' Contador
  Dim txeAyuda As New TextEdit[]  ' TextEditor para mostrar la ayuda en RichText
  
  ' Título: se supone que este formulario va en una aplicación mayor
   Me.Text = ("Ayuda") & " " & Application.Name & " " & Application.Version
  
  sArchivos = Dir(Application.Path &/ "Ayuda", "*.HTML").Sort()
  icopAyuda.Count = sArchivos.Count
  i = 0
  For i = 0 To sArchivos.Max
    sPaso = File.Load(Application.Path &/ "Ayuda" &/ sArchivos[i]) 
    rTitulo.Compile("<title[^>]*>(.*)</title>")                 ' Extraer título con RexEx
    rTitulo.Exec(sPaso)
    If rTitulo.Count > 0 Then 
        icopAyuda[i].Text = Util.HTMLaTexto(rTitulo[0].Text)    ' Si existe título, se nombra la «Tab»
      Else 
        icopAyuda[i].Text = ("Anónimo")                         ' Si no, ya veré qué poner...
    Endif
    Dim txeTemporal As New TextEdit(icopAyuda[i]) As ("Temporal")
    txeAyuda.Add(txeTemporal)
    txeAyuda[i].Expand = True
    txeAyuda[i].RichText = sPaso
    txeAyuda[i].ReadOnly = True
  Next

End

@Shordi, he incorporado tu simplificación. No sé cómo lo ves ahora...
Última modificación: 28-07-2023, 14:03 por Grandamakulo.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
Shordi   28-07-2023, 17:17
#4
Cita:@Shordi, he incorporado tu simplificación.
¿Dónde?, no lo veo...

No podemos regresar
Grandamakulo   29-07-2023, 13:46
#5
Perdona, lo probé y más o menos funcionó, pero me obligaba a tener varias funciones ad latere y más código. Al final, dejé este último que me funciona, es todo el código de este formulario y, sin ser tan elegante, me parece menos lioso —es que soy muy cortico, jajaja—.
Vamos, que cambié el código en el mensaje, pero no el resto del mensaje... Rolleyes
En cualquier caso, muchas gracias, tus enseñanzas no caen en saco roto —sí en cerebro agujereado, Big Grin , pero eso es otra historia—.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.