[Gambas-user] ERRATUM: Problem to use a TextArea

linus linuxos at ...1896...
Wed Apr 28 01:09:31 CEST 2010


Hi all,

I'm using a TextArea in a little project like a Text Editor.

When I add the part of code to search in the text of this TextArea, I
have a problem during search text whith the command 'instr'.

In fact, when this command find accented characters, it count 2
characters instead of 1 and the position of the search at the end it
false.

Does any body have an explication about this problem please ?

Joined the code to search in the TextArea

---------------------------------------------------------------------


Public SAVMARKER as Interger


Public Button1_Click()

  SearchTextInEditor(1)

End


PUBLIC SUB SearchTextInEditor(MODE AS Integer)

  ' MODE: 0  => From the beginning of the text
  ' MODE: 1  => After the last search

  DIM IndexCarac AS Integer
  DIM CaracTexte AS String
  DIM IndexRecherche AS Integer
  DIM LongueurRecherche AS Integer

  TextBox39.Text = Replace(TextBox39.Text, "\"", "")
  TextBox40.text = Replace(TextBox40.text, "\"", "")

  IF TextArea1.Length > 0 THEN 

    IF TextBox39.text = "" THEN 
      Message.Warning(("Please entrer text to search !"), ("Close"))
      RETURN 
    END IF

    Application.Busy = 1

    SELECT CASE MODE
      CASE 0
        ' search from the beginning of the text 
        SAVMARKER = 0
        IF ToggleButton5.Value = TRUE THEN 
          ' Use the case sensitive
          IndexRecherche = InStr(TextArea1.Text, TextBox39.Text,
SAVMARKER, gb.Text)
        ELSE 
          ' No case sensitive
          IndexRecherche = InStr(Lower$(TextArea1.Text), Lower
$(TextBox39.Text), SAVMARKER, gb.Text)
        END IF

        IF IndexRecherche > 0 THEN

          TextArea1.Select(IndexRecherche - 1, Len(TextBox39.Text))
          TextArea1.EnsureVisible()
          SAVMARKER = IndexRecherche + Len(TextBox39.Text)
          PRINT "IndexRecherche=" & IndexRecherche
          IF SAVMARKER > TextArea1.Length THEN 
            SAVMARKER = TextArea1.Length
          END IF

          LongueurRecherche = Len(TextBox39.Text)

        ELSE 
          Application.Busy = 0
          Message.Info(("Search finished. End of list attained."),
("Close"))
          RETURN
        END IF

      CASE 1
        ' Search following ...
        IF ToggleButton5.Value = TRUE THEN 
          ' Use the case sensitive
          IndexRecherche = InStr(TextArea1.Text, TextBox39.Text,
SAVMARKER, gb.Text)
        ELSE 
          ' Ne pas tenir compte de la casse
          IndexRecherche = InStr(Lower$(TextArea1.Text), Lower
$(TextBox39.Text), SAVMARKER, gb.Text)
        END IF

        IF IndexRecherche > 0 THEN
          TextArea1.Select((IndexRecherche - 1), Len(TextBox39.Text))
          SAVMARKER = IndexRecherche + Len(TextBox39.Text)
          IF SAVMARKER > TextArea1.Length THEN 
            SAVMARKER = TextArea1.Length
          END IF

        ELSE 
          Application.Busy = 0
          Message.Info(("Search finished. End of list attained."),
("Close"))
          RETURN
        END IF
    END SELECT 
  END IF

  Application.Busy = 0


END

-----------------------------------------------------------------------------

Thank you in advance.

-- 
Olivier CRUILLES
Email: linuxos at ...1896...







More information about the User mailing list