Defilement automatique du contenu RichTextBox

Signaler
Messages postés
3
Date d'inscription
lundi 6 avril 2015
Statut
Membre
Dernière intervention
15 mai 2015
-
Messages postés
2377
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
28 février 2021
-
Bonjour, je voudrai faire défiler le contenu d'un Richtextbox ,genre prompteur de télévision. l'idée faire dérouler une partition de musique avec un réglage de vitesse du scrolling vertical .Si quelqu'un a une astuce pour gérer l'ascenseur....
Mes essais de boucles et de timer ne sont pas concluant .Merci par avance.

7 réponses

Messages postés
15640
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 mars 2021
516
Bonjour quem VB?
VBA, VBS, VB6, VB.Net?

Vb studio 2010. Désolé je maîtrise pas encore tout.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour,
Je ne vais pas te parler de code (je ne connais d'ailleurs même pas VB.Net), mais d'une astuce simple, qui va te permettre d'éviter des calculs fastidieux. On ne va même pas toucher à l' "ascenseur".
Tu mets ta richttextbox (avec sa dimension maximum) dans un conteneur (un panel, je crois, sous VB.Net) plus petit (à la dimension de ton choix ===>> tu ne verra de la richtextbox que la partie ne débordant pas, n'est-ce-pas ?
Te reste ensuite à faire modifier sa propriété Top par un Timer, à la cadence de ton choix. En lui donnant des valeurs négatives de plus en plus importantes, elle remontera très naturellement vers le haut, semblant donc dérouler de haut en bas.
Très simple, non ?
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour Astucieux

en gros

Private Sub Form2_Load(sender As Object, e As System.EventArgs) Handles Me.Load
rtb.LoadFile(Application.StartupPath & "\auxfile\partition.rtf")
rtb.Width = 700
rtb.Height = 600
Panel1.Width = rtb.Width
Panel1.Height = rtb.Height
Panel1.Location = New Point(0, 0)
rtb.Location = New Point(0, 0)
play.Location = New Point(20, Panel1.Bottom + 10)
End Sub

Private Sub Timerscroll_Tick(sender As Object, e As System.EventArgs) Handles Timerscroll.Tick
rtb.Top -= 1
If rtb.Bottom <= 0 Then
DirectCast(sender, Timer).Stop()
End If
End Sub

Private Sub play_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles play.MouseClick
Timerscroll.Interval = 100
Timerscroll.Start()
End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234 >
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019

Bonjour, Cs_ShayW,
Panel1.Height = rtb.Height ===>> pourquoi ? Mettre au contraire le panel beaucoup plus petit que le rtb.
Et arrêter le déroulement lorsque le rtb.bottom = le panel.height
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
voilà un exemple très bâclé en VB6, sur un form en échelle de pixels :

Private Sub Form_Load()
For i = 1 To 50
rtb.Text = rtb.Text & vbCrLf & "vvvvv" & i
Next
With panel
.Width = 100
.Height = 50
.BorderStyle = 0
End With
rtb.Move 0, 0, 1000, 10000
With Timer1
.Interval = 1000
.Enabled = True
End With
End Sub

Private Sub Timer1_Timer()
rtb.Top = rtb.Top - 100
End Sub


A ajuster (les dimensions), compléter (l'arrêt) et transposer en vb.net
Sous VB6, pour ne pas bâcler, je calculerais la hauteur exacte nécessaire de la rtb (utilisation de textheight), etc ...et tout serait de la plus grande précision
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
au début j'avais mis la hauteur du panel beaucoup plus petit
donc quand on lance on voit toujours une parti du rtb qui défile vers le haut
mais après j'ai mis la même hauteur de façon à voir tout le rtb
Messages postés
3
Date d'inscription
lundi 6 avril 2015
Statut
Membre
Dernière intervention
15 mai 2015

Merci a tous pour votre aide,je vais tester tous cela pour voir ce qui colle le mieux a mon idée.A savoir que je ne pas programmeur pro,mais je "Bricole" un peu lorsque j'ai 5 minutes pour moi.Mon expérience est un peu de vb6,Je me suis remis a la prog,car je ne trouvais pas de solution pour afficher mes partions en mode zoom sur un ordi portable.En vieillissant la vue baisse...Baisse...

Merci encore pour votre aide que j'apprécie grandement.
Messages postés
3
Date d'inscription
lundi 6 avril 2015
Statut
Membre
Dernière intervention
15 mai 2015

Merci a ucfoutu et à cs_ShayW pour votre aide,j'ai un peu adapté le code proposé pour qu'il fonctionne sous vb 2010 Express.C'est bon ça marche,mon prompteur fonctionne correctement,je fait même varier la vitesse et la taille de la police.Une question cependant,je n'arrive pas à appeler une commande dans un bouton.click via l'instruction CALL situer Ailleur
Messages postés
2377
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
28 février 2021
124
salut !thierry-phiippe87
Pour ton problème de bouton.click fais ainsi
Voici un exemple avec un bouton Acceptertirage

A l'origine
Private Sub Acceptertirage_Click(sender As Object, e As EventArgs) Handles Acceptertirage.Click

Acceptertirage.Visible = False
ListViewcoups.VirtualListSize = 0
RemoveHandler ListViewcoups.RetrieveVirtualItem, AddressOf OnRetriveVirtualItem
ListViewcoups.Items.Clear()
Labelcoups.Text = ""
Labelmotjoue.Text = ""
End sub


ensuite tu modifies
Private Sub Acceptertirage_Click(sender As Object, e As EventArgs) Handles Acceptertirage.Click

Subacceptertirage()

End sub

Private sub Subacceptertirage()

Acceptertirage.Visible = False
ListViewcoups.VirtualListSize = 0
RemoveHandler ListViewcoups.RetrieveVirtualItem, AddressOf OnRetriveVirtualItem
ListViewcoups.Items.Clear()
Labelcoups.Text = ""
Labelmotjoue.Text = ""
End sub


Ainsi tu peux appeler ailleurs la Sub que fait le bouton