Defilement automatique du contenu RichTextBox

thierry-philippe87 Messages postés 3 Date d'inscription lundi 6 avril 2015 Statut Membre Dernière intervention 15 mai 2015 - 6 avril 2015 à 13:21
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 15 mai 2015 à 18:41
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

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
6 avril 2015 à 13:48
Bonjour quem VB?
VBA, VBS, VB6, VB.Net?
1
thierry-Philippe 87
6 avril 2015 à 22:04
Vb studio 2010. Désolé je maîtrise pas encore tout.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2015 à 23:20
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 ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 avril 2015 à 00:44
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211 > cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019
Modifié par ucfoutu le 7/04/2015 à 07:01
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 7/04/2015 à 07:44
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 avril 2015 à 09:49
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
0

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

Posez votre question
thierry-philippe87 Messages postés 3 Date d'inscription lundi 6 avril 2015 Statut Membre Dernière intervention 15 mai 2015
7 avril 2015 à 19:36
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.
0
thierry-philippe87 Messages postés 3 Date d'inscription lundi 6 avril 2015 Statut Membre Dernière intervention 15 mai 2015
15 mai 2015 à 15:33
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
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
15 mai 2015 à 18:41
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
0
Rejoignez-nous