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
2904
Date d'inscription
samedi 11 janvier 2014
Statut
Non membre
Dernière intervention
13 août 2022
- 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
17657
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
13 août 2022
612
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
235
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
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
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
235 > cs_ShayW
Messages postés
3258
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
235
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
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
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
2904
Date d'inscription
samedi 11 janvier 2014
Statut
Non membre
Dernière intervention
13 août 2022
154
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