Alguien sabe como se puede hacer en este control para que muestre el número de linea???
He visto el showlinenumbers, pero veo la ayuda para ver como va, y me quedo igual v.v
Me pasa lo msimo con el highlight, como podría hacer para cargar una sintaxis a mano?
EDITO: ya he conseguido lo del showlinenumbers... manda huevos...
txt_edicion.Flags[5] = TRUE
así se habilita!!!
Sobre El Control Editor
Objetivo: Re: Sobre El Control Editor
Bueno, he conseguido (tras muuuuchas pruebas) sacar algo en claro sobre el highlight de este control.
Los colores (significativos) que implementa son:
* breakpoint: rojo oscuro
* commet: gris en cursiva
* current: azul
* currentline: gris claro
* custom: azul oscuro
* datatype: parecido a current
* error: rojo subrayado
* function: azul oscuro menos grueso
* gambas: negro
* highlight: amarillo (chillón)
* keyword: azul oscuro
* none: sin nada
* normal: negro
* number: rojo
* operator: azul oscuro
* string: rosa
* symbol: negro
Las conclusiones que he sacado, después de dos días de pruebas, se remontan a lo siguiente:
El resaltado se realiza, tras el salto de línea gracias al evento highlight. Podemos cambiar el resaltado de la línea con highlight.add(higlight.xxx) donde xxx es alguno de los anteriores, y posteriormente highlight.showlimit = false.
Higlight.add, ejecutado sin más, sólo resalta la primera letra, si se ejecuta highlight.add(texto,n), tendremos un total de n carácteres resaltados. Sólo cambiará el resaltado cuando se vuelvan a ejecutar higlight.add con otro tipo de resaltado.
Un ejemplo práctico:
cadena = Highlight.Text
vector_cadena = Split(cadena, ” “)
FOR EACH c IN vector_cadena
Highlight.Add(diccionarios(c), Len(c))
Highlight.ShowLimit = FALSE
Highlight.Add(Highlight.Normal, 1)
Highlight.ShowLimit = FALSE
NEXT
Donde diccionarios:
PUBLIC FUNCTION diccionarios(cadena AS String) AS Integer
IF cadena = “pepe” THEN
RETURN Highlight.Keyword
ELSE
RETURN Highlight.Normal
ENDIF
END
Con lo que cuando escribamos la palabra pepe se nos iluminará.
Espero haberme podido explicar bien, y que sirva de ayuda para que alguien no tenga que liarse como me he tenido que liar yo.
He hecho algunas pruebas también para que se iluminen las palabra a medida que se escriben pero no iba muy fino, ya informaré..................
Los colores (significativos) que implementa son:
* breakpoint: rojo oscuro
* commet: gris en cursiva
* current: azul
* currentline: gris claro
* custom: azul oscuro
* datatype: parecido a current
* error: rojo subrayado
* function: azul oscuro menos grueso
* gambas: negro
* highlight: amarillo (chillón)
* keyword: azul oscuro
* none: sin nada
* normal: negro
* number: rojo
* operator: azul oscuro
* string: rosa
* symbol: negro
Las conclusiones que he sacado, después de dos días de pruebas, se remontan a lo siguiente:
El resaltado se realiza, tras el salto de línea gracias al evento highlight. Podemos cambiar el resaltado de la línea con highlight.add(higlight.xxx) donde xxx es alguno de los anteriores, y posteriormente highlight.showlimit = false.
Higlight.add, ejecutado sin más, sólo resalta la primera letra, si se ejecuta highlight.add(texto,n), tendremos un total de n carácteres resaltados. Sólo cambiará el resaltado cuando se vuelvan a ejecutar higlight.add con otro tipo de resaltado.
Un ejemplo práctico:
cadena = Highlight.Text
vector_cadena = Split(cadena, ” “)
FOR EACH c IN vector_cadena
Highlight.Add(diccionarios(c), Len(c))
Highlight.ShowLimit = FALSE
Highlight.Add(Highlight.Normal, 1)
Highlight.ShowLimit = FALSE
NEXT
Donde diccionarios:
PUBLIC FUNCTION diccionarios(cadena AS String) AS Integer
IF cadena = “pepe” THEN
RETURN Highlight.Keyword
ELSE
RETURN Highlight.Normal
ENDIF
END
Con lo que cuando escribamos la palabra pepe se nos iluminará.
Espero haberme podido explicar bien, y que sirva de ayuda para que alguien no tenga que liarse como me he tenido que liar yo.
He hecho algunas pruebas también para que se iluminen las palabra a medida que se escriben pero no iba muy fino, ya informaré..................
Objetivo: Re: Sobre El Control Editor
Hola tengo una consulta acerca de este control. Estoy tratando de realizar un IDE para Bennu (bennugd.com) lo primero que quiero que haga es el resaltado de sintaxis, encontre este maravilloso control pero tiene muy poca documentación. Como se implementa? ya vi el ejemplo que trae gambas (el editor HTML) pero me gustaria implementar utilizando diccionarios. Por ejemplos
Keywords
BEgin
If
EndIf
Else
While
Operadores
=
>
<
Comentarios
//
Etc.
tendrian un ejemplo sencillo donde se explique mejor como hacer ? Muchas GRacias!!!
saludos
Keywords
BEgin
If
EndIf
Else
While
Operadores
=
>
<
Comentarios
//
Etc.
tendrian un ejemplo sencillo donde se explique mejor como hacer ? Muchas GRacias!!!
saludos
Objetivo: Re: Sobre El Control Editor
Este es un control realmente complejo. Debido a la falta de documentación sobre su uso, la única alternativa por el momento podría ser el estudio del propio código fuente de gambas (hecho en gambas), donde a buen seguro encontrareis las claves para implementarlo de una manera decente.
Muchas veces la solución la tenemos delante y no sabemos verla. Ojo, no digo que no hayáis buscado, que no lo dudo, pero es lo único que se me ocurre. Yo de momento no he necesitado usar el Editor, por lo que no lo he estudiado; quizás algún día lo necesite y tenga que recurrir a mi propio consejo
Saludos
Muchas veces la solución la tenemos delante y no sabemos verla. Ojo, no digo que no hayáis buscado, que no lo dudo, pero es lo único que se me ocurre. Yo de momento no he necesitado usar el Editor, por lo que no lo he estudiado; quizás algún día lo necesite y tenga que recurrir a mi propio consejo
Saludos
Objetivo: Re: Sobre El Control Editor
muchas gracias jguardon por responder. voy a ver si busco en el fuente y logro entender que es lo que hacen, voy posteando las distintas pruebas! cualquier cosa que alguien entienda el uso de este control somos todos oidos!
saludos!
Alexis
saludos!
Alexis
Objetivo: Re: Sobre El Control Editor
última edición por crashon182 el Miercoles, 13 Enero 2010, 12:28; editado 3 veces
bueno pongo el código de los avances con el control... ya he logrado algunas cosas investigando pero me faltan muchas otras.
Que logre:
declaro las variables que voy a utilizar y le indico al control que se muestre con los números de linea
Hice una función llamada diccionario, la cual tiene las palabras claves del lenguaje. el código es el siguiente:
Nótese que devuelve el tipo de coloreado (highlight.keyword, le poner el color de palabra claves) Muchas gracias a al081570, porque me base en su código.
luego cree un nuevo evento llamado Editor1_Highlight(), el cual maneja el coloreado en si.
esta se podría decir que es la parte principal donde coloreamos el texto.
también hice que cuando el programador ponga BEGIN automaticamente coloque el end. Igualmente con el comentario de múltiple linea /* */
que problemas tengo en este caso:
1 dependiendo donde escriba la palabra begin, en alguno casos me pone el END al lado del otro por ejemplo.
BEGIN
BEGIN
ENDEND
otra cosa el END no lo pone indentado. por ejemplo
Begin
Begin
END
END
otro problema es que cuando pongo el comentario /* solo me comenta la primer linea y no todo el bloque.
otro problema que encontré es que al usar cadena = UCase$(Highlight.Text) no me escribe en mayuscula en el editor. Es decir, yo necesito que si escribe:
begin el editor automáticamente lo pongo como BEGIN.
Otra de los cambios que quiero hacer es que las palabras claves las tome de un archivo XML.
Bueno eso es todo lo que he descubierto por ahora... gracias a todos y espero que les sirva.
PD: ME costo mucho leer los fuentes del gambas, y hay pocas cosas que pude aprovechar por no entenderlo.
bueno cualquier otro avance lo público y si alguien tiene conocimiento acerca de este control esta invitado para ayudar!
ahora les pongo un ejemplo de RUDIMENTARIO IDE funcionando
no se rian! =P
Que logre:
declaro las variables que voy a utilizar y le indico al control que se muestre con los números de linea
' gambas class file
PUBLIC cadena AS String
PUBLIC vector_cadena AS Array
PUBLIC c AS String
PUBLIC cadena_comentario AS String
PUBLIC longitud_texto AS Integer
PUBLIC comentario AS Boolean
PUBLIC SUB Form_Open()
' Indicamos que el editor inicie mostrando las lineas
Editor1.Flags[Editor1.showlinenumbers] = TRUE
END
PUBLIC cadena AS String
PUBLIC vector_cadena AS Array
PUBLIC c AS String
PUBLIC cadena_comentario AS String
PUBLIC longitud_texto AS Integer
PUBLIC comentario AS Boolean
PUBLIC SUB Form_Open()
' Indicamos que el editor inicie mostrando las lineas
Editor1.Flags[Editor1.showlinenumbers] = TRUE
END
Hice una función llamada diccionario, la cual tiene las palabras claves del lenguaje. el código es el siguiente:
'*************************************************************************************************************************
'***************función que maneja el diccionario de palabras reservadas de Bennu
'************************************************************************************************************************
PUBLIC FUNCTION diccionarios(cadena AS String) AS Integer
SELECT CASE cadena
CASE "BEGIN"
RETURN Highlight.Keyword
CASE "END"
RETURN Highlight.Keyword
CASE "DECLARE"
RETURN Highlight.Keyword
CASE "LOOP"
RETURN Highlight.Keyword
CASE "LOOP"
RETURN Highlight.Keyword
CASE "WHILE"
RETURN Highlight.Keyword
CASE "FOR"
RETURN Highlight.Keyword
CASE "FROM"
RETURN Highlight.Keyword
CASE "IF"
RETURN Highlight.Keyword
CASE "CASE"
RETURN Highlight.Keyword
CASE "STRUCT"
RETURN Highlight.Keyword
CASE "#IFNDEF"
RETURN Highlight.Keyword
CASE "#IFDEF"
RETURN Highlight.Keyword
CASE "REPEAT"
RETURN Highlight.Keyword
CASE ELSE
RETURN Highlight.Normal
END SELECT
END
'***************función que maneja el diccionario de palabras reservadas de Bennu
'************************************************************************************************************************
PUBLIC FUNCTION diccionarios(cadena AS String) AS Integer
SELECT CASE cadena
CASE "BEGIN"
RETURN Highlight.Keyword
CASE "END"
RETURN Highlight.Keyword
CASE "DECLARE"
RETURN Highlight.Keyword
CASE "LOOP"
RETURN Highlight.Keyword
CASE "LOOP"
RETURN Highlight.Keyword
CASE "WHILE"
RETURN Highlight.Keyword
CASE "FOR"
RETURN Highlight.Keyword
CASE "FROM"
RETURN Highlight.Keyword
CASE "IF"
RETURN Highlight.Keyword
CASE "CASE"
RETURN Highlight.Keyword
CASE "STRUCT"
RETURN Highlight.Keyword
CASE "#IFNDEF"
RETURN Highlight.Keyword
CASE "#IFDEF"
RETURN Highlight.Keyword
CASE "REPEAT"
RETURN Highlight.Keyword
CASE ELSE
RETURN Highlight.Normal
END SELECT
END
Nótese que devuelve el tipo de coloreado (highlight.keyword, le poner el color de palabra claves) Muchas gracias a al081570, porque me base en su código.
luego cree un nuevo evento llamado Editor1_Highlight(), el cual maneja el coloreado en si.
PUBLIC SUB Editor1_Highlight()
'*******************************************************************************************************************'*
****************LE indicamos al lenguaje que utilizaremos el indentado Por ahora vastante incomodo porque indenta todo. *****************
'*****************TODO: Lograr un indentado inteligente que dependiendo la palabra clave lo haga de una Forma u otra*
Editor1.Indent
'calculamos la longitud total del texto contenido en el editor
longitud_texto = Editor1.Length
' convertimos el texto que deseamos colorear a Mayúsculas
' de esta forma evitamos de exigir al usuario que lo ingrese de cierta forma
'o de extender más el código.
cadena = UCase$(Highlight.Text)
' dividimos cada palabra reservada y la ponemos en un Array.
vector_cadena = Split(cadena, " ")
' Recorremos el Array
FOR EACH c IN vector_cadena
' preguntamos si el texto es un comentario, en este caso se trata de forma especial, debido
' a que debemos marcar todo el renglón del mismo texto
' en cadena comentario guardamos las primeras dos letras (que serian las //) para que si el texto se escribe junto a estas
' nos señale como comentario.
cadena_comentario = Left$(c, 2)
IF cadena_comentario = "//" OR cadena_comentario = "/*" THEN
'pintamos el texto con el color correspondiente al comentario, pintamos la longitud total del renglón
Highlight.Add(Highlight.Comment, Len(cadena))
ELSE
'sino pintamos la palabra reservada que encontró en la función diccionario(c)
Highlight.Add(diccionarios(c), Len(c))
Highlight.ShowLimit = FALSE
Highlight.Add(Highlight.Normal, 1)
Highlight.ShowLimit = FALSE
ENDIF
'***********************************************************************************************************************
'************ En esta sección nos fijamos si se pone una palabra que deba llevar END al final y lo pone automaticamente
'***********************************************************************************************************************
IF c = "BEGIN" OR c = "PROCEDURE" THEN
Editor1.Insert("END", Editor1.Line + 2, 0)
ENDIF
IF c = "/*" THEN
Editor1.Insert("*/", Editor1.Line + 2, 0)
ENDIF
NEXT
END
'*******************************************************************************************************************'*
****************LE indicamos al lenguaje que utilizaremos el indentado Por ahora vastante incomodo porque indenta todo. *****************
'*****************TODO: Lograr un indentado inteligente que dependiendo la palabra clave lo haga de una Forma u otra*
Editor1.Indent
'calculamos la longitud total del texto contenido en el editor
longitud_texto = Editor1.Length
' convertimos el texto que deseamos colorear a Mayúsculas
' de esta forma evitamos de exigir al usuario que lo ingrese de cierta forma
'o de extender más el código.
cadena = UCase$(Highlight.Text)
' dividimos cada palabra reservada y la ponemos en un Array.
vector_cadena = Split(cadena, " ")
' Recorremos el Array
FOR EACH c IN vector_cadena
' preguntamos si el texto es un comentario, en este caso se trata de forma especial, debido
' a que debemos marcar todo el renglón del mismo texto
' en cadena comentario guardamos las primeras dos letras (que serian las //) para que si el texto se escribe junto a estas
' nos señale como comentario.
cadena_comentario = Left$(c, 2)
IF cadena_comentario = "//" OR cadena_comentario = "/*" THEN
'pintamos el texto con el color correspondiente al comentario, pintamos la longitud total del renglón
Highlight.Add(Highlight.Comment, Len(cadena))
ELSE
'sino pintamos la palabra reservada que encontró en la función diccionario(c)
Highlight.Add(diccionarios(c), Len(c))
Highlight.ShowLimit = FALSE
Highlight.Add(Highlight.Normal, 1)
Highlight.ShowLimit = FALSE
ENDIF
'***********************************************************************************************************************
'************ En esta sección nos fijamos si se pone una palabra que deba llevar END al final y lo pone automaticamente
'***********************************************************************************************************************
IF c = "BEGIN" OR c = "PROCEDURE" THEN
Editor1.Insert("END", Editor1.Line + 2, 0)
ENDIF
IF c = "/*" THEN
Editor1.Insert("*/", Editor1.Line + 2, 0)
ENDIF
NEXT
END
esta se podría decir que es la parte principal donde coloreamos el texto.
también hice que cuando el programador ponga BEGIN automaticamente coloque el end. Igualmente con el comentario de múltiple linea /* */
que problemas tengo en este caso:
1 dependiendo donde escriba la palabra begin, en alguno casos me pone el END al lado del otro por ejemplo.
BEGIN
BEGIN
ENDEND
otra cosa el END no lo pone indentado. por ejemplo
Begin
Begin
END
END
otro problema es que cuando pongo el comentario /* solo me comenta la primer linea y no todo el bloque.
otro problema que encontré es que al usar cadena = UCase$(Highlight.Text) no me escribe en mayuscula en el editor. Es decir, yo necesito que si escribe:
begin el editor automáticamente lo pongo como BEGIN.
Otra de los cambios que quiero hacer es que las palabras claves las tome de un archivo XML.
Bueno eso es todo lo que he descubierto por ahora... gracias a todos y espero que les sirva.
PD: ME costo mucho leer los fuentes del gambas, y hay pocas cosas que pude aprovechar por no entenderlo.
bueno cualquier otro avance lo público y si alguien tiene conocimiento acerca de este control esta invitado para ayudar!
ahora les pongo un ejemplo de RUDIMENTARIO IDE funcionando
no se rian! =P
última edición por crashon182 el Miercoles, 13 Enero 2010, 12:28; editado 3 veces
Objetivo: Re: Sobre El Control Editor
jeje. ,me estuve pegando mucho tiempo con esto.
Puedes descargarte de mi web www.joa.al081570.es el código del Joa, donde implementé el coloreado del texto.
En su día no encontré nada de documentación, y me tuve que buscar un poco la vida... pero conseguí lo que me hacía falta. Mira a ver si puedes aprovechar algo.
Saludos!!
Puedes descargarte de mi web www.joa.al081570.es el código del Joa, donde implementé el coloreado del texto.
En su día no encontré nada de documentación, y me tuve que buscar un poco la vida... pero conseguí lo que me hacía falta. Mira a ver si puedes aprovechar algo.
Saludos!!
Objetivo: Re: Sobre El Control Editor
Muchas gracias pero ya lo había bajado y estudiado al código fuente de tu programa (jeje me sirvió mucho).
Ahora estoy con el siguiente problema. Cuando abro un archivo (el cual fue creado desde windows) me sale el carácter de retorno de carro. Con los ficheros que creo desde linux no me ocurre esto. a que se puede deber?. tienen alguna idea para solucionar este problema y que me quede el código fuente limpio?
muchas gracias!
les pongo una imagen para que vean como queda con estos caracteres raros.
Ahora estoy con el siguiente problema. Cuando abro un archivo (el cual fue creado desde windows) me sale el carácter de retorno de carro. Con los ficheros que creo desde linux no me ocurre esto. a que se puede deber?. tienen alguna idea para solucionar este problema y que me quede el código fuente limpio?
muchas gracias!
les pongo una imagen para que vean como queda con estos caracteres raros.
Objetivo: Re: Sobre El Control Editor
Muchas gracias Al, he logrado solucionar el problema en parte.
al control editor le ingrese lo siguiente:
Editor1.Text = Conv$(sData, Desktop.Charset, "UTF-8")
donde sData es la información cargada. (el código fuente)
ahora en algunos casos me saco los cuadraditos pero en otras partes sigue igual. probé con distintos charset y me ocurre lo mismo. Sabrás porque puede ser?
adjunto imagen para que vean como va quedando
al081570 escribió: [Ver mensaje]
Muchas gracias Al, he logrado solucionar el problema en parte.
al control editor le ingrese lo siguiente:
Editor1.Text = Conv$(sData, Desktop.Charset, "UTF-8")
donde sData es la información cargada. (el código fuente)
ahora en algunos casos me saco los cuadraditos pero en otras partes sigue igual. probé con distintos charset y me ocurre lo mismo. Sabrás porque puede ser?
adjunto imagen para que vean como va quedando
Página 1 de 2
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:: 0.1546s (PHP: -3% SQL: 103%)
Consultas SQL: 24 - Debug off - GZIP Activado