https://foro.gambas-es.org/viewtopic.php?f=1&t=62 ----------------------------------- DEATH Miercoles, 23 Septiembre 2009, 05:18 Seleccionar Un Texto En Un TextEdit ----------------------------------- Hola que tal amigos tengo la siguiente duda... en un TextEdit cargo un archivo html simple que se visualiza asi: 1.-texto del punto numero uno 2.-texto del punto numero dos 3.-texto del punto numero tres etc etc etc entonces necesito seleccionar lo que dice por ejemplo entre el punto 2.- al punto 3.- ahora si puedo cambiarle el color seria ideal :p... en VB6 lo hacia con la propiedad Find del Richtextbox... pero no se como hacerlo con un TextEdit o hacerlo con un TextArea bueno... de antemano muchas gracias... saludos ----------------------------------- soplo Miercoles, 23 Septiembre 2009, 14:43 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- Que yo sepa no hay posibilidad de selstart, sellength y seltext en gambas. Así que he pensado en alguna alternativa y se me ha ocurrido que se puede emplear el control textlabel que tiene la cualidad que funciona como un textbox, pero lo que recibe es código html y lo que muestra es el texto formateado. Así que si muestras tu código en un textlabel y localizas el string que deseas destacar solo tienes que agregarle algún comando de cambiar letra, color, tamaño, etc. [code linenumbers=false]textlabel="
" & textbox1.text & ""[/code] Para localizar el string dispones de los métodos instr y rinstr [quote]posicion=instr("0123456789","23") ====> posición = 3 posicion=rinstr("0123456789","23") ====> posición = 6 [/quote] De manera que si localizas la posición de inicio y final tendrás que hacer [code linenumbers=false]textlabel=left(textohtml,posicioninicial-1) textlabel &= "" ---> activar negrita textlabel &= mid(textohtml,posicioninicio,posicionfinal) textlabel &="" ---> quitar negrita textlabel &= mid(textohtml,posicionfinal)[/code] Habrías puesto en negrita la parte que quieres destacar Por lo menos vale para hacer pruebas a ver si te sirve ----------------------------------- DEATH Miercoles, 23 Septiembre 2009, 17:37 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- bueeena... voy a probarlo... ojo que estoy probando con un html pero también puede ser un texto plano simple... derrepente por ahí se puede hacer algo con un TextEdit o TextArea... ...publicaré como me fue.... saludos ----------------------------------- jguardon Miercoles, 23 Septiembre 2009, 17:46 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- Hola El TextEdit dispone de varias propiedades para trabajar con texto como: [list] [*][color=blue]Pos[/color], que devuelve la posición del cursor [*][color=blue]Selected[/color], que retorna true o false si un texto está seleccionado [*][color=blue]Selection[/color], que devuelve un objeto para manejar el texto seleccionado(solo lectura) [color=blue]Selection.Lenght Selection.Start Selection.Text[/color] [/list] Estas propiedades hablan por sí solas, supongo que es lo que necesitas para manejar el texto del TextEdit. Saludos ----------------------------------- soplo Miercoles, 23 Septiembre 2009, 18:14 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- Ande Pues gracias. Mira tu en que lio le estaba yo metiendo. Voy a mirar el textedit ese ... Tengo que tener mas cuidado ----------------------------------- DEATH Miercoles, 23 Septiembre 2009, 20:38 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- he eliminado el texto en html... hice el mismo texto pero plano para no lidear con simbolos html. quiero aclarar que lo que necesito es que con un boton pueda seleccionar el texto que exista entre cada punto... ejemplo: el texto es mas o menos asi... 1:1 asdfasdfadfadsfadfasdfadsfasd 1:2 asdfasdfadsfadsfadsfadsfafsd 1:3 adsfasdfadsfasdfasdfadsf ... entonces con un boton seleccionar lo que hay entre el 1:1 y el 1:2 o entre el 1:2 y el 1:3 y he hecho lo siguiente... en un TexArea he cargado el archivo: [code]TextArea1.Text = File.Load("archivo")[/code] luego busco la posicion del punto numero uno. [code]Var1 = Instr(TextArea1.text, "1:1")[/code] luego selecciono 5 caracteres a partir del valor de Var1 [code]TextArea1.select(Var1,5)[/code] ahi con el primer punto (1:1) no hay problema... el problema esta cuando quiero buscar "1:2" o "1:5" etc... ya que cuando lo busco siempre me se va corriendo el resultado... por ejmplo... si el punto "1:2" se encuentra en el POS 56 entoces la seleccion comienza en el POS 59 y cada vez que se eincremente el punto (1:2,1:3,1:4...1:16) cada vez más se corre entonces no obtengo un valor exacto del POS del caracter que busco en el Instr... en definitiva el valor de Var1 no es exacto despues del "1:1".... si alguien sabe como lograrlo... con respecto a lo que dice Jguardon con el tema del Pos, Selected, Selection etc etc... no me ayuda hacer lo que planteo anteriormente. de todas formas estoy muy agradecido por la ayuda prestada hasta ahora... saludos esperando alguna manito... ----------------------------------- DEATH Miercoles, 23 Septiembre 2009, 20:44 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- aqui les subo el proyecto del ejercicio en cuestión... ----------------------------------- soplo Miercoles, 23 Septiembre 2009, 23:51 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- Estuve curioseando un poco en la documentación de gambas. No he probado nada pero creo que esto que digo te funcionará. El método adecuado es select que tiene el siguiente formato: textedit.select(posicioninicial,longitud) De manera que tu problema es encontrar ambos. Al ver como hacer esto me doy cuenta que si eres capaz de encontrar una forma de localizar cualquier punto (1:2, 4:1, 10:1) entonces lo tienes solucionado porque si eres capaz de encontrar la posición de un punto también eres capaz de encontrar la posición del punto siguiente. La distancia entre ambos es la longitud que buscas. Así que al final el problema únicamente es encontrar la posición de cualquier punto. Para ello has hecho bien en utilizar instring, pero tienes un error en sumarle cinco porque no siempre puede ser cinco. Si llegas a un punto 10.1 ahí serán 6 caracteres. No se si en tu caso existe esa posibilidad pero la solución sería buscar el espacio en esa subcadena y saber que el primer caracter es la posición de comienzo del párrafo. [quote] si el punto "1:2" se encuentra en el POS 56 entoces la seleccion comienza en el POS 59 y cada vez que se eincremente el punto (1:2,1:3,1:4...1:16) cada vez más se corre entonces no obtengo un valor exacto del POS del caracter que busco en el Instr... en definitiva el valor de Var1 no es exacto despues del "1:1".... si alguien sabe como lograrlo... [/quote] No lo entiendo. Si la posición es 56 y según tu dices le sumas cinco posiciones estás en la 61. No se porque dices la 59. En definitiva: si eres capaz de encontrar el comienzo de un punto con buscar el comienzo del siguiente punto tienes la longitud que necesitas y luego haces textedit.select(posicicioninicio,longitud) ----------------------------------- DEATH Jueves, 24 Septiembre 2009, 17:50 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- teoricamente lo que me dices es ta super... y de hecho es eso lo que he estado probando hasta ahora pero con resultados poco exactos... te explico... hablemos solmente del primer punto... lo busco de la siguiente forma... [code]instr(texto en el cual busco, texto que deseo encontrar)[/code] de esta forma me devuelve el valor de la posicion del texto encontrado. Pero el problema está en el valor... porque no es exacto, sólo es exacto si busco el punto "1:1", pero si se incrementan los numeros (1:2, 1:3 ...) el valor de la posicion obtenido se va corriendo como 2 espacios o más a medida que se va incrementando... por lo tanto sólo puedo seleccionar en forma correcta lo que hay en el punto "1:1" y todo el resto es incorrecto... osea la selección se va corriendo... ojalá me puedas entender... en el archivo adjunto del post anterior sale el ejemplo que estoy trabajando con el texto correspondiente. saludos ----------------------------------- soplo Jueves, 24 Septiembre 2009, 18:04 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- Tu haces esto para pillar la posición del punto 1:1 [code linenumbers=false]posicion= Instr(TextArea1.text, "1:1") [/code] Y dices que te funciona ¿Por qué no te funciona cuando haces? [code linenumbers=false]posicion= Instr(TextArea1.text, "1:2") [/code] No lo entiendo. Si esa es la posición de comienzo de ese párrafo, el texto que buscas estará dos posiciones mas allá porque tras el 1:1 hay un espacio y luego va el primer caracter que te interesa. Así que para seleccionar el texto del punto 1:2 tendrás que hacer [code linenumbers=false]Posicion12= Instr(TextArea1.text, "1:2") [/code] [code linenumbers=false]posicion13=Instr(TextArea1.text, "1:3") [/code] De ahí concluímos que esa posicion mas cuatro caracteres es el comienzo del texto que te interesa [code linenumbers=false]posicioninicial=posicion12+4[/code] Y la longitud es [code linenumbers=false]longitud=posicion13-posicioninicial[/code] y para seleccionarlo [code linenumbers=false]textedit.select(posicioninicial,longitud)[/code] ----------------------------------- DEATH Jueves, 24 Septiembre 2009, 18:12 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- cuek.... es exactamente lo que he estado haciendo... pero cuando busco la posicion del 1:2 hacia arriba... la posicion arrojada es siempre más adelante que lo q se supone q es... es super extraño... es como que no es capaz de encontrar lapocicion exacta de de los otros puntos... no se me ocurre como solucionarlo... si pudieras hecharle un vistaso al archivo que subi en un post anterior y puedas hacer el ejercicio cambiando de 1:1, 1:2 etc... comprobarás lo que te estoy diciendo... ----------------------------------- david Viernes, 25 Septiembre 2009, 16:02 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- [b]DEATH[/b], con el programita que mandaste al foro e conseguido algo espero que te sirva, si esta solucion no te sirve, seguiremos buscando y desarrollando. espero que este sea el camino hacia la libertad esto lo e puesto en el boton 2: [code linenumbers=false syntax=gambas]DIM i AS Integer DIM ii AS Integer i = InStr(TextArea1.Text, "1:2") IF i > 0 THEN ii = InStr(TextArea1.Text, "\n", i) IF ii > 0 THEN TextArea1.Text = Mid(TextArea1.Text, i, ii - i) ENDIF ENDIF TextArea1.Select[/code] :twisted: ----------------------------------- soplo Domingo, 27 Septiembre 2009, 19:02 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- david, estuve mirando tu texto (aunque no está el proyecto entero y no lo puedo abrir en gambas) y creo que veo lo que tienes mal, pero antes de meterme en harina quisiera saber si tienes proyectado hacer esto con un texto muy largo porque entonces deberías olvidarte de lo que tienes hecho y realizar otro planteamiento. ¿Piensas hacer eso con capítulos enteros de la biblia? Porque entonces vas mal. ----------------------------------- david Domingo, 27 Septiembre 2009, 19:30 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- [b]soplo[/b], el proyecto no es mio soplo es de death y no se que penssamiento tendra el, solo queria que selecionara el texto del textedit o textarea y yo le e ayudado ----------------------------------- soplo Domingo, 27 Septiembre 2009, 19:33 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- ah si, es cierto je je je Pero al final el problema es el que es. Si quiere meter textos grandes con esa técnica necesita algo mas que lo que está haciendo o no le valdrá. No se si quiere la biblia entera, parte o solo unos pocos párrafos, pero no es igual. ----------------------------------- DEATH Lunes, 28 Septiembre 2009, 21:06 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- que tal... primero agradecer el interés en poder dar una solución... eso se agradece mucho... bueno... creo que mejor explico mas menos lo que estoy haciendo... resulta que inicié un proyecto para hacer una biblia, pero libre... esto a raíz de que he conocido software privado que son bien buenos pero que no todos tienen la posibilidad de obtenerlo, salvo por la piratería. Entonces he estado en contacto con algunos ministerios que tienen literatura y que les interesa el proyecto, obviamente que sin el fin del lucro... sólo con el fin de ayudar... porqué comento esto?... porque creo que de esta forma podré obtener ayuda para el guiarme en este proyecto. Tengo la esperanza de que algún día pueda salir este soft y poder así aportar un granito de arena a aquellas personas que tienen un poquito de fe y que no pueden comprar un soft privado. Ideal sería hacerlo multiplataforma pero tengo la esperanza que en un futuro las aplicaciones hechas en gambas puedan ser ejecutadas en otros SO. bueno... con respecto a la selección de texto... como dice soplo... el problema se presenta con textos grandes... cuando son texto pequeños o mejor dicho muy pequeños funciona...entonces si no funciona y no funcionará con textos grandes... existe alguna recomendación?? ----------------------------------- soplo Lunes, 28 Septiembre 2009, 21:37 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- Entonces tienes que olvidarte de lo que estás haciendo. La solución es crear una base de datos con los campos al menos Titulo, numeracion y frase. Se hace una aplicación con tres textbox. En el título pones GENESIS, en numeración pones 1.1 y en frase la frase que corresponda. Le das a grabar y te aparecen los tres texboxes con el título GENESIS (ya no hay que escribirlo), numeracion (se ha incrementado en uno) y el textbox de frase vacío. Pasteas la frase y grabas. De nuevo te vuelven a aparecer los textboxes con el título ya escrito, la numeración ya sumada y la frase por poner. Así solo haces copiar, pegar y grabar. En vez de escribir toda la biblia parece mejor ir pasteando las frases ya escritas. Por ejemplo de este lugar [url=http://www.biblia12.com/genesis-1-n1.html]La biblia cuando tengas terminada la base de datos podrás hacer consultas por titulo="Genesis" o bien por palabras concretas o bien por una determinada numeración. Si son campos de una tabla los puedes mostrar por ejemplo con un gridview o similar y destacar la frase apropiada es muy simple. Incluso se me ocurre que puedes mostrar todo el texto en un string con la frase que quieres destacar en otro color o lo que sea. Es sencillo, pero primero tienes que tener la base de datos. Yo añadiría otro campo que sea por ejemplo Comentario. Ahi puedes poner por ejemplo donde empieza la resurección de Lázaro o donde empieza el episodio de el milagro de los panes y los peces ... De esa forma además de poder consultar el génesis también podrías buscar "milagro de panes y peces" y te aparecería en que lugares de la biblia está reflejado ese hecho. Ahora bien de meter la bibia en base de datos (a menos que consigas una que ya lo tenga hecho cosa que creo que es probable que puedas conseguir) no te libras. :mryellow: ----------------------------------- DEATH Lunes, 28 Septiembre 2009, 22:20 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- la idea de pasar la biblia a base de dato no la descarto... de hecho fue lo primero que se me ocurrió pero quise buscar una ruta mas corta jejejeje... voy hacer la prueba de cómo hacerlo haber si me echan una mano creo que en este caso seria abrir otro foro para este tema... o no es necesario? ----------------------------------- soplo Lunes, 28 Septiembre 2009, 23:14 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- al menos las ideas principales las puedes ir poniendo aquí (en mi humilde opinión). Cuando empieces tu aplicación de verdad y haya código y cosas lo pones en fragmentos de código como el de openmovie Vamos me parece a mi :mryellow: ----------------------------------- jguardon Lunes, 28 Septiembre 2009, 23:27 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- Hola Leyendo el hilo en un principio se me ocurrió que podrían usarse Colecciones, que vienen a ser como los arrays, pero con un índice o 'key' que es de tipo String. Pero al saber que se trataba de la Biblia y debido a su enorme extensión, no sé si podría ser viable lo que propongo. Imaginemos un texto que incluye varios capítulos con sus versículos. Si delimitamos los primeros con un símbolo, por ejemplo '@' y los segundos con otro, digamos '#' justo antes de su numeración, podríamos crear una Colección de capítulos y una (sub)Colección de versículos para cada capítulo, recorriendo el texto con un bucle, almacenando en el 'key' las numeraciones (x caracteres numéricos justo después del símbolo), y en el 'Value' el texto existente hasta la nueva aparición del símbolo delimitador. Esto nos dejaría con una colección de capítulos almacenando colecciones de versículos (puesto que el Value de las colecciones es de tipo Variant, pudiéndose por tanto almacenar colecciones dentro de otras. Probablemente el objeto final sería de un tamaño considerable en memoria y su inconveniente es que es volátil, puesto que habría que crearlo a partir de un fichero siempre al inicio de la aplicación, pero la ventaja es el fácil manejo al estar indexado mediante strings y los métodos de búsqueda efectivos y supuestamente rápidos al leer en memoria. No sé si es una locura inviable, pero quizás sirva para explorar otras vías para acometer el proyecto. [color=#5900ff]Edito:[/color] Otra idea por ejemplo, sería almacenar en una Colección (de la manera propuesta arriba) el número de capítulo como 'key' y la posición exacta de su comienzo en el fichero de texto (integer) como Value. Lo mismo para los versículos, de manera que en comienzo del texto ya lo tendríamos, y el final nos lo daría justo el Value del siguiente elemento de la Colección, listo para mostrar en el TextEdit. No sé si me explico... Saludos ----------------------------------- DEATH Martes, 29 Septiembre 2009, 14:34 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- con respecto al foro... si no es molestia para todos, entonces mantenemos este foro. :p ahora con lo que dice JGUARDON, a lo mejor ayudaría mucho decirte que no sería necesario cargar toda la biblia inmediatamente... en estos momentos tengo la biblia dividida en capitulos por lo tanto la carga seria por capitulo (individual) por lo tanto, el trabajo esta en hacer la coleccion de versículos. De todas maneras no descarto la idea de SOPLO de alojar toda la biblia en una BBDD, de hecho estoy haciendo una rutina para pasarla a la BBDD. JGUARDON... cual seria el ejemplo de cómo crear la coleccion? aqui adjunto una screenshot de cómo será mas menos la interfaz... y además asi se ve la idea que nombré anteriormente que sólo se cargaría por capítulo. [img]http://foro.gambas-es.org/files/images/29/pantallazo_bsnd.png[/img] ----------------------------------- soplo Martes, 29 Septiembre 2009, 14:43 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- Lo que dice jguardon también me parece bien. La eleccion de un método u otro dependerá de las funcionalidades que quieras conseguir. Con una base de datos obtienes mas funcionalidades con un coste en memoria menor, pero eso tendrás que pensarlo bien. Yo creo que debe haber ya bases de datos con la biblia. Si consigues una bastará con que hagas una rutina que copie los datos a tu base de datos y te ahorras escribirla. Con los descriptores que menciona Jguardón consigues igual funcionalidad en textos pequeños, pero no en textos grandes. Yo creo que podrías explorar el método de jguardon con algún texto a ver que es lo que consigues y así decides si te decantas por ese método o la base de datos. :mryellow: ----------------------------------- DEATH Martes, 29 Septiembre 2009, 15:40 Re: Seleccionar Un Texto En Un TextEdit ----------------------------------- si me parece... esperare a un ejemplito de JGUARDON para ver como me va... :roll: por ahora estoy probando el tema de la base de datos... estoy viendo cual seria el controlador que mas se acomoda a lo que se necesita... en estos momentos lo estoy probando en un Gridview voy a ver q potencial se le puede sacar o probare con otro...