B4J Question How to get the cursor position (line column) of textarea

Discussion in 'B4J Questions' started by Pietro Pancino, Jun 18, 2019.

  1. Pietro Pancino

    Pietro Pancino Member Licensed User

    Hi all,
    I need to get the content of the line where is the cursor in a textarea, is anyone know how to do it?
    :) Pietro
     
  2. DonManfred

    DonManfred Expert Licensed User

  3. Pietro Pancino

    Pietro Pancino Member Licensed User

    Thank you for your answer :)
    I tried it, but it give you the absolut position of the cursor from the begining of the text but not in line column format...
    I look everywhere but i'm blocked. In fact I need to send the content of the line where is the cursor to a specific interface through TCPIP for test purpose...
     
  4. Pietro Pancino

    Pietro Pancino Member Licensed User

    Hi again!
    In fact... I did it starting from the code you mentioned (https://www.b4x.com/android/forum/t...-a-selectionchanged-event.103119/#post-646376)
    It's working, here is the code and the zip file.
    Many Thanks to you!
    :):):)
    Pietro


    Code:
    #Region Project Attributes
        
    #MainFormWidth: 600
        
    #MainFormHeight: 600
    #End Region

    Sub Process_Globals
        
    Private fx As JFX
        
    Private MainForm As Form
           
        
    Private textarea1 As TextArea
        
    Private nb_line As Label
        
    Private coordonate As Label
        
    End Sub

    Sub AppStart (Form1 As Form, Args() As String)
        MainForm = Form1
        MainForm.RootPane.LoadLayout(
    "Layout1"'Load the layout file.
        MainForm.Show
        
        
    Dim jo As JavaObject = textarea1
        textarea1.Text=
    "line 1"&CRLF&"line 2"&CRLF&"line 2"&CRLF&"line 4"&CRLF&CRLF&"end line"
        
    Dim event As Object = jo.CreateEventFromUI("javafx.beans.value.ChangeListener""SelectionChanged"Null)
        jo.RunMethodJO(
    "selectionProperty"Null).RunMethod("addListener"Array(event))

        
    End Sub

    'Return true to allow the default exceptions handler to handle the uncaught exception.
    Sub Application_Error (Error As Exception, StackTrace As StringAs Boolean
        
    Return True
    End Sub




    Sub SelectionChanged_Event (MethodName As String, Args() As Object) As Object
        
    If MethodName = "changed" Then
            
    Dim IndexRange As JavaObject = Args(2)
            
    Dim StartPosition As Int = IndexRange.RunMethod("getStart"Null)
            
    'Dim EndPosition As Int = IndexRange.RunMethod("getEnd", Null)
            
            
    ' copy the text area to a list
            Dim l As List
            l.Initialize
            l.AddAll(
    Regex.Split(CRLF, textarea1.text))
            
            
    ' echo the number of line excluding empty line at the end
            nb_line.Text=l.size& " lines in text area"
            
            
    Dim the_start,the_end,line,column As Int       
            
    Dim the_str As String =""
            
            the_start = 
    0
            the_end = 
    0
            
            
    For i = 0 To l.Size-1
                
    ' get line length
                the_str = l.Get(i)
                the_end = the_start+the_str.Length
                
                
    If StartPosition >= the_start And StartPosition <= the_end Then
                    line = i+
    1
                    column= StartPosition - the_start
                
    End If           
                the_start = the_end+
    1
                coordonate.Text =
    "line = "&line& " column = "&column
            
    Next
            
        
    End If
        
    Return Null
        
        
    End Sub
     

    Attached Files:

    xulihang and DonManfred like this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice