OVH Cloud OVH Cloud

Problème avec Rich textbox

3 réponses
Avatar
patrice henrio
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

FormeHistoire.RtbHistoire.SelStart = 335
FormeHistoire.RtbHistoire.SelLength = 6
Call SetScrollPos(FormeHistoire.RtbHistoire)

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 ...


Comment résoudre ce problème ?

3 réponses

Avatar
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.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
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.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
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.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous