FlatSB_GetScrollInfo + FlatSB_SetScrollInfo

Résolu
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 - 7 déc. 2009 à 15:23
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 10 déc. 2009 à 21:16
bonjour
j'ai un richtextbox avec propriété scrollbars = 3, j'utilise ce code pour ne pas bouger la scrollbar quand j'ajoute du text
le richtextbox contient 300 lignes minimum et la scrollbar est placer au milieu:

Dim SI As SCROLLINFO
    LockWindowUpdate RichTextBox1.hWnd
    'Get the scrollbar information
    SI.cbSize = Len(SI)
    SI.fMask = SIF_ALL
    FlatSB_GetScrollInfo RichTextBox1.hWnd, SB_VERT, SI
   
   RichTextBox1.SelStart = Len(Text1.Text)
   RichTextBox1.SelText = "new texte"

    'Set the new scrollbar information
    FlatSB_SetScrollInfo RichTextBox1.hWnd, SB_VERT, SI, True
LockWindowUpdate 0


l'ajout se fait le LockWindowUpdate fonctionne la scrollbar ne bouge pas mais le texte bouge
je comprend pas le problèmes quand je clic sur la scrollbar avec la souris apres l'éxécution du code le text bouge et prend la valeur de la scrollbars, je comprend pas pourquoi il prend pas la valeur de la scrollbars avant que je clic.

merci d'avance

13 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 déc. 2009 à 16:52
J'ai pas pigé le but de la chose...

empecher le redraw lorsque tu manipules le texte de ta RTB ?

je t'ai déjà dit, dans un précedent post de passer par ITextDocument

et d'appeler ses méthodes Freeze/Unfreeze



Renfield - Admin CodeS-SourceS - MVP Visual Basic
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 déc. 2009 à 15:36
parceque ton selstart a changé...
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
7 déc. 2009 à 16:27
re
oui je sais mais le probleme c'est quand je bouge manuellement la scrollbar avec la souris le texte bouge mais le selstart reste toujour le meme il change pas. y a t il un moyen de bouger le texte quand je changer la position de la scrollbars ?
merci
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 déc. 2009 à 16:39
quand je bouge manuellement la scrollbar avec la souris le texte bouge (...). y a t il un moyen de bouger le texte quand je changer la position de la scrollbars ?


beh tu y arrives d'après ce que tu dis

çà fait un an que tu traines la même question, il te faut encore combien d'années pour que tu fasses enfin l'effort de formuler correctement tes phrases.


tu nous mets un bout de code, ok.
mais on ne sait pas à quel moment tu l'appelles

et si on voulait le tester, à nous de chercher la déclarations des API etc

tu ne penses pas que "fournir tout prêt à l'usage" fait aussi partie du grand minimum d'efforts à fournir pour être lu ?

enfin, comme t'es pas pressé... tout va bien
0

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

Posez votre question
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
7 déc. 2009 à 17:02
resalut
désolé voila tout le code :


Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Private Declare Function FlatSB_GetScrollInfo Lib "comctl32" (ByVal hwnd As Long, ByVal fnBar As Long, lpsi As SCROLLINFO) As Boolean
Private Declare Function FlatSB_SetScrollInfo Lib "comctl32" (ByVal hwnd As Long, ByVal fnBar As Long, lpsi As SCROLLINFO, ByVal fRedraw As Boolean) As Long
Private Type SCROLLINFO
    cbSize As Long
    fMask As Long
    nMin As Long
    nMax As Long
    nPage As Long
    nPos As Long
    nTrackPos As Long
End Type

Private Sub addtotext(msg)
Dim SI As SCROLLINFO
    LockWindowUpdate RichTextBox1.hwnd
    'Get the scrollbar information
    SI.cbSize = Len(SI)
    SI.fMask = SIF_ALL
    FlatSB_GetScrollInfo RichTextBox1.hwnd, SB_VERT, SI
 
   RichTextBox1.SelStart = Len(RichTextBox1.text)
   RichTextBox1.SelText = msg & vbCrLf

    'Set the new scrollbar information
    FlatSB_SetScrollInfo RichTextBox1.hwnd, SB_VERT, SI, True

LockWindowUpdate 0
End Sub

Private Sub Timer1_Timer()
addtotext Timer
End Sub



sa ajoute du texte aléatoirement toute les 100ms avec le timer le problème c'est quand on bouge la scrollbar durant l'ajout elle va se mettre en position maximale.
voila c'est vrais mr PCPT que sa fait des mois que je cherche la solution et que j'essaie des codes et des codes mais sa signifie aussi que j'ai pas trouvé la réponse.
merci encore
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 déc. 2009 à 17:11
SIF_ALL?
SB_VERT?

a fait des mois que je cherche la solution et que j'essaie des codes et des codes


alors où se trouve celui que je t'ai indiqué ici :
http://www.vbfrance.com/forum/sujet-SCROLLBAR-RICHTEXTBOX_1316738.aspx
http://www.vbfrance.com/forum/sujet-RICHTEXTBOX_1359438.aspx
etc...


[hr]
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
7 déc. 2009 à 17:29
dans les 2 sujets j'ai pas trouvé la solution à ce que je cherche sinon je poserais pas la même question

si tu peut vraiment m'aider à le faire sa sera génial au lieu de m'engueuler a chaque fois que je repose la question
a tu déja tester un code et qu'il fonctionne ? parce que j'ai tout tester et j'arrive pas à faire ce que je veux voila.

je vous redonne un petit exemple très proche de ce que je cherche :

dans une conversation msn quand tu parle avec quelqu'un la scrollbar quand elle s'affiche elle se met directement à la position maximum mais quand tu la bouge manuellement pour voir des message précèdent et que tu reçoit au même temps des message la scrollbar ne bouge plus sauf si tu la remet à sa la position maximale.

