Séléction de droite a gauche [Résolu]

Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 18 janv. 2012 à 15:52 - Dernière réponse : Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention
- 5 avril 2012 à 12:02
Bonjour,

Dans un RichTextBox, je veux que certains "mots" soient complétement sélectionné ou pas du tout, je m’explique.

Par exemple dans la chaine :
"123456789"
je veux que soit 34567 soit totalement sélectionner soit pas du tout.
Pour ça :
- Je test SelectionStart
Si il est contenu dans 34567, je sauvegarde la future position en 3 (soit valeur 2, sauvegarder pour ne pas perdre ma sélection courante pour le test suivant).
- Je test SelectionStart + SelectionLength (soit la position de la fin de la sélection)
Si la valeur est contenu dans 34567, je sauvegarde la fin de la sélection en 7 (valeur 6)
- Enfin je met a jour SelectionStart et SelectionLength en fonction des valeurs trouver dans mes test précédant.

Donc si je sélectionne 123 ma sélection est "étendu" jusqu'à 7. (résultat 123456789) parfait c'est ce que je veux faire.

Par contre, si je fait ma sélection de droite a gauche, vue que SelectionStart est toujours le caractère le plus a gauche de ma sélection (et non pas le début "réel" de la sélection). Alors mon curseur se retrouve a gauche de ma sélection (il doit rester a droite, vue que je fait une sélection de droite a gauche).

Ce n'a pas l'aire d'être grand choses, mais ça me fait bien ch____ car dans le cas où je sélectionne 789. Alors ma sélection s’étend bien jusqu'à 3 (soit 123456789) mais si je veux continuer de sélectionner jusqu'à 2 alors je me retrouve a sélectionner 2 tout seul (soit 123456789) vue que mon curseur n'est plus a droite du 9 mais qu'il c'est fait déplacer entre le 2 et le 3 au moment où j'ai étendu ma sélection)

J'ai regardé par mal de choses sur le RichTextBox mais je ne trouve pas comment faire pour placer (ou tester si) le curseur est a droite ou a gauche de la sélection.

Quelqu'un aurait-il une solution a ce problème svp ?

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Afficher la suite 

Votre réponse

94 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 26 janv. 2012 à 11:49
3
Merci
Ben ...
Plus facile (je m'en veux de ne pas y avoir immédiatement pensé) que prévu, ce petit rajout protectionniste (pas toucher aux prés carrés, hein). ===>>
Voilà donc l'horloge ===>>
Option Explicit
Private Type POINTAPI
    x As Long
    y As Long
End Type
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private mode As Byte
Private chaine As String, ou As Integer
Private ancx As Long, sens As Integer, pa As POINTAPI

Private Sub Form_Load()
  chaine = "34567"
  RichTextBox1.Text = "aaaaa34567fffccc"
  mode = 0
  End Sub

Private Sub RichTextBox1_Change()
 Static pre As String
 If RichTextBox1.Text Like "*" & chaine & "*" Then pre RichTextBox1.Text Else RichTextBox1.Text pre
 End Sub

'LA SOURIS
Private Sub RichTextBox1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
  ancx = x
End Sub
Private Sub RichTextBox1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  If Button 1 Then ancx x
End Sub

Private Sub RichTextBox1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  If Button = 1 Then
    Dim pos As Integer
    mode = 1
    pos = InStr(RichTextBox1.Text, chaine)
    If x < ancx Then sens -1 Else sens 1
    If RichTextBox1.SelLength <= 1 And RichTextBox1.SelStart >= pos - 1 And RichTextBox1.SelStart <= pos + Len(chaine) - 1 Then
      If sens = 1 Then
        RichTextBox1.SelStart = pos - 1
        DoEvents
        GetCursorPos pa
        RichTextBox1.SelLength = Len(chaine)
        SetCursorPos calculelongueur(Left(RichTextBox1.Text, pos + Len(chaine) + 1)) + _
        ScaleX(RichTextBox1.Left, Me.ScaleMode, vbPixels) + ScaleX(Me.Left, vbTwips, vbPixels), pa.y
        Exit Sub
      End If
      If sens = -1 And RichTextBox1.SelLength < 1 Then
        RichTextBox1.SelStart = pos + Len(chaine) - 1
        SendKeys "{RIGHT}"
        SetCursorPos calculelongueur(Left(RichTextBox1.Text, pos)) + _
        ScaleX(RichTextBox1.Left, Me.ScaleMode, vbPixels) + ScaleX(Me.Left, vbTwips, vbPixels), pa.y
        Exit Sub
      End If
    End If
    mode = 1
    If x < ancx Then sens -1 Else sens 1
    avancons RichTextBox1, chaine, 1
  End If
End Sub
'LE CLAVIER
Private Sub RichTextBox1_KeyDown(KeyCode As Integer, Shift As Integer)
 If Shift And Not KeyCode = 16 Then
   If KeyCode 37 And RichTextBox1.SelLength 0 Then sens = -1
   If KeyCode 39 And RichTextBox1.SelLength 0 Then sens = 1
   If RichTextBox1.SelLength 0 And sens -1 Then ou = RichTextBox1.SelStart
 End If
End Sub

Private Sub RichTextBox1_KeyUp(KeyCode As Integer, Shift As Integer)
    If Shift <> 1 Then Exit Sub
    If mode = 0 Then
      Dim pos As Integer, i As Integer
      pos = InStr(RichTextBox1.Text, chaine)
      If RichTextBox1.SelStart >= pos - 1 And RichTextBox1.SelStart < pos + Len(chaine) - 2 Then
        If sens = 1 And RichTextBox1.SelStart >= pos - 0 Then
          RichTextBox1.SelStart = pos - 1
          SendKeys "{RIGHT}"
        Else
          If sens = -1 And RichTextBox1.SelLength < 2 Then
            RichTextBox1.SelStart = pos + Len(chaine) - 1
            SendKeys "{LEFT}"
            Exit Sub
          End If
        End If
      End If
    End If
    mode = 0
    avancons RichTextBox1, chaine, 1
End Sub

Private Sub avancons(RTB As RichTextBox, chaine As String, maj As Integer)
  Dim toto As String, fofo As Integer, i As Integer
  Static pos As Integer
  pos = InStr(RTB.Text, chaine)
  Select Case sens
     Case 1
       If mode = 0 Then
          If RTB.SelStart + RTB.SelLength = pos Then simule_cle "RIGHT", Len(chaine) - 1
       End If
       If mode = 1 Then
         If RTB.SelStart + RTB.SelLength = pos Then
             GetCursorPos pa
             fofo = calculelongueur(Left(RTB.Text, pos + Len(chaine))) + ScaleX(RTB.Left, Me.ScaleMode, vbPixels) + _
             ScaleX(Me.Left, vbTwips, vbPixels)
             SetCursorPos fofo, pa.y
          End If
       End If
     Case -1
       If mode = 0 Then
         If RTB.SelStart <> ou Then
           If RTB.SelStart = pos + Len(chaine) - 2 Then simule_cle "LEFT", Len(chaine) - 1
         Else
           If RTB.SelStart - RTB.SelLength = pos + Len(chaine) - 2 Then
             mode = 99
             simule_cle "LEFT", Len(chaine) - 1
             mode = 0
          End If
        End If
      End If
      If mode = 1 Then
        On Error Resume Next
        toto = Mid(RTB.Text, RTB.SelStart - Len(chaine) + 2, Len(chaine))
        On Error GoTo 0
        If toto = chaine Then
          GetCursorPos pa
          fofo = calculelongueur(Left(RTB.Text, pos - 1)) + ScaleX(Me.Left, vbTwips, vbPixels) + _
          ScaleX(RTB.Left, Me.ScaleMode, vbPixels)
          SetCursorPos fofo, pa.y
        End If
      End If
  End Select
End Sub

Private Function calculelongueur(ByVal ch As String) As Long
  If ch = "" Then Exit Function
  With Me.Font
   .Name = RichTextBox1.Font.Name
   .Size = RichTextBox1.Font.Size
   .Bold = RichTextBox1.Font.Bold
  End With
   calculelongueur = TextWidth(ch)
  calculelongueur = ScaleX(calculelongueur, Me.ScaleMode, vbPixels)
End Function
Private Sub simule_cle(cle As String, combien As Integer)
  Dim i As Integer
  For i =  1 To combien
    SendKeys "{" & cle & "}"
  Next
End Sub

J'espère ne rien avoir oublié (quaucun cas particulier ne m'ait échappé).

