Scrolling dans une Picturebox (affichage via Print)

gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011 - 23 oct. 2006 à 16:56
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 24 oct. 2006 à 12:20
Bonjour, j'ai un code de programme permettant de faire du karaoké.
Le texte de celui-ci s'affiche via un timer (4 lignes s'affichent simultanément).
Une fois que la ligne est lue, on déplace tout d'un cran vers le haut dans un sorte de scrolling qui n'en est pas un.

C'est justement ce que j'aimerais corriger, comment intégrer un effet scrolling plus fluide à ce type de code ?
Merci pour toute aide (je suis débutant, donc si vous avez une idée, il faut me le détailler un peu ...)

Private Sub Timer1_Timer()
   
    On Error Resume Next
    Dim DeltaTime As Double    If Xini 0 Then Xini 1
   
    DoEvents
    s = (dmPerf.GetMasterTempo * 1000) - BPM
    DeltaTime = (((dmState.GetSeek / 768000) * ppqn) - s)
    If Xini + 1 <= UBound(Lyr) Then
        If DeltaTime >= Lyr(Xini).TempoTotal Then
        Xini = Xini + 1
        End If
           
            Picturebox1.Cls


            Picturebox1.CurrentX = 5
            Picturebox1.CurrentY = 10
            Picturebox1.Print Phrase(Lyr(Xini).FraseIndex - 1)


            Picturebox1.CurrentX = 5
            Picturebox1.CurrentY = 20
            Picturebox1.Print Phrase(Lyr(Xini).FraseIndex)


            Picturebox1.CurrentX = 5
            Picturebox1.CurrentY = 30
            Picturebox1.Print Phrase(Lyr(Xini).FraseIndex + 1)


            Picturebox1.CurrentX = 5
            Picturebox1.CurrentY = 40
            Picturebox1.Print Phrase(Lyr(Xini).FraseIndex + 2)
           
            DoEvents
        End If
End Sub


 

4 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
23 oct. 2006 à 19:56
Mets la totalité de ton texte dans la pictureBox

Mets ta picturebox dans un Frame et fais dérouler ta picturebox avec ton timer.

Tu peux donner à la propriété Top de ta pictureBox des valeurs négatives


Pour la valeur du déroulement, utilise la méthode textheight (aide en ligne avec exemple clair)

Je te signale que tu peux utiliser directement une textbox, en appliquant le même principe.

Reviens-nous avec un début de tentative de code...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
23 oct. 2006 à 20:07
inspire-toi de ceci :
Sur ta form : un cadre Frame1 et dans ton cadre Frame1 : une textBox Text1 tontenant du texte dont les lignes sont séparées par des vbcrlf (Retours Charriot)
Un timer Timer1

Code :

Private hauttexte


Private Sub Form_Activate()
  Frame1.BorderStyle = 0
  FontSize = Text1.FontSize
  hauttexte = TextHeight("aaaaaa")
  With Timer1
    .Enabled = True
    .Interval = 1000
  End With
End Sub


Private Sub Timer1_Timer()
 Text1.Top = Text1.Top - hauttexte
End Sub
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
24 oct. 2006 à 10:05
Bonjour [auteurdetail.aspx?ID=615490 jmfmarques]
et merci !

Alors j'avoue être complètement largué... Je suis du côté
dubutant-bidouilleur, et j'ai l'impression (peut-être à tort) que
l'exemple que tu donnes n'est pas applicable au code que j'ai et que je
souhaite conserver (avec les Print).


Si tu pouvais me donner un amorçe de code qui inclurait mon Timer1, ce serait génial...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 oct. 2006 à 12:20
Je crois que tu charries un peu, là !...
Mais bon !...
Mets une picturebox dans le Frame (à la place de la Textbox)
joute (en dehors du Frame, un bouton de commande command1

Code :

Private hauttexte
Private auclair As String
Const taillefont = 12


Private Sub Command1_Click()
 Timer1.Enabled = True
End Sub


Private Sub Form_Activate()


  Frame1.BorderStyle = 0
  Font = taillefont
  hauttexte = TextHeight("aaalaaa")
  Frame1.Height = hauttexte * 4
  Picture1.ScaleMode = 3
  Picture1.BorderStyle = 0
  Picture1.BackColor = Frame1.BackColor
  With Timer1
    .Enabled = False
    .Interval = 1000
  End With
  auclair = "au clair de la lune" & vbCrLf & "mon ami Pierrot" & vbCrLf
  auclair = auclair & "Prête-moi ta plume" & vbCrLf & "pour écrire un mot" & vbCrLf
  auclair = auclair & "Au clair de la lune" & vbCrLf & "Pierrot répondit" & vbCrLf
  auclair = auclair & "Je n'ai pas de plume" & vbCrLf & "Je suis dans mon lit" & vbCrLf
  chanson auclair
End Sub


Private Sub Timer1_Timer()
 Picture1.Top = Picture1.Top - (hauttexte)
End Sub


Private Sub chanson(texte)
 Picture1.Move 0, 0, Frame1.Width, TextHeight(texte)
 Picture1.FontSize = taillefont
 Picture1.Cls
 Picture1.AutoRedraw = True
 Picture1.CurrentX = 0
 Picture1.Print texte & vbCrLf
End Sub

Et ajuste comme tu l'entends (ou, si tu ne comprends toujours pas ce mécanisme : laisse tomber).
Amitiés
0
Rejoignez-nous