Buenas tardes, estoy intentando hacer una aplicacion para la generacion de Compact Flash como HDD, pero necesito añadir un modulo para editar ciertos ficheros de configuracion con extension .cfg
Consigo cargar los ficheros pero no veo el archivo entero en si...
PUBLIC SUB Abrir_editor_Click()
DIM arrCad AS NEW String[]
DIM txtTemp AS TextArea
DIM c AS String
DIM ruta AS String
Dialog.Title = "Seleccione un archivo"
Dialog.Filter = ["*.cfg", "Ficheros de Configuracion"]
IF Dialog.OpenFile() THEN
Message.Info("No ha seleccionado nada")
ELSE
ruta = Dialog.Path
arrCad = Split(File.Load(ruta), "\n")
txtTemp = Editor.Children[0]
END IF
IF txtTemp.Text <> "" THEN
nuevaHoja()
END IF
FOR EACH c IN arrCad
Editor.Text = ruta
txtTemp = Editor.Children[0]
txtTemp.Text &= c & "\n"
NEXT
END
Con este codigo consigo cargarlo, pero lo dicho, no veo el fichero entero... solo veo una parte...
#####################################################
#
CO CN=O61PCINC TA=DIF001 NE=14 NU=1 MO=1 EN=H IM=40 LI=0 LR=251 MI=0 MR=50.2 VR=999999999 UI=lm2 DE="PRECIP. CM EN VALIRA EN SEO DE URGEL"
#
#####################################################
# --> Definicion VARIABLES CALCULADAS
#####################################################
#
CO AI=O65QRIO1 TA=AILOG1 NE=2 NU=0 MO=1 NS=1000 EN=N CV=NULO FI=0 VA=A HH=23 HI=80 LO=20 LL=10 HU=0.0 HD=0.0 GP=0.0 GN=0.0 HG=0.0 UI=m3S DE="Q. RIO VALIRA EN SEO DE URGEL"
#
Esas lineas son las que veo, pero el fichero contiene 144 lineas a mostrar...
El error que veo en el IDE es el siguiente...
(Texto:3682): Gtk-CRITICAL **: gtk_text_buffer_emit_insert: assertion `g_utf8_validate (text, len, NULL)' failed
lo veo muchas veces...
Como puedo conseguir verlas todas? No le encuentro el fallo la verdad...
Por cierto, para luego guardar los cambios si lo modifico? como deberia de hacerlo? Desde ya muchas gracias...
Problema Con La Fabricacion De Un Editor De Texto... (Solucionado, Cambio De Diseño)
Objetivo: Problema Con La Fabricacion De Un Editor De Texto... (Solucionado, Cambio De Diseño)
última edición por Pablo-GNU el Sabado, 23 Enero 2010, 14:54; editado 1 vez
última edición por Pablo-GNU el Sabado, 23 Enero 2010, 14:54; editado 1 vez
Objetivo: Re: Problema Con La Fabricacion De Un Editor De Texto...
Vamos a ver
Falta información para saber lo que te ocurre.
En vez de hacer esto
con lo que dejas cada línea sin \n en cada elemento del array
y luego hacer un bucle para recorrer ese array y en cada línea deshacer lo anterior
¿No sería mejor meterlo ya directamente?
Esto no te resuelve nada. Solo lo simplifica
¿Podrías especificar para qué quieres txttemp si en realidad tu quieres tu archivo en un editor?
De hecho se me ocurren bastantes soluciones mas sencillas como por ejemplo un textedit
Y ya tienes todo tu texto allí y solo necesitas los métodos de textedit para hacer lo que quieras hacer. Entiendo que con el Editor te vale igual (si le haces una sintaxis incluso mejor) pero no sé usarlo.
Vamos que me da la impresión que te haces un lío aunque no estoy seguro de haber entendido bien tu código
PUBLIC SUB Abrir_editor_Click()
DIM arrCad AS NEW String[]
DIM txtTemp AS TextArea
DIM c AS String
DIM ruta AS String
Dialog.Title = "Seleccione un archivo"
Dialog.Filter = ["*.cfg", "Ficheros de Configuracion"]
IF Dialog.OpenFile() THEN
Message.Info("No ha seleccionado nada")
ELSE
ruta = Dialog.Path
arrCad = Split(File.Load(ruta), "\n") 'aquí tienes cada línea de ese archivo
txtTemp = Editor.Children[0] 'esto no se que es
END IF
IF txtTemp.Text <> "" THEN
nuevaHoja() 'esto tampoco se que es
END IF
FOR EACH c IN arrCad
Editor.Text = ruta
txtTemp = Editor.Children[0] 'no lo entiendo
txtTemp.Text &= c & "\n" 'aquí vas metiendo línea a línea todo lo que separaste antes con el \n y poniéndolo de nuevo
NEXT
DIM arrCad AS NEW String[]
DIM txtTemp AS TextArea
DIM c AS String
DIM ruta AS String
Dialog.Title = "Seleccione un archivo"
Dialog.Filter = ["*.cfg", "Ficheros de Configuracion"]
IF Dialog.OpenFile() THEN
Message.Info("No ha seleccionado nada")
ELSE
ruta = Dialog.Path
arrCad = Split(File.Load(ruta), "\n") 'aquí tienes cada línea de ese archivo
txtTemp = Editor.Children[0] 'esto no se que es
END IF
IF txtTemp.Text <> "" THEN
nuevaHoja() 'esto tampoco se que es
END IF
FOR EACH c IN arrCad
Editor.Text = ruta
txtTemp = Editor.Children[0] 'no lo entiendo
txtTemp.Text &= c & "\n" 'aquí vas metiendo línea a línea todo lo que separaste antes con el \n y poniéndolo de nuevo
NEXT
Falta información para saber lo que te ocurre.
En vez de hacer esto
con lo que dejas cada línea sin \n en cada elemento del array
y luego hacer un bucle para recorrer ese array y en cada línea deshacer lo anterior
txtTemp.Text &= c & "\n"
¿No sería mejor meterlo ya directamente?
txttemp.text=file.load(ruta)
Esto no te resuelve nada. Solo lo simplifica
¿Podrías especificar para qué quieres txttemp si en realidad tu quieres tu archivo en un editor?
De hecho se me ocurren bastantes soluciones mas sencillas como por ejemplo un textedit
Y ya tienes todo tu texto allí y solo necesitas los métodos de textedit para hacer lo que quieras hacer. Entiendo que con el Editor te vale igual (si le haces una sintaxis incluso mejor) pero no sé usarlo.
Vamos que me da la impresión que te haces un lío aunque no estoy seguro de haber entendido bien tu código
Objetivo: Re: Problema Con La Fabricacion De Un Editor De Texto...
Te contesto a lo que me has dicho, he probado lo de simplificar codigo, y no me muestra absolutamente nada, cuando de la otra manera si que lo hace...
En txtTemp lo que haces es pasarle todas las propiedades del Editor, el Editor es el nombre que tiene un grupo de Pestañas...
nuevaHoja() es una funcion, se encarga de que si yo abro mas archivos, vaya creando distintas pestañas, justamente por eso lo compruebo en esta seccion de codigo:
Te incluyo la funcion de nuevaHoja para que la veas
El textedit.text que me dices no lo he encontrador. no se como incluirlo, soy un poco nuevo en esto de gambas y estoy aprendiendo leyendo y a golpe de corazon, pero vamos, que aprendo... tenme paciencia please :D. Te lo agradezco de verdad...
txtTemp = Editor.Children[0] 'esto no se que es
En txtTemp lo que haces es pasarle todas las propiedades del Editor, el Editor es el nombre que tiene un grupo de Pestañas...
nuevaHoja() 'esto tampoco se que es
nuevaHoja() es una funcion, se encarga de que si yo abro mas archivos, vaya creando distintas pestañas, justamente por eso lo compruebo en esta seccion de codigo:
Te incluyo la funcion de nuevaHoja para que la veas
PUBLIC SUB nuevaHoja()
DIM cfgEditAux AS TextArea
DIM conTabs AS Float
Editor.Count += 1
conTabs += 1
Editor.Index = conTabs
cfgEditAux = NEW TextArea(Editor)
cfgEditAux.X = cfgEdit.X
cfgEditAux.Y = cfgEdit.Y
cfgEditAux.Height = cfgEdit.Height
cfgEditAux.Width = cfgEdit.Width
cfgEditAux.Visible = TRUE
END
DIM cfgEditAux AS TextArea
DIM conTabs AS Float
Editor.Count += 1
conTabs += 1
Editor.Index = conTabs
cfgEditAux = NEW TextArea(Editor)
cfgEditAux.X = cfgEdit.X
cfgEditAux.Y = cfgEdit.Y
cfgEditAux.Height = cfgEdit.Height
cfgEditAux.Width = cfgEdit.Width
cfgEditAux.Visible = TRUE
END
El textedit.text que me dices no lo he encontrador. no se como incluirlo, soy un poco nuevo en esto de gambas y estoy aprendiendo leyendo y a golpe de corazon, pero vamos, que aprendo... tenme paciencia please :D. Te lo agradezco de verdad...
Objetivo: Re: Problema Con La Fabricacion De Un Editor De Texto...
ah entonces el editor no es un control editor sino un tabstrip.
Ahora estoy en windows y no puedo verlo para decírtelo con seguridad pero creo que está incluído en gb.qt osea que te vas a las propiedades del foro - componentes y lo marcas.
De todas formas para probar intenta usar un textarea
Con el textedit lo harás mejor y con el editor aún mejor pero para probar te vale.
Sigo sin entender lo que quieres hacer porque para editar un texto no hay necesidad alguna de grupos de pestañas ni tabstrip ni nada pero bueno tu prueba eso que te digo y yo creo que acabamos antes
Un saludo
Citar:
Ahora estoy en windows y no puedo verlo para decírtelo con seguridad pero creo que está incluído en gb.qt osea que te vas a las propiedades del foro - componentes y lo marcas.
De todas formas para probar intenta usar un textarea
Con el textedit lo harás mejor y con el editor aún mejor pero para probar te vale.
Sigo sin entender lo que quieres hacer porque para editar un texto no hay necesidad alguna de grupos de pestañas ni tabstrip ni nada pero bueno tu prueba eso que te digo y yo creo que acabamos antes
Un saludo
Objetivo: Re: Problema Con La Fabricacion De Un Editor De Texto...
Ya le he pillado el truco, justo entraba para contestarte y darte las gracias, he activado los gb.qt y gb.qt.ext y he usado el Editor, pero me he dado cuenta de que el fallo que tengo ahora es que los acentos no los saca bien, he usado el editor y no el textedit, porque he leido que el editor acepta texto plano y el textedit es para texto enriquezido, te adjunto unas imagenes para que veas porque uso las tabString y asi de paso me ayudas si puedes a ver porque tengo el siguiente problema...
En esta veras el problema de los acentos...
El siguiente problema es curioso, si abro un archivo va bien, si abro otro, me crea otra pestaña y sin problemas, pero al añadir mas, lo unico que hace es crear una pestaña en blanco con el nombre Tab2, me cierra el ultimo archivo abriendo el siguiente encima pero tampoco me muestra el contenido..
Tambien te adjunto el codigo a ver si con eso lo podemos sacar, voy a seguir mirando a ver que veo...
En esta veras el problema de los acentos...
El siguiente problema es curioso, si abro un archivo va bien, si abro otro, me crea otra pestaña y sin problemas, pero al añadir mas, lo unico que hace es crear una pestaña en blanco con el nombre Tab2, me cierra el ultimo archivo abriendo el siguiente encima pero tampoco me muestra el contenido..
Tambien te adjunto el codigo a ver si con eso lo podemos sacar, voy a seguir mirando a ver que veo...
PUBLIC SUB Abrir_editor_Click()
DIM arrCad AS NEW String[]
DIM txtTemp AS Editor
DIM c AS String
DIM ruta AS String
Dialog.Title = "Seleccione un archivo"
Dialog.Filter = ["*.cfg", "Ficheros de Configuracion"]
IF Dialog.OpenFile() THEN
Message.Info("No ha seleccionado nada")
ELSE
ruta = Dialog.Path
arrCad = Split(File.Load(ruta), "\n")
txtTemp = Editor_tab.Children[0]
END IF
IF txtTemp.Text <> "" THEN
nuevaHoja()
END IF
Editor_tab.Text = ruta
txtTemp = Editor_tab.Children[0]
FOR EACH c IN arrCad
Editor_tab.Text = ruta
txtTemp = Editor_tab.Children[0]
txtTemp.Text &= c & "\n"
NEXT
END
PUBLIC SUB nuevaHoja()
DIM cfgEditAux AS Editor
DIM conTabs AS Float
Editor_tab.Count += 1
conTabs += 1
Editor_tab.Index = conTabs
cfgEditAux = NEW Editor(Editor_tab)
cfgEditAux.X = cfgEdit.X
cfgEditAux.Y = cfgEdit.Y
cfgEditAux.Height = cfgEdit.Height
cfgEditAux.Width = cfgEdit.Width
cfgEditAux.Visible = TRUE
END
DIM arrCad AS NEW String[]
DIM txtTemp AS Editor
DIM c AS String
DIM ruta AS String
Dialog.Title = "Seleccione un archivo"
Dialog.Filter = ["*.cfg", "Ficheros de Configuracion"]
IF Dialog.OpenFile() THEN
Message.Info("No ha seleccionado nada")
ELSE
ruta = Dialog.Path
arrCad = Split(File.Load(ruta), "\n")
txtTemp = Editor_tab.Children[0]
END IF
IF txtTemp.Text <> "" THEN
nuevaHoja()
END IF
Editor_tab.Text = ruta
txtTemp = Editor_tab.Children[0]
FOR EACH c IN arrCad
Editor_tab.Text = ruta
txtTemp = Editor_tab.Children[0]
txtTemp.Text &= c & "\n"
NEXT
END
PUBLIC SUB nuevaHoja()
DIM cfgEditAux AS Editor
DIM conTabs AS Float
Editor_tab.Count += 1
conTabs += 1
Editor_tab.Index = conTabs
cfgEditAux = NEW Editor(Editor_tab)
cfgEditAux.X = cfgEdit.X
cfgEditAux.Y = cfgEdit.Y
cfgEditAux.Height = cfgEdit.Height
cfgEditAux.Width = cfgEdit.Width
cfgEditAux.Visible = TRUE
END
Objetivo: Re: Problema Con La Fabricacion De Un Editor De Texto...
Pablo, te debes haber equivocado al simplificar el código, pero la simplificación que propone soplo es correcta y es necesario que lo hagas porque de otro modo terminarás construyendo programas que serán muy difíciles de mantener.
Entonces lo que deberías hacer es mostrarnos el código que simplificaste para ver cuál es el error.
Reproduzco el código introduciéndole preguntas como comentarios.
'¿Desde dónde se llama este procedimiento? ¿Es el evento Click de una opción de menú?
PUBLIC SUB Abrir_editor_Click()
DIM arrCad AS NEW String[]
DIM txtTemp AS TextArea
DIM c, ruta AS String
Dialog.Title = "Seleccione un archivo"
Dialog.Filter = ["*.cfg", "Ficheros de Configuracion"]
IF Dialog.OpenFile() THEN
'Si asumes que el usuario no seleccionó nada intencionalmente, entonces este mensaje no tiene sentido
Message.Info("No ha seleccionado nada")
ELSE
'Las 2 líneas que siguen no parecen tener sentido
ruta = Dialog.Path
arrCad = Split(File.Load(ruta), "\n")
txtTemp = Editor.Children[0]
END IF
'Hasta aquí el usuario abrió el cuadro de diálogo "Abrir archivo" y pudo:
' * haber elegido un archivo
' * haber elegido varios archivos (para evitarlo se debe llamar así: Dialog.OpenFile(False) ). No estás manejando esta posibilidad.
' * haber cancelado el cuadro. No estás manejando correctamente esta posibilidad. Si el usuario cancela el cuadro la función debería terminar.
' ¿Cómo es que decides crear una nueva pestaña en función de si txtTemp.Text es una cadena nula?
IF txtTemp.Text <> "" THEN
nuevaHoja()
END IF
'Las sentencias a continuación parecen ser innecesarias
FOR EACH c IN arrCad
Editor.Text = ruta
txtTemp = Editor.Children[0]
txtTemp.Text &= c & "\n"
NEXT
Bueno, Pablo. El problema más importante que veo aquí es que estás diseñando mal.
Supongamos que:
1) El usuario hace clic en la opción de menú: Archivo > Nuevo
¿Qué debería hacer tu programa?
1.a- Añadir una pestaña
1.b- Crear un nuevo control (supongo que estás usando TextArea), que tenga como contenedor (parent) a la pestaña recién creada.
2) Supongamos ahora que el usuario hace clic en la opción de menú: Archivo > Abrir
¿Qué debería hacer tu programa?
2.a- Presentar el cuadro de diálogo Abrir archivo
2.b.1- El usuario pulsa el botón Cancelar, no hay que hacer nada, absolutamente nada (es decir, la rutina que lanzó el cuadro de diálogo Abrir archivo debe terminar, sin hacer nada más).
2.b.2.a- El usuario eligió un archivo hay que realizar los puntos 1.a y 1.b, para luego asignarle al nuevo control TextArea el contenido del archivo.
2.b.2.b- El usuario eligió varios archivos por lo tanto hay que realizar los pasos del punto 2.b.2.a tantas veces como archivos haya seleccionado el usuario.
La descripción anterior es básicamente lo que se conoce como "caso de uso" y si la sigues (corrígela si falta o sobra algo) producirás un diseño mucho mejor de las funciones o procedimientos y te librarás de repetir código inútilmente.
Observa que en el c.d.u. anterior se observa que las acciones 1.a y 1.b deben formar parte de una rutina (ya que se repiten en 2.b.2).
La acción 2.b.1 te indica que hay un error de lógica en tu código actual.
La acción 2.b.2.a te indica que debe haber una llamada a la rutina creada para las acciones 1.a y 1.b
La acción 2.b.2.b te indica que tanto 2.b.2.a como 2.b.2.b son casos particulares de un mismo curso de acción que sigue el usuario y como ambas tienen como resultado la elección de uno o más archivos deberán ser procesadas por una misma rutina.
Para completar esta información deberías estudiar un poco más cómo funciona la clase Dialog
Saludos cordiales.
Entonces lo que deberías hacer es mostrarnos el código que simplificaste para ver cuál es el error.
Reproduzco el código introduciéndole preguntas como comentarios.
'¿Desde dónde se llama este procedimiento? ¿Es el evento Click de una opción de menú?
PUBLIC SUB Abrir_editor_Click()
DIM arrCad AS NEW String[]
DIM txtTemp AS TextArea
DIM c, ruta AS String
Dialog.Title = "Seleccione un archivo"
Dialog.Filter = ["*.cfg", "Ficheros de Configuracion"]
IF Dialog.OpenFile() THEN
'Si asumes que el usuario no seleccionó nada intencionalmente, entonces este mensaje no tiene sentido
Message.Info("No ha seleccionado nada")
ELSE
'Las 2 líneas que siguen no parecen tener sentido
ruta = Dialog.Path
arrCad = Split(File.Load(ruta), "\n")
txtTemp = Editor.Children[0]
END IF
'Hasta aquí el usuario abrió el cuadro de diálogo "Abrir archivo" y pudo:
' * haber elegido un archivo
' * haber elegido varios archivos (para evitarlo se debe llamar así: Dialog.OpenFile(False) ). No estás manejando esta posibilidad.
' * haber cancelado el cuadro. No estás manejando correctamente esta posibilidad. Si el usuario cancela el cuadro la función debería terminar.
' ¿Cómo es que decides crear una nueva pestaña en función de si txtTemp.Text es una cadena nula?
IF txtTemp.Text <> "" THEN
nuevaHoja()
END IF
'Las sentencias a continuación parecen ser innecesarias
FOR EACH c IN arrCad
Editor.Text = ruta
txtTemp = Editor.Children[0]
txtTemp.Text &= c & "\n"
NEXT
Bueno, Pablo. El problema más importante que veo aquí es que estás diseñando mal.
Supongamos que:
1) El usuario hace clic en la opción de menú: Archivo > Nuevo
¿Qué debería hacer tu programa?
1.a- Añadir una pestaña
1.b- Crear un nuevo control (supongo que estás usando TextArea), que tenga como contenedor (parent) a la pestaña recién creada.
2) Supongamos ahora que el usuario hace clic en la opción de menú: Archivo > Abrir
¿Qué debería hacer tu programa?
2.a- Presentar el cuadro de diálogo Abrir archivo
2.b.1- El usuario pulsa el botón Cancelar, no hay que hacer nada, absolutamente nada (es decir, la rutina que lanzó el cuadro de diálogo Abrir archivo debe terminar, sin hacer nada más).
2.b.2.a- El usuario eligió un archivo hay que realizar los puntos 1.a y 1.b, para luego asignarle al nuevo control TextArea el contenido del archivo.
2.b.2.b- El usuario eligió varios archivos por lo tanto hay que realizar los pasos del punto 2.b.2.a tantas veces como archivos haya seleccionado el usuario.
La descripción anterior es básicamente lo que se conoce como "caso de uso" y si la sigues (corrígela si falta o sobra algo) producirás un diseño mucho mejor de las funciones o procedimientos y te librarás de repetir código inútilmente.
Observa que en el c.d.u. anterior se observa que las acciones 1.a y 1.b deben formar parte de una rutina (ya que se repiten en 2.b.2).
La acción 2.b.1 te indica que hay un error de lógica en tu código actual.
La acción 2.b.2.a te indica que debe haber una llamada a la rutina creada para las acciones 1.a y 1.b
La acción 2.b.2.b te indica que tanto 2.b.2.a como 2.b.2.b son casos particulares de un mismo curso de acción que sigue el usuario y como ambas tienen como resultado la elección de uno o más archivos deberán ser procesadas por una misma rutina.
Para completar esta información deberías estudiar un poco más cómo funciona la clase Dialog
Saludos cordiales.
Objetivo: Re: Problema Con La Fabricacion De Un Editor De Texto...
última edición por Pablo-GNU el Sabado, 23 Enero 2010, 00:53; editado 2 veces
Fabian, ante todo gracias por tu respuesta, me acababa de hacer una lista en papel de todas las opciones posibles y me he dado cuenta de que lo estaba haciendo tan complejo (lo digo porque en realidad no hacia falta) que estaba cometiendo demasiados errores, he anulado ambas cosas, ya que he planteado editar ficheros de uno en uno para no complicar demasiado al usuario, asi que las cosas han cambiado, te voy a subir una imagen para que lo veas, de todos modos antes de cambiarlo lo he probado y si que es verdad que funciona su simplificacion, por ello quiero pedirle disculpas, si que es cierta... sigo con el problema de los acentos.
Como puedo hacer que nos muestre el acento?
EDIT:
Bueno, tengo ya el editor casi acabado, solo me queda hacer que muestre bien los caracteres, he estado leyendo sobre la funcion Dconv y Sconv pero no se como hacerlo, la verdad que se me escapa un poco... de momento el codigo lo tengo implementado asi...
Como puedo hacer que nos muestre el acento?
EDIT:
Bueno, tengo ya el editor casi acabado, solo me queda hacer que muestre bien los caracteres, he estado leyendo sobre la funcion Dconv y Sconv pero no se como hacerlo, la verdad que se me escapa un poco... de momento el codigo lo tengo implementado asi...
última edición por Pablo-GNU el Sabado, 23 Enero 2010, 00:53; editado 2 veces
Página 1 de 1
No puede crear mensajesNo puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario
Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.
Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo
Página generada en:: 2.7882s (PHP: -91% SQL: 191%)
Consultas SQL: 47 - Debug off - GZIP Activado