FlatSB_GetScrollInfo + FlatSB_SetScrollInfo [Résolu]

Claiyah 580 Messages postés mercredi 20 août 2008Date d'inscription 20 avril 2010 Dernière intervention - 7 déc. 2009 à 15:23 - Dernière réponse : Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention
- 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
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 7 déc. 2009 à 16:52
3
Merci
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

Merci Renfield 3

codes-sources a aidé 80 internautes ce mois-ci

Commenter la réponse de Renfield
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 7 déc. 2009 à 15:36
0
Merci
parceque ton selstart a changé...
Commenter la réponse de PCPT
Claiyah 580 Messages postés mercredi 20 août 2008Date d'inscription 20 avril 2010 Dernière intervention - 7 déc. 2009 à 16:27
0
Merci
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
Commenter la réponse de Claiyah
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 7 déc. 2009 à 16:39
0
Merci
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
Commenter la réponse de PCPT
Claiyah 580 Messages postés mercredi 20 août 2008Date d'inscription 20 avril 2010 Dernière intervention - 7 déc. 2009 à 17:02
0
Merci
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
Commenter la réponse de Claiyah
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 7 déc. 2009 à 17:11
0
Merci
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]
Commenter la réponse de PCPT
Claiyah 580 Messages postés mercredi 20 août 2008Date d'inscription 20 avril 2010 Dernière intervention - 7 déc. 2009 à 17:29
0
Merci
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
Commenter la réponse de Claiyah
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 7 déc. 2009 à 18:38
0
Merci
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...
Commenter la réponse de PCPT
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 7 déc. 2009 à 21:16
0
Merci
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
Commenter la réponse de Renfield
Claiyah 580 Messages postés mercredi 20 août 2008Date d'inscription 20 avril 2010 Dernière intervention - 8 déc. 2009 à 15:24
0
Merci
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
Commenter la réponse de Claiyah
Claiyah 580 Messages postés mercredi 20 août 2008Date d'inscription 20 avril 2010 Dernière intervention - 10 déc. 2009 à 18:08
0
Merci
merci pcpt pour votre aide et désolé pour le dérangement
merci renfield pour ce précieux code
Commenter la réponse de Claiyah
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 10 déc. 2009 à 19:10
0
Merci
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...
Commenter la réponse de PCPT
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 10 déc. 2009 à 21:16
0
Merci
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
Commenter la réponse de Renfield

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.