BUG DE SCROLLBAR qui me rend fou

l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012 - 15 juil. 2010 à 18:17
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012 - 19 juil. 2010 à 10:42
Bonjour, j'ai un objet contenant un scrollbar et les richtextbox d'un formulaire.

lorsque je scroll ma barre verticale tous les richtext scroll en même temps.

le soucis c'est que l'appli bug quand j'appuie sur le defilement lent de ce scrollbar.

auriez dejà vu ce soucis?

voici le bout de code qui fait scroller un texte:

**************************************************************************************
Public Function scrollit(ByRef texte As RichTextBox, ByVal pourcent As Integer, ByVal max As Integer) As Integer
Dim ligneselectionnee As Integer
Dim ll, pc As Integer
Dim max_reel As Double
Dim coeffdumax, adaptateur, pourcentReel, coef_ajusteurmaxi, coef_ajusteur As Double
Call My.Application.DoEvents()
ligneselectionnee = 0
coeffdumax = 186 / 195
coef_ajusteurmaxi = 1 / coeffdumax
pc = pourcent
texte.BackColor = cst.NORMAL_COLOR
texte.SelectionBackColor = cst.NORMAL_COLOR
texte.DeselectAll()
'If pourcent < 0 Or pourcent > 100 Then
' Exit Sub
'End If
ll = texte.Lines.Length - 1

max_reel = max * coeffdumax
If pc > max_reel Then pc = max_reel
coef_ajusteur = (coef_ajusteurmaxi - 1) / max_reel
adaptateur = 1 + (coef_ajusteur * pourcent)
pourcentReel = pc * adaptateur

ligneselectionnee = ((ll * pourcentReel) / max)
Try
texte.SelectionStart = texte.GetFirstCharIndexFromLine(ligneselectionnee)
texte.SelectionLength = texte.Lines(ligneselectionnee).Length
texte.SelectionBackColor = cst.SELECTION_COLOR
Catch ex As Exception
End Try
Try
texte.ScrollToCaret()
Catch ex As Exception
End Try
Return ligneselectionnee
Call My.Application.DoEvents()
End Function
*************************************************************************************

et voici l'appel de la fonction
************************************************************************************
Private Sub VScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles scroller.Scroll
Dim texte As RichTextBox
Dim nv As Integer
Me.scroller.Focus()
Me.scroller.Refresh()
Call My.Application.DoEvents()
If Not Me.crsp.iamworking Then
Me.crsp.jetravail()
For Each texte In textes
'Me.crsp.jetravail()
nv = e.NewValue
selected_ligne = manipForm.scrollit(texte, nv, max)
'Me.crsp.jetravail()
Me.scroller.Refresh()
'Me.crsp.jetravail()
Next
Call My.Application.DoEvents()
Me.crsp.jenagitplus()
Me.scroller.Refresh()
Me.scroller.Update()
End If
End Sub
**********************************************************************************
les fonctions jenagitplus et jetravail synchronise les variables iamnotworking pour que mes differents objets n'interagissent pas!

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 juil. 2010 à 00:18
Salut

"l'appli bug" Trop léger comme description

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 juil. 2010 à 07:30
pas terrible ta sub Scrollit...
alterer la selection pour faire un scroll....

sans compter que si tes lignes de texte sont longues et passent sur plusieurs lignes a l'affichage, tu va avoir des resultats completement faux...

texte.Lines

separe ton texte en un tableau, au niveau des sauts de lignes, point barre.

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
16 juil. 2010 à 11:50
Bonjour,

merci de m'avoir répondu.

je vais décrire le bug plus précisement.

Dès que je clique sur la flèche "bas" de mon scroll, cette fléche se fond dans le formulaire et le scroll ne peut plus que réduire ou grandir le formulaire entier. Ce bug se produit sur un ordi XP avec VS2008 mais pas sur un autre windows7 avec VS2010. Il n'a aucuns rapport avec le code.

Sinon pour répndre à Renfield, c'est en fait le scroll "general" auquel tous les richtext sont liés qui determine la selection de tous "ses" richtext liés (et déplace aussi les scroll des richtextbox en effet).

la fonction scrollit renvoi un entier correspondant bien à un item selectionnée (même si celui ci est affichée sur deux ou trois lignes). On peut alors le supprimer ou ...

le seul défaut se trouve ici (texte est un richtextbox)
texte.SelectionStart = texte.GetFirstCharIndexFromLine(ligneselectionnee)
cette fonction "GetFirstCharIndexFromLine" ne prend pas en compte les retours à la ligne lorsqu'elle sont trop longues. Il y a donc des charactères non pris en compte et cette fonction (qui est native de VB) renvoi un résultat faux en cas d'affichage sur deux lignes.
MAIS
si on met l'option WordWrap des richtextbox à false le surlignage et toujours juste et si le mot est trop long une horizontalsrcollbar apparait.

Ceci dit, je ne pense pas que se soit ça qui fasse buger mon "scroller" puisque lorsque celui ci calcul quelle est la ligne à surligner une variable se met à true ( la variable iamworking) et empèche les nouvelles actions. C'est soit qu'il faut installer VS2010 partout soit ... l'ordi lui même?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 juil. 2010 à 16:06
voir EM_FMTLINE

t'aidera surement a resoudre on souci.

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
16 juil. 2010 à 16:54
Merci, ça résoudra le soucis des lignes trop grande. mais ça à l'air bien difficile à maitriser.

ceci dit je pense que pour mon soucis initial il s'agit d'un probleme de surcharge pour l'ordi. le passage à vb 2010 ne changeant rien.
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
19 juil. 2010 à 10:42
Effectivement, on utilise une API user32.dll en cherchant bien on a même des exemples d'utilisation mais si au pire on veut des retours à la lignes (ou pas) je trouve quand même plus claire d'utiliser les propriétés du textbox:

exemple;
ww = texte.WordWrap
texte.WordWrap = False
selst = texte.GetFirstCharIndexFromLine(ligneselectionnee)
texte.WordWrap = ww
la selection est toujours juste!

Ceci dit je ne comprend toujours pas pourquoi la flèche scrollbar se "fond" dans le formulaire dès qu'on appui dessus sur certains ordis!
0
Rejoignez-nous