En sélection , tant au clavier qu'à la souris :
- de gauche à droite : si on arrive au "pré", l'englobe et on peut continuer vers la droite
(si démarrage dans le "pré", englobe celui-ci et on peut continuer vers la droite
- de droite à gauche : si on atteint la fin du pré, l'englobe et on peut continuer vers la gauche
(si démarrage dans le "pré", englobe celui-ci depuis son début et on peut continuer vers la gauche)

en modification : on peut modifier à sa guise tout ce qui se trouve avant ou après le "pré". On ne peut modifier le pré lui-même

A toi.





____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 janv. 2012 à 16:24
0
Merci
Bonjour,

tout cela me parait bien embrouillé et me donne le vertige.
Mais si j'ai bien compris : il suffit de relever dans une variable le selstart de départ et y revenir pour étendre la sélection.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 18 janv. 2012 à 16:43
0
Merci
Arf il me semblais aussi que je n'étais pas très claire :/

Le plus simple est que je "montre" mon problème.
Dans un form mettre un RichTextBox (nommé RichTextBox1)
Ajouter la fonction :
Private Sub RichTextBox1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.SelectionChanged
        Dim PositionDebutSelection As Integer
        Dim PositionFinSelection As Integer
        'Permet de détécter si le text a changer depuis l'appel précédant (évite le problème d'enchainement d'événement, SelectionChanged appeler av TextChanged)
        
        PositionDebutSelection = RichTextBox1.SelectionStart
        PositionFinSelection = RichTextBox1.SelectionStart + RichTextBox1.SelectionLength

        If RichTextBox1.Text.Contains("34567") Then
            Dim PositionDebut34567 As Integer
            Dim PositionFin34567 As Integer
            PositionDebut34567 = RichTextBox1.Text.IndexOf("34567")
            PositionFin34567 = PositionDebut34567 + "34567".Length

            If PositionDebutSelection > PositionDebut34567 And PositionDebutSelection < PositionFin34567 Then
                PositionDebutSelection = PositionDebut34567
            End If
            If PositionFinSelection > PositionDebut34567 And PositionFinSelection < PositionFin34567 Then
                PositionFinSelection = PositionFin34567
            End If
        End If
        
        RichTextBox1.SelectionStart = PositionDebutSelection
        RichTextBox1.SelectionLength = PositionFinSelection - PositionDebutSelection
    End Sub

Lancer l’exécution et ajouter dans le RichTextBox le texte :
Voila une phrase qui illustrera ce que je voulais dire avec mon histoire de "34567" vue que c'était TRÈS mal expliqué dans mon message précédant ^^.

Faire joujou avec les sélections.
Quand on fait des sélection de gauche a droite pas de problème
Quand on fait des sélection de droite a gauche ça merde complétement

Ma question est donc : Comment faire pour que ça ne merde pas ^^

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Commenter la réponse de Polack77
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 18 janv. 2012 à 16:47
0
Merci
Le problème viens de la position du curseur, qui passe de droite a gauche, ça j'ai bien compris.

Mais je n'est pas trouvé comment placer mon curseur a droite d'une sélection (ni même de tester si c'est le cas, peut être que c'est impossible ça me ferais bien chi__ ça)

En tout cas merci de intéresser à mon problème :)

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Commenter la réponse de Polack77
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 18 janv. 2012 à 16:49
0
Merci
Heeee oups j'ai oublier de retirer une ligne de commentaire dans me fonction

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Commenter la réponse de Polack77
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 18 janv. 2012 à 18:09
0
Merci
Tu a compris mon problème du coup ?

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Commenter la réponse de Polack77
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 janv. 2012 à 18:22
0
Merci
Il est pour moi difficile de te suivre rien qu'en analysant ton bout de code (je n'ai pas VB.Net !)
Il me semble toutefois que je travaillerais à ta place très différemment, à commencer par l'utilisation d'une variable générale (appelons-la ou) pour relever le selectionStart. Il peut être relevé dans l'évènement MouseUp de ta RTB
ou = RichTextBox1.SelectionStart

