none
Faire défiler le Scrollbar d'un RichTextBox RRS feed

  • Question

  • Bonjour,

    je m'explique. J'ai un RichTextBox dont je souhaite colorier car ce qu'il contient est du HTML. Pour cela, je travaille avec un second RichTextBox. Une fois colorié, j'applique la couleur au RichTextBox 1. Pour récupérer la position du curseur, jje fais :

    Depart = Form1.RichTextBox1.SelectionStart
    
    ...Colorisation...
    
    Form1.RichTextBox1.SelectionStart = Depart

    Mais la position du Scroolbar n'est pas à la bonne place. J'aimerais que cela ne change pas.

    Autrement dit :

    Je récupère la position du Scrollbar, je transfère le RTB1 vers le RTB2, je colorise je transfère le RTB2 vers le RTB1, je remet la valeur du Scrollbar. Merci

    lundi 22 août 2022 15:38

Toutes les réponses

  • J'ai un début ! J'arrive à récupérer la valeur de défilement mais j'ai un déséquilibrage de la pile lors du SetScrollInfo.

        Const SBS_VERT = 1
        Private Const SIF_RANGE = &H1
        Private Const SIF_PAGE = &H2
        Private Const SIF_POS = &H4
        Private Const SIF_DISABLENOSCROLL = &H8
        Private Const SIF_TRACKPOS = &H10
        Private Const SIF_ALL = (SIF_RANGE Or SIF_PAGE Or SIF_POS Or SIF_TRACKPOS)
    
        Public Structure SCROLLINFO
            Public cbSize As Integer
            Public fMask As Integer
            Public nMin As Integer
            Public nMax As Integer
            Public nPage As Integer
            Public nPos As Integer
            Public nTrackPos As Integer
        End Structure
    
        Private Declare Function GetScrollInfo Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal nBar As Integer, ByRef lpScrollInfo As SCROLLINFO) As Boolean
        Private Declare Function SetScrollInfo Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal nBar As Integer, ByVal lpScrollInfo As SCROLLINFO, ByVal fRedraw As Boolean) As Integer
    
        Public SInfo As New SCROLLINFO, Faire As Boolean = True
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim FichierEnCours As String = "E:\www\index.php"
            RichTextBox1.Text = My.Computer.FileSystem.ReadAllText(FichierEnCours)
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            SetScrollInfo(RichTextBox1.Handle, SBS_VERT, SInfo, True)
        End Sub
    
        Private Sub RichTextBox1_VScroll(sender As Object, e As EventArgs) Handles RichTextBox1.VScroll
            SInfo.fMask = SIF_ALL
            GetScrollInfo(RichTextBox1.Handle, SBS_VERT, SInfo)
        End Sub
    

    Merci

    lundi 22 août 2022 16:30
  • Pour faire défiler un RTB, on peut envoyer WM_VSCROLL, comme dans cet exemple que j'avais posté en C# (quasi même code en VB) : send MouseScroll from PictureBox to RichTextBox
    mardi 23 août 2022 06:41
  • Bonjour, désolée, je n'ai pas compris le SendKey.
    jeudi 12 janvier 2023 07:20