alberto-moyano   12-07-2021, 00:19
#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


Código:
Public Sub menuMYQUOTE_Click()

  Dim seleccion As String
  Dim cadena1 As String
  Dim cadena2 As String
  Dim contador As Integer
  Dim posicion As Integer

  posicion = TextEditor1.Line
  seleccion = TextEditor1.SelectedText
  contador = Len(seleccion)
  cadena1 = seleccion
  cadena2 = "\\begin{myquote}\n    \\enquote{" & seleccion & "}\n\\end{myquote}"

  If contador >= 1 Then
    TextEditor1.Text = Replace(TextEditor1.Text, cadena1, cadena2)
  Endif

  TextEditor1.Line = posicion + 1

End

Gracias por cualquier sugerencia
Última modificación: 12-07-2021, 00:42 por alberto-moyano.
tincho   12-07-2021, 11:34
#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.

1 Saludo.
cogier   12-07-2021, 18:03
#3
Es necesario utilizar "TextEditor1.Goto()" para mover el cursor.

Pruebe el código siguiente: -

[Imagen: TextEditorCursor.png]

Código:
''Reqiures gb.form.editor
''Requiere gb.form.editor

sText As String[]

TextEditor1 As TextEditor
HBox1 As HBox
SliderCol As Slider
SliderRow As Slider
Label1 As Label

Public Sub Form_Open()

  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?"]

  BuildForm
  SliderRow.Value = sText.max
  TextEditor1_Cursor
  TextEditor1.SetFocus
  TextEditor1.Text = sText.Join(gb.NewLine)
  Me.Center

End

Public Sub SliderCol_Change()

  TextEditor1.Goto(SliderCol.Value, SliderRow.MaxValue - SliderRow.Value)

End

Public Sub SliderRow_Change()

  TextEditor1.Goto(SliderCol.Value, SliderRow.MaxValue - SliderRow.Value)

End

Public Sub TextEditor1_Cursor()

  Label1.Text = "Row = " & TextEditor1.Line & "    Column = " & TextEditor1.Column

End

Public Sub BuildForm()

  With Me
    .Height = 400
    .Width = 500
    .Padding = 5
    .Arrangement = Arrange.Vertical
    .Center
  End With

  With HBox1 = New HBox(Me)
    .Expand = True
  End With

  With SliderRow = New Slider(HBox1) As "SliderRow"
    .W = 28
    .MaxValue = sText.Max
  End With

  With TextEditor1 = New TextEditor(HBox1) As "TextEditor1"
    .Expand = True
    .Wrap = True
    .Font.Size = 16
    .Font.Bold = True
  End With

  With SliderCol = New Slider(Me) As "SliderCol"
    .Value = 0
    .H = 28
    .MaxValue = 25
  End With

  With Label1 = New Label(Me) As "Label1"
    .H = 28
    .Font.Bold = True
    .Alignment = Align.Center
  End With

End
alberto-moyano   13-07-2021, 05:55
#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

Código:
Public Sub menuMYQUOTE_Click()

  Dim seleccion As String
  Dim cadena1 As String
  Dim cadena2 As String
  Dim contador As Integer
  Dim pos1 As Integer
  Dim pos2 As Integer

  pos1 = TextEditor1.Line 'tomo el valor de la linea (pos Y)
  pos2 = TextEditor1.Count 'cuento la posición del cursor (pos X)
  seleccion = TextEditor1.SelectedText
  contador = Len(seleccion)
  cadena1 = seleccion
  cadena2 = "\\begin{myquote}\n    \\enquote{" & seleccion & "}\n\\end{myquote}"

  If contador >= 1 Then
    TextEditor1.Text = Replace(TextEditor1.Text, cadena1, cadena2)
  Endif

  TextEditor1.Goto(pos2, pos1 + 3) 'le indico al cursor que se mueva a la posición X,Y(+3 lineas) después del reemplazo

End

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
tincho   14-07-2021, 10:38
#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

1 Saludo.
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.