Sobre El Control Editor


Ir a la página 1, 2  Siguiente

Objetivo: Sobre El Control Editor
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!!!

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é..................

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

Perfil MP  
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

Perfil MP  
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

Perfil MP  
Objetivo: Re: Sobre El Control Editor
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

' 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


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


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


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

pantallazo

no se rian! =P

última edición por crashon182 el Miercoles, 13 Enero 2010, 12:28; editado 3 veces
Perfil MP  
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!!

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.

ace_1

Perfil MP  
Objetivo: Re: Sobre El Control Editor
Mira esto: http://gambasdoc.org/help/lang/conv?es

Objetivo: Re: Sobre El Control Editor
al081570 escribió: [Ver mensaje]
Mira esto: http://gambasdoc.org/help/lang/conv?es


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

ace_2

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
No puede crear mensajes
No 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