Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Posición del cursor en textedit
#1

Hola gente, tengo una función que agrega un entorno de marcas (para LaTeX) pero al aplicarla lleva el cursor a la posición 1:1 (primer caracter:primera linea) como lo que pretendo es que el cursor quede en la linea siguiente a la última linea de la etiqueta, lo que hago es marcar la posición de la linea y luego sumarle 1 después de aplicadas las etiquetas, pero obtengo que TextEditor.Line es de solo lectura, no comprendo como sumarle las lineas nuevas


GAMBAS
  1. Public Sub menuMYQUOTE_Click()
  2.  
  3.   Dim seleccion As String
  4.   Dim cadena1 As String
  5.   Dim cadena2 As String
  6.   Dim contador As Integer
  7.   Dim posicion As Integer
  8.  
  9.   posicion = TextEditor1.Line
  10.   seleccion = TextEditor1.SelectedText
  11.   contador = Len(seleccion)
  12.   cadena1 = seleccion
  13.   cadena2 = "\\begin{myquote}\n    \\enquote{" & seleccion & "}\n\\end{myquote}"
  14.  
  15.   If contador >= 1 Then
  16.     TextEditor1.Text = Replace(TextEditor1.Text, cadena1, cadena2)
  17.  
  18.   TextEditor1.Line = posicion + 1
  19.  



Gracias por cualquier sugerencia
    ¡Gracias!
#2

Fíjate que texeditor1 es una matriz de cadenas de texto. Y fíjate si tiene alguna propiedad que se llame current o algo asi y luego de ahí ver qué podés alterar.
Saludos.
    ¡Gracias!
#3

Es necesario utilizar "TextEditor1.Goto()" para mover el cursor.

Pruebe el código siguiente: -

[Imagen: TextEditorCursor.png]

GAMBAS
  1. ''Reqiures gb.form.editor
  2. ''Requiere gb.form.editor
  3.  
  4. sText As String[]
  5.  
  6. TextEditor1 As TextEditor
  7. HBox1 As HBox
  8. SliderCol As Slider
  9. SliderRow As Slider
  10. Label1 As Label
  11.  
  12. Public Sub Form_Open()
  13.  
  14.   sText = ["0/. Hola = Hello", "1/. Adi ós = Goodbye", "2/. Por favor = Please", "3/. Gracias = Thank you", "4/. Lo siento = Sorry", "5/. Salud = Bless you", "6/. Sí = Yes", "7/. No = No", "8/. ¿Quién? = Who?", "9/. ¿Qué? = What?", "10/. ¿Por qué? = Why?", "11/. ¿Dónde? = Where?"]
  15.  
  16.   BuildForm
  17.   SliderRow.Value = sText.max
  18.   TextEditor1_Cursor
  19.   TextEditor1.SetFocus
  20.   TextEditor1.Text = sText.Join(gb.NewLine)
  21.   Me.Center
  22.  
  23.  
  24. Public Sub SliderCol_Change()
  25.  
  26.   TextEditor1.Goto(SliderCol.Value, SliderRow.MaxValue - SliderRow.Value)
  27.  
  28.  
  29. Public Sub SliderRow_Change()
  30.  
  31.   TextEditor1.Goto(SliderCol.Value, SliderRow.MaxValue - SliderRow.Value)
  32.  
  33.  
  34. Public Sub TextEditor1_Cursor()
  35.  
  36.   Label1.Text = "Row = " & TextEditor1.Line & "    Column = " & TextEditor1.Column
  37.  
  38.  
  39. Public Sub BuildForm()
  40.  
  41.   With Me
  42.     .Height = 400
  43.     .Width = 500
  44.     .Padding = 5
  45.     .Arrangement = Arrange.Vertical
  46.     .Center
  47.  
  48.   With HBox1 = New HBox(Me)
  49.     .Expand = True
  50.  
  51.   With SliderRow = New Slider(HBox1) As "SliderRow"
  52.     .W = 28
  53.     .MaxValue = sText.Max
  54.  
  55.   With TextEditor1 = New TextEditor(HBox1) As "TextEditor1"
  56.     .Expand = True
  57.     .Wrap = True
  58.     .Font.Size = 16
  59.     .Font.Bold = True
  60.  
  61.   With SliderCol = New Slider(Me) As "SliderCol"
  62.     .Value = 0
  63.     .H = 28
  64.     .MaxValue = 25
  65.  
  66.   With Label1 = New Label(Me) As "Label1"
  67.     .H = 28
  68.     .Font.Bold = True
  69.     .Alignment = Align.Center
  70.  


[-] Los siguientes 2 usuarios dicen gracias a cogier por este post:
  • alberto-moyano, jguardon
    ¡Gracias!
#4

Hola cogier, gracias por tu código de ayuda, he conseguido el resultado que buscaba en cuanto a la posición del cursor, este es el código

GAMBAS
  1. Public Sub menuMYQUOTE_Click()
  2.  
  3.   Dim seleccion As String
  4.   Dim cadena1 As String
  5.   Dim cadena2 As String
  6.   Dim contador As Integer
  7.   Dim pos1 As Integer
  8.   Dim pos2 As Integer
  9.  
  10.   pos1 = TextEditor1.Line 'tomo el valor de la linea (pos Y)
  11.   pos2 = TextEditor1.Count 'cuento la posición del cursor (pos X)
  12.   seleccion = TextEditor1.SelectedText
  13.   contador = Len(seleccion)
  14.   cadena1 = seleccion
  15.   cadena2 = "\\begin{myquote}\n    \\enquote{" & seleccion & "}\n\\end{myquote}"
  16.  
  17.   If contador >= 1 Then
  18.     TextEditor1.Text = Replace(TextEditor1.Text, cadena1, cadena2)
  19.  
  20.   TextEditor1.Goto(pos2, pos1 + 3) 'le indico al cursor que se mueva a la posición X,Y(+3 lineas) después del reemplazo
  21.  



Pero tengo el siguiente inconveniente, el reemplazo se hace en todas las coincidencias de la selección (cadena1), no me queda claro si debo reformular Replace o el contador de la selección.

Gracias de antemano
    ¡Gracias!
#5

Hola Alberto. Cadena1 te sirve para eso, solo para elegir el texto. En lugar de eso debes trabajar con los puntos de inicio de la selección y el fin de la selección o con la posición del cursor. Luego cortas la cadena antes y después de lo seleccionado y la volver a armar pero con el texto que te interesa.
Saludos
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)