Et je travaillerais également avec le texte sélectionné (je suppose que c'est SelectionText sous VB.Net). Je regarderais ensuite la position de ce texte (indexof, si je comprends bien) dans la RTB et saurait si devant, derrière ou dedans la chaine "341567" ==>> et prendrais mes décisions
Ma démarche, in fine, serait, comme tu le vois, totalement différente de la tienne, mais elle devrait être la bonne
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 janv. 2012 à 18:29
0
Merci
En y re-réfléchissant : ou (la variable dont je t'ai déjà parlé) et selectionLength (je crois que c'est le terme VB.Net) devraient seuls suffire à ta détermination

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 janv. 2012 à 20:45
0
Merci
Ceci étant dit :
Si je me sens à peu près capable, bien que n'étant pas VB.Netiste, d'analyser et comprendre ce que tu écris en VB.Net ===>> tu devrais être capable, bien que non "VB6iste", d'analyser et comprendre ce code VB6 que je viens d'écrire (et fait ce que tu veux) :

Private ou As Integer

Private Sub Form_Load()
  RichTextBox1.Text = "aaaaa34567fff"
End Sub


Private Sub RichTextBox1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  RichTextBox1.SelLength = 0
End Sub

Private Sub RichTextBox1_Mouseup(Button As Integer, Shift As Integer, x As Single, y As Single)
  ou = RichTextBox1.SelStart
 End Sub

Private Sub RichTextBox1_SelChange()
  Dim chaine As String, pos As Integer
  Static deja As Boolean
  If deja Then
    deja = False
    Exit Sub
  End If
  chaine = "34567"
  pos = InStr(RichTextBox1.Text, chaine)
  Select Case ou
    Case Is <= pos
      deja = True
      RichTextBox1.SelLength = Len(Mid(RichTextBox1.Text, ou, pos + Len(chaine) - ou - 1))
     Case Else
       deja = True
       RichTextBox1.SelStart = pos - 1
       deja = True
       RichTextBox1.SelLength = Abs(RichTextBox1.SelLength - pos)
     End Select
End Sub


A toi, donc, de faire le même effort que le mien ===>> Transpose donc
Attention a la position des .
deja = true
Elle est TRES importante dans ce code


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 18 janv. 2012 à 22:01
0
Merci
Bonsoir Ucfoutu

je teste le code en vb6
j'obtiens un runtime error
error 5 invalid procedure call or argument
à la ligne
RichTextBox1.SelLength = Len(Mid(RichTextBox1.Text, ou, pos + Len(chaine) - ou - 1))


lorsqu'on relache le bouton de la souris après
avoir selectionné le string
Commenter la réponse de cs_ShayW
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 18 janv. 2012 à 22:05
0
Merci
le ou est empty
Commenter la réponse de cs_ShayW
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 18 janv. 2012 à 22:09
0
Merci
erreur de ma part
pas vu le Private ou As Integer
Commenter la réponse de cs_ShayW
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 18 janv. 2012 à 22:23
0
Merci
si on selectionne tout le string
ou si je selectionne le premier caractère de gauche
error 5 invalid procedure call or argument
à la ligne

RichTextBox1.SelLength = Len(Mid(RichTextBox1.Text, ou, pos + Len(chaine) - ou - 1))


aussi on ne peut plus supprimer la selection
Commenter la réponse de cs_ShayW
Utilisateur anonyme - 19 janv. 2012 à 03:04
0
Merci
Salut tout le monde,

Alors moi... soit j'ai rien compris, soit je trouve la solution trop facile...
(ça ne m'étonnerais pas que je n'ai rien compris, il est 22h00 chez moi...)

Le fait de réfléchir de droite à gauche n'a aucun rapport, le résultat est le même.

Exemple avec un textebox:
        TextBox1.Text = "1234567890123"
        Dim St As String = "56789"
        Dim i As Integer = InStr(TextBox1.Text, St) - 1
        TextBox1.Select(i, St.Length)



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 janv. 2012 à 05:27
0
Merci
Bonjour, ShayW
merci d'avoir signalé ce bug si on se plaçait au début

Correction (du selchange, donc) :

Private Sub RichTextBox1_SelChange()
  Dim chaine As String, pos As Integer
  Static deja As Boolean
  If deja Then
    deja = False
    Exit Sub
  End If
  chaine = "34567"
  pos = InStr(RichTextBox1.Text, chaine)
  deja = True
  Select Case ou
    Case Is = 0
       RichTextBox1.SelLength = Len(Mid(RichTextBox1.Text, 1, pos + Len(chaine)))
       deja = True
    Case Is <= pos
        RichTextBox1.SelLength = Len(Mid(RichTextBox1.Text, ou, pos + Len(chaine) - ou - 1))
     Case Else
       Dim inv  As Integer
       inv = ou
       RichTextBox1.SelStart = pos - 1
       deja = True
       RichTextBox1.SelLength = Abs(ou - pos) + Len(chaine)
  End Select
End Sub



Bonjour, acive,
Alors moi... soit j'ai rien compris, soit je trouve la solution trop facile...

C'est la 1ère hypothèse, mais (à ta décharge) les explications sont un peu "embrouillées"

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 janv. 2012 à 06:47
0
Merci
A Polack77 ===>>
1) Les messages intervenus entre temps ne doivent pas te faire oublier :
ni mes commentaires (code à transposer) de mon message d'hier à 20h45, ni les lignes de code qui y figurent et qui précèdent celui de l'évènement sel Change.
2) il se peut que ce code ne réponde pas exactement à ce que tu veux, car tes explications ont une autre interprétation possible. Sache qu'en cas de "l'autre interprétation possible", j'ai déjà également fait ce code-là (-pour cette autre interprétation).
A toi de dire
3) lorsque tout sera OK et parfaitement clair, je me permettrai de te "montrer" comment tu aurais pu et du exposer ta question (la rédaction, en quelques mots très simples) pour qu'elle soit à la fois claire et précise.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 19 janv. 2012 à 11:05
0
Merci
Bonjour,

Hé bè ma question ameute les foules déjà MERCI BEAUCOUP pour le temps consacrer a mon problème
Une fois ce message poster, vais analyser/transposer/tester ton code ucfoutu

Voir le PS pour comprendre pourquoi je fait cette interface
Voir le PS2 pour une explication différente, sans doute plus claire (enfin j’espère ) de mon problème.

Mon problème est uniquement a l'utilisation de mon interface.

Le code que j'ai poster permet de forcer la sélection de certains "mot", je les nommerais "balise" maintenant (pour être en cohérence avec mon PS) dans un texte

ucfoutu :
à commencer par l'utilisation d'une variable générale

En faite, dans mon code "réel" je travail avec une collection d'objet (construite dans l'événement "TextChanged") qui me donne les positions de départ et la longueur de chacune des balises. J'ai modifié mon code (un peut trop rapidement sans doute, grosse fatigue hier) pour qu'il "entre" dans une seul fonction.

[...]MouseDown[...]

[...]MouseUp[...]

Je ne me suis pas intéressé a ces événements car avec les touches "shift" et les flèches on peut aussi sélectionner du texte. Mais ça auras peut être un intérêt de chercher aussi dans ce sens ^^

PS :
Je cherche a développer une interface permettant de personnaliser des messages d'erreurs un journal. Plusieurs balises différentes existe ("chemin du fichier en erreur", "numéro de ligne dans la quelle se trouve l'erreur", ...).

Je ne veux donc pas que l'utilisateur de cette interface puisse modifier le texte de mes balises (si non toute ma gestion ne fonctionneras plus)

L’objectif étant de soit de simplifier la vie des développeurs qui voudrais automatiser la lecture de ces journaux, soit des utilisateurs qui lirons alors des messages plus verbeux (et donc plus agréable).

PS2 :
J'ai déjà tenter d'exprimer mon problème avec des "mots" et on ne peut pas dire que ça soit une réussite
Je vais donc être un peut moins verbeux (aller verbeux sera le mot du jour, pardon je m'égare là ) et un peut plus fonctionnelle.

Mon but est d'expliquer comme se comporte mon code au fur et a mesure que le temps passe.

Je vais reporter les polices pour que comme dans mon interface les balises soit facilement identifiable. Je ne vais utiliser qu'une balise (c'est suffisant pour comprendre mon problème).

Le caractère "|" me servira de curseur.
Le texte souligner et écrit en bleu sera le texte sélectionné (sauf erreur de ma part je ne peut pas surligné ici).
Je ne montre ici que le contenu de mon richtextbox.

L'écran est afficher, un message d'erreur (voir PS) pré-formater est dans mon richtextbox.

Ici pas de problème :
Aucune sélection :
Erreur de lecture du fichier "<Nom fichier/>". Cette erreur...

Mon utilisateur :
- place son curseur :
Erreur de lecture du fichier "|<Nom fichier/>". Cette erreur...
- appuie sur shift puis flèche de droite :
Erreur de lecture du fichier "|<Nom fichier/>". Cette erreur...

- Mon code se lance et pouf sélectionne toute la balise :
Erreur de lecture du fichier "|<Nom fichier/>". Cette erreur...

Ici problème :
Aucune sélection :
Erreur de lecture du fichier "<Nom fichier/>". Cette erreur...

Mon utilisateur :
- place son curseur :
Erreur de lecture du fichier "<Nom fichier/>|". Cette erreur...
- appuie sur shift puis flèche de gauche :
Erreur de lecture du fichier "|<Nom fichier/>". Cette erreur...

- Mon code se lance, pouf sélectionne toute la balise, ET DÉPLACE MON CURSEUR LA SALETÉ :
Erreur de lecture du fichier "|<Nom fichier/>". Cette erreur...

- Donc si mon utilisateur continu d’appuyer sur shift et refait flèche de gauche, ça dé-sélectionne la balise . Quand je "sélectionne" par code du texte (à ma connaissance) je n'est que SelectionStart (qui place le curseur) et SelectionLenth (qui sélectionne un certain nombre de caractère a droite du curseur) à ma disposition.

J’espère avoir été plus claire sur mon problème.

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Commenter la réponse de Polack77
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 janv. 2012 à 11:25
0
Merci
Cela devient de plus en plus embrouillé et difficile à suivre (nous ne sommes pas dans ton cerveau)

Répond pour l'instant par oui ou par non à cette question, que je te pose à force d'essayer de décortiquer ton "flot" :
Ton problème technique (sans s'occuper de sa finalité "profonde") pourrait-il s'exprimer ainsi :

Dans une richtexbox composée d'une chaine A, d'une chaine X et d'une chaine B (dans cet ordre), je souhaite que toute sélection qui inclurait un ou plusieurs
caractères de la chaîne X soit étendue pour englober la totalité de la chaîne X.
Et je souhaite que ce résultat soit obtenu quel que soit le sens (de gauche à droite ou de droite à gauche) de la sélection faite.


Car si oui (l'interprétation "autre possible") j'ai également un code tout prêt pour toi.

Tout le reste (pourquoi tu le fais, etc...) ne regarde que toi.

J'ajoute que mon code ne traite pour l'instant qu'avec utilisation de la souris.
J'y ajouterai au besoin, après confirmation de ce que cela te va, l'utilisation des touches !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 19 janv. 2012 à 11:40
0
Merci
Dans une richtexbox composée d'une chaine A, d'une chaine X et d'une chaine B (dans cet ordre), je souhaite que toute sélection qui inclurait un ou plusieurs
caractères de la chaîne X soit étendue pour englober la totalité de la chaîne X.
Et je souhaite que ce résultat soit obtenu quel que soit le sens (de gauche à droite ou de droite à gauche) de la sélection faite.

Oui

Le problème est que je pense que pour comprendre mon erreur il faut "voir" l'interface fonctionner...

AAAAAARRRRRRRRFFFFFFFFFF forcément que tu ne comprend pas je me suis loupé dans une ligne .....
Ici problème :
Aucune sélection :
Erreur de lecture du fichier "<Nom fichier/>". Cette erreur...

Mon utilisateur :
- place son curseur :
Erreur de lecture du fichier "<Nom fichier/>|". Cette erreur...
- appuie sur shift puis flèche de gauche :
Erreur de lecture du fichier "<Nom fichier/>|". Cette erreur...

- Mon code se lance, pouf sélectionne toute la balise, ET DÉPLACE MON CURSEUR LA SALETÉ :
Erreur de lecture du fichier "|<Nom fichier/>". Cette erreur...

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Commenter la réponse de Polack77
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 19 janv. 2012 à 12:05
0
Merci
Voila une bonne idée je pense
http://www.youtube.com/watch?v=wrRTJ3y7-nM&feature=youtu.be

Mon problème en image

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Commenter la réponse de Polack77

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.