Après avoir résolu un premier problème avec le positionnement du scrollbar
dans un rich text box (RTB), je suis confronté à un nouveau problème
Je me positionne à un endroit du texte et je place le scroll bar où il faut.
Je recommence la même action pour un positionnement au même endroit et là le
scroll bar se positionne en haut du RTB.
Je refias encore une fois, je retrouve le bon emplacement.
J'ai vérifié les paramètres qui passaient dasn les procédures, c'est
exactement les mêmes.
L'explication que j'ai trouvé mais qui ne me parait pas très sure serait que
la méthode .find du RTB, cherche à partir du curseur, et comme elle est
justement positionnée à cet endroit là, elle ne trouve plus la chaîne
recherchée.
Voici le code
Sub SetScrollPos(ByRef rtb As RichTextBox)
Dim Pt As PointAPI
Call SendMessage(rtb.hwnd, EM_POSFROMCHAR, ByVal VarPtr(Pt), ByVal
rtb.SelStart)
Call SendMessage(rtb.hwnd, EM_SETSCROLLPOS, 0, Pt)
End Sub
Premier passage, je me positionne au 335ème caractère, deuxième passage au
1er, troisième passaeg au 335éme ...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Zoury
Salut Patrice! :O)
L'explication que j'ai trouvé mais qui ne me parait pas très sure serait
que
la méthode .find du RTB, cherche à partir du curseur, et comme elle est justement positionnée à cet endroit là, elle ne trouve plus la chaîne recherchée.
Comment résoudre ce problème ?
C'est exactement cela. Si tu observes les paramètres du Find, tu trouveras l'index de départ et l'index de fin de la recherche. Place 0 et Len(RichTextBox1.Text) respectivement et ça devrait fonctionner.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
Salut Patrice! :O)
L'explication que j'ai trouvé mais qui ne me parait pas très sure serait
que
la méthode .find du RTB, cherche à partir du curseur, et comme elle est
justement positionnée à cet endroit là, elle ne trouve plus la chaîne
recherchée.
Comment résoudre ce problème ?
C'est exactement cela. Si tu observes les paramètres du Find, tu trouveras
l'index de départ et l'index de fin de la recherche. Place 0 et
Len(RichTextBox1.Text) respectivement et ça devrait fonctionner.
L'explication que j'ai trouvé mais qui ne me parait pas très sure serait
que
la méthode .find du RTB, cherche à partir du curseur, et comme elle est justement positionnée à cet endroit là, elle ne trouve plus la chaîne recherchée.
Comment résoudre ce problème ?
C'est exactement cela. Si tu observes les paramètres du Find, tu trouveras l'index de départ et l'index de fin de la recherche. Place 0 et Len(RichTextBox1.Text) respectivement et ça devrait fonctionner.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
patrice henrio
En fait avec le code que j'ai transmis, je n'utilise même pas la méthode .find, donc l'explication ne suffit pas.
J'ai essayé d'ailleurs avec les paramètres de .Find à 0 (vbStart) mais cela ne change rien.
Donc j'ai toujours le même problème agaçant.
"Zoury" a écrit dans le message de news:
Salut Patrice! :O)
> L'explication que j'ai trouvé mais qui ne me parait pas très sure serait que > la méthode .find du RTB, cherche à partir du curseur, et comme elle est > justement positionnée à cet endroit là, elle ne trouve plus la chaîne > recherchée.
> Comment résoudre ce problème ?
C'est exactement cela. Si tu observes les paramètres du Find, tu trouveras l'index de départ et l'index de fin de la recherche. Place 0 et Len(RichTextBox1.Text) respectivement et ça devrait fonctionner.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
En fait avec le code que j'ai transmis, je n'utilise même pas la méthode
.find, donc l'explication ne suffit pas.
J'ai essayé d'ailleurs avec les paramètres de .Find à 0 (vbStart) mais cela
ne change rien.
Donc j'ai toujours le même problème agaçant.
"Zoury" <yanick_lefebvre@hotmail.com> a écrit dans le message de
news:eQNg916cDHA.1884@TK2MSFTNGP10.phx.gbl...
Salut Patrice! :O)
> L'explication que j'ai trouvé mais qui ne me parait pas très sure serait
que
> la méthode .find du RTB, cherche à partir du curseur, et comme elle est
> justement positionnée à cet endroit là, elle ne trouve plus la chaîne
> recherchée.
> Comment résoudre ce problème ?
C'est exactement cela. Si tu observes les paramètres du Find, tu trouveras
l'index de départ et l'index de fin de la recherche. Place 0 et
Len(RichTextBox1.Text) respectivement et ça devrait fonctionner.
En fait avec le code que j'ai transmis, je n'utilise même pas la méthode .find, donc l'explication ne suffit pas.
J'ai essayé d'ailleurs avec les paramètres de .Find à 0 (vbStart) mais cela ne change rien.
Donc j'ai toujours le même problème agaçant.
"Zoury" a écrit dans le message de news:
Salut Patrice! :O)
> L'explication que j'ai trouvé mais qui ne me parait pas très sure serait que > la méthode .find du RTB, cherche à partir du curseur, et comme elle est > justement positionnée à cet endroit là, elle ne trouve plus la chaîne > recherchée.
> Comment résoudre ce problème ?
C'est exactement cela. Si tu observes les paramètres du Find, tu trouveras l'index de départ et l'index de fin de la recherche. Place 0 et Len(RichTextBox1.Text) respectivement et ça devrait fonctionner.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
patrice henrio
J'ai trouvé un début d'explication : le problème se pose si le positionnement du RTB se fait à l'intérieur du texte initialement affiché.
Ainsi si je cherche la chaine "xxxx" qui se trouve au début de la troisième ligne de mon RTB, le premier positionnement se fait sur cette chaîne, le deuxième au début, le troisième sur la chaîne, etc. Pourquoi ? mais on peut se demander aussi pourqoui pas ? J'ai règlé ce pb en modifiant la procédure SetScrollPos
Sub SetScrollPos(ByRef rtb As RichTextBox) Dim Pt As PointAPI Call SendMessage(rtb.hwnd, EM_POSFROMCHAR, ByVal VarPtr(Pt), ByVal rtb.SelStart) If Pt.Y < rtb.Height Then Pt.Y = 0 Call SendMessage(rtb.hwnd, EM_SETSCROLLPOS, 0, Pt) End Sub
J'aimerai en savoir un peu plus cependant, en particulier il s'agit toujours de ce fameux SendMessage. Je sens bien que là on touche au coeur du système, ou au moins à sa banlieue proche.
"Zoury" a écrit dans le message de news:
Salut Patrice! :O)
> L'explication que j'ai trouvé mais qui ne me parait pas très sure serait que > la méthode .find du RTB, cherche à partir du curseur, et comme elle est > justement positionnée à cet endroit là, elle ne trouve plus la chaîne > recherchée.
> Comment résoudre ce problème ?
C'est exactement cela. Si tu observes les paramètres du Find, tu trouveras l'index de départ et l'index de fin de la recherche. Place 0 et Len(RichTextBox1.Text) respectivement et ça devrait fonctionner.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
J'ai trouvé un début d'explication : le problème se pose si le
positionnement du RTB se fait à l'intérieur du texte initialement affiché.
Ainsi si je cherche la chaine "xxxx" qui se trouve au début de la troisième
ligne de mon RTB, le premier positionnement se fait sur cette chaîne, le
deuxième au début, le troisième sur la chaîne, etc. Pourquoi ? mais on peut
se demander aussi pourqoui pas ?
J'ai règlé ce pb en modifiant la procédure SetScrollPos
Sub SetScrollPos(ByRef rtb As RichTextBox)
Dim Pt As PointAPI
Call SendMessage(rtb.hwnd, EM_POSFROMCHAR, ByVal VarPtr(Pt), ByVal
rtb.SelStart)
If Pt.Y < rtb.Height Then Pt.Y = 0
Call SendMessage(rtb.hwnd, EM_SETSCROLLPOS, 0, Pt)
End Sub
J'aimerai en savoir un peu plus cependant, en particulier il s'agit toujours
de ce fameux SendMessage. Je sens bien que là on touche au coeur du système,
ou au moins à sa banlieue proche.
"Zoury" <yanick_lefebvre@hotmail.com> a écrit dans le message de
news:eQNg916cDHA.1884@TK2MSFTNGP10.phx.gbl...
Salut Patrice! :O)
> L'explication que j'ai trouvé mais qui ne me parait pas très sure serait
que
> la méthode .find du RTB, cherche à partir du curseur, et comme elle est
> justement positionnée à cet endroit là, elle ne trouve plus la chaîne
> recherchée.
> Comment résoudre ce problème ?
C'est exactement cela. Si tu observes les paramètres du Find, tu trouveras
l'index de départ et l'index de fin de la recherche. Place 0 et
Len(RichTextBox1.Text) respectivement et ça devrait fonctionner.
J'ai trouvé un début d'explication : le problème se pose si le positionnement du RTB se fait à l'intérieur du texte initialement affiché.
Ainsi si je cherche la chaine "xxxx" qui se trouve au début de la troisième ligne de mon RTB, le premier positionnement se fait sur cette chaîne, le deuxième au début, le troisième sur la chaîne, etc. Pourquoi ? mais on peut se demander aussi pourqoui pas ? J'ai règlé ce pb en modifiant la procédure SetScrollPos
Sub SetScrollPos(ByRef rtb As RichTextBox) Dim Pt As PointAPI Call SendMessage(rtb.hwnd, EM_POSFROMCHAR, ByVal VarPtr(Pt), ByVal rtb.SelStart) If Pt.Y < rtb.Height Then Pt.Y = 0 Call SendMessage(rtb.hwnd, EM_SETSCROLLPOS, 0, Pt) End Sub
J'aimerai en savoir un peu plus cependant, en particulier il s'agit toujours de ce fameux SendMessage. Je sens bien que là on touche au coeur du système, ou au moins à sa banlieue proche.
"Zoury" a écrit dans le message de news:
Salut Patrice! :O)
> L'explication que j'ai trouvé mais qui ne me parait pas très sure serait que > la méthode .find du RTB, cherche à partir du curseur, et comme elle est > justement positionnée à cet endroit là, elle ne trouve plus la chaîne > recherchée.
> Comment résoudre ce problème ?
C'est exactement cela. Si tu observes les paramètres du Find, tu trouveras l'index de départ et l'index de fin de la recherche. Place 0 et Len(RichTextBox1.Text) respectivement et ça devrait fonctionner.