merci
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 déc. 2009 à 18:38
si tu as tout testé, stp montre le code que tu as fait quand je t'avais conseillé il y a quelques mois d'utiliser une richtextbox SANS scrollbar, avec une scrollbar verticale séparée

je te donnerai un coup de main à partir de ce code

ps : je ne t'engueule pas, regarde encore les liens indiqués, tu as parfois mis plus de 4 mois à donner suite et c'est toujours pour dire "presque rien" et sans jamais montrer de code. perte de temps pour tout le monde, ce que tu prends pour une engueulade est juste une gentille démonstration d'usure...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 déc. 2009 à 21:16
perso, je t'ai indiqué une voie pour mieux exploiter la rtb

permet de modifier le contenu efficacement, sans changer le Selstart, etc.

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
8 déc. 2009 à 15:24
bonjour

Private Sub Command1_Click()
If Timer1.Enabled True Then Timer1.Enabled False Else Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Dim txt As String
txt = "salut #c'est un message de &test " & vbCrLf
addtexttortb RichTextBox1, txt
End Sub
Private Function addtexttortb(rtb As RichTextBox, txt As String)
Dim spl As String, i As Long
rtb.SelStart = Len(rtb.text)
rtb.SelLength = Len(rtb.text)
rtb.SelColor = vbBlack
For i = 1 To Len(txt)
spl = Mid(txt, i, 1)
Select Case spl
Case "#"
rtb.SelStart = Len(rtb.text)
rtb.SelLength = Len(txt)
rtb.SelColor = vbRed
Case "&"
rtb.SelStart = Len(rtb.text)
rtb.SelLength = Len(txt)
rtb.SelColor = vbBlue
Case Else
rtb.SelStart = Len(rtb.text)
rtb.SelLength = Len(txt)
rtb.SelText = spl
End Select
Next
End Function



voila c'est à peut prêt comme mon code
aussi une petite question: en utilisant lockwindowupdate sa fait actualiser le bureau a chaque fois c'est normal ?
merci encore
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
10 déc. 2009 à 18:08
merci pcpt pour votre aide et désolé pour le dérangement
merci renfield pour ce précieux code
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 déc. 2009 à 19:10
ah enfin ce sujet est résolu?
vraiment?
nous n'auront plus la grande joie de relire encore et encore cette unique question

gardons une trace de ce périple tout de même
(à lire sur l'intonation de "un morceau de tissu? qu'est-ce que c'est?" à la "la cité de la peur")

question ouverte il y a 9 mois sous ce compte (*), plus d'une quizaine de posts firent leur apparition pour encore et toujours demander la même chose,
tous sans que jamais l'auteur (*) ne prenne le soin de tester les réponses proposées,
tous sans jamais une question clairement formulée,
tous adressés à "tous les lecteurs" mais au final uniquement adressés au(x) seul(s) téméraires ayant suivi l'historique...
(je fais l'impasse sur les MP qui viennent s'ajouter à tout çà...)

(*) après quelques "mais euh j'suis gentil c'est pas moi l'autre" (comme quoi on laisse quand même le droit à la parole n'est-ce pas) clamant la gentillesse et l'innocence, qu'est-ce qu'on remarque?
beh que le fameux real_achills (qui n'est pas toi donc...) pose la même question? (http://www.developpez.net/forums/d814961/autres-langages/general-visual-basic-6-vbscript/vb-6-anterieur/vbp-p-richtextbox-p-scrolbar)

tout aussi amusant, que le seul code que tu nous aies montré (va savoir s'il a même été testé), indiqué ci-dessus (premier message sur cette page), même rien que çà, il n'est pas de toi
(donné par un des modérateurs, lien ci-dessus, page 3)


la conclusion est que le seul moyen qu'enfin ce sujet soit résolu depuis au moins 9 mois (*), c'est que tu aies eu la solution purement tout cuit...


pour ton courage, standing ovation

ps : n'oublie pas de remercier aussi ici (http://www.generation-nt.com/richtextbox-plus-scrollbar-entraide-3646461.html), tant de monde mis à contribution, c'est bien la moindre des choses non?

pss : c'est fou comme 3 secondes de recherches peuvent apporter des réponses... parmi elles en tapant juste "richtextbox scrollbar", plusieurs articles donnaient aussi la réponse à ton problème, dont par le ITextDocument proposé ici


désolé pour ce petit écart (rien de bien méchant), c'est pourtant pas mon genre mais grâce à çà je suis certain que tu comprendras mieux pourquoi tu perçois parfois un ton un peu sec dans les réponses que la folie me force à continuer de tenter de t'apporter...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 déc. 2009 à 21:16
clair que ca dure. MP envoyé en Aout :


Message envoyé à Claiyah le 11/08/2009 22:32:27 (Ajouter dans votre carnet d'adresses)

Sujet : couleur RTB

Message :

oui, bien sur...

Dim oRichEdit As IRichEditOle
Dim oTextDocument As ITextDocument

SendMessage .hWnd, EM_GETOLEINTERFACE, 0, oRichEdit
If Not Nothing Is oRichEdit Then
Set oTextDocument = oRichEdit

oTextDocument.Range(0, Len(.Text)).Font.ForeColor = vbBlack

....

après, tu peux couper les evenements change, invoquer un freeze...
jouer avec le "SelBackColor", etc.

je joue avec depuis une semaine, ca tourne nikel.


te suffit de prendre l'Olelib ici:
http://www.mvps.org/emorcillo/en/code/vb6/index.shtml


pile poil ce que me source démontre :p

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Rejoignez-nous