Modeste contribution. Texte qui défile dans un label [Résolu]

Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
- - Dernière réponse : whombat
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
- 20 oct. 2011 à 21:44
Le principe est assez simple. Je dirais du niveau maternelle en programmation (mon niveau). Mais j'ai cherché, beaucoup, longtemps, sur le web et dans les forums, pour savoir et comprendre comment on pouvait facilement et de façon fluide faire défiler un texte dans un label. Des cotations boursières par exemple. => rien de concluant !

Alors voilà ma modeste contribution. Elle fonctionne aux petits oignons. Il faut une form, un label de toute la largeur (fond noir, forecolor lime) et SURTOUT, il faut que le label dépasse à droite de 4 à 5 cm du container. En effet, à l'affichage, le dernier mot, celui à droite, ne s'affiche pas lettre par lettre mais d'un coup. Pourquoi ? Je ne sais pas. J'ai tout essayé mais rien n'y a fait. Avec le label qui dépasse, c'est nickel, c'est fluide.

Lorsque les cotations sont téléchargées, il faut les mettre à la queue leu-leu dans un string (TextDesCot). Il faut prévoir aussi que le texte à afficher soit, en vitesse, suffisament rapide, mais pas trop, pour que le tableau 2 ait eu le temps de se charger en cotations et pour qu'il arrive pile à la fin du tableau 1 lorsque c'est au tour de ce dernier de se charger. C'est une question de timers, avec 1 's'. 1 Timer pour le label et 1 timer, dans le second thread, pour le téléchargement.

En espèrant que cela vous dépanne en cas de besoin...

  

Private Sub LabelDefil_Timer1(myObject As Object, ByVal myEventArgs As EventArgs) Handles Timer1.Tick

        'Drapeau à bascule pour savoir si on lit le tableau de char 1 ou le 2
        Static LeTab As Integer

        'Variable du nombre de caractères dans le label 
        Dim TailLab As Integer = 106
        'et la taille totale du texte qui défile
        Dim TailText As Long = Len(TextDesCot)

        'pour le Texte Défilant
        'compteur
        Dim i As Long
        'String qui récupère les caractères à afficher
        Dim Phrase As String = String.Empty
        'différence entre le texte QUI RESTE a afficher et la capacité du label (106)
        Dim Diff As Long = 0

        'TextDesCot a déjà été déclaré lors du telechargement des cotations
        If TextDesCot = Nothing Then
            Label_Text_Defil.Text = "Chargement des cotations en cours... Un instant, S.V.P."
            Exit Sub
        End If

        'On ne se sert que d'une fois du tableau en cours par téléchargement
        'Le second tableau, durant ce temps, sur le second thread, telecharge les
        'nouvelles cotations à jour (toutes les 15 secondes)
        'la variable NouvText est un drapeau qui est levé dès que les cotations sont neuves
        'La variable OuvreAppli est un drapeau qui est abaissé dès que la 1er tour a eu lieu
        'ce qui fait que, si OuvreAppli=0 les 2 tableaux ont le même texte
        If NouvText = 1 Then
            If LeTab = 1 Then
                TabCar2 = TextDesCot.ToCharArray
            Else
                If OuvreAppli = 0 Then
                    OuvreAppli = 1
                    TabCar2 = TextDesCot.ToCharArray
                End If
                TabCar1 = TextDesCot.ToCharArray
            End If
            If LeTab 1 Then LeTab 0 Else LeTab = 1
            NouvText = 0
        End If

        'Bip est le premier caractère, dans le texte entier, d'une chaîne qui en compte 106
        'S'il y a plus de caractères dans la chaîne à afficher que de disponibles sur l'étiquette
        'alors c'est simple, on affiche les 106 premiers
        'par exemple du 221e au 326e
        If (Bip + 105) < TabCar1.Count - 1 Then

            Phrase = Nothing
            For i = Bip To Bip + 105  '106 caractères
                Phrase = Phrase + TabCar1(i)
            Next

        Else
            'sinon on affiche les caractères restants dans le tableau à afficher et on
            'complète l'étiquette avec les nouveaux caractères du second tableau
            Phrase = Nothing
            Diff = (Bip + 105) - TailText
            For i = Bip To TailText - 1
                Phrase = Phrase + TabCar1(i)
            Next
            For i = 0 To Diff
                Phrase = Phrase + TabCar2(i)
            Next

        End If

        'et on affiche
        Me.Label_Text_Defil.Text = Phrase
        Me.Label_Text_Defil.Refresh()

        'Puis on décale le Bip d'un cran vers la droite si Bip est < que le nombre de
        'caractères à afficher
        If Bip <> TailText - 1 Then
            Bip = Bip + 1
            'sinon on remet Bip à 0
        Else
            Bip = 0
        End If

    End Sub



Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
6300
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
23 octobre 2019
87
3
Merci
Bonjour whombat,
Encore plus simple:
1 label
1 Timer réglé à 200 (à modifier)
2 boutons

 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'créez un texte défilant dans la boîte de label
        Label1.Text = Mid(Label1.Text, 2, Label1.Text.Length - 1) & Mid(Label1.Text, 1, 1)
 End Sub
    'on demarre
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = "Bonjour et Bienvenue"
        Timer1.Enabled = True
    End Sub
    'on stoppe
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Timer1.Enabled = False
    End Sub



@+Le Pivert

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Le Pivert
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Bonjour, Whmbat,

vraiment ... !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
Sympa Whombat

Le forum n'est pas l'emplacement adéquat pour proposer tes codes.
Mieux vaudrait "Ajouter un code" dans l'onglet "Codes" (menu au survol de l'onglet) de la page principale, en y plaçant un projet complet en guise d'exemple.
Tu pourras ainsi mieux partager ton travail et recueillir les commentaires, voire les notations.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Salut(, jadck,

Oui ! et après s'être assuré (comme le prévoit le règlement) que le code que l'on souhaite déposer apporte quelque-chose de nouveau.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
Je ne suis pas certain que ce soit réellement nouveau sauf qu'à beaucoup chercher je n'ai pas trouvé de solution aussi simple et adaptée aux langues comme le grec.

Si ça n'aide pas, ça ne mange pas de pain, si c'est utile à ne serait-ce qu'un débutant alors tant mieux.

Merci de votre visite et de vos commentaires. Chouette le petit drapeau ucfoutu...

Allez, faut que j'y aille. A+

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Commenter la réponse de whombat
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8
0
Merci
Salut,

sauf que dans ton dernier message tu fais fi de ce que te dit jack :

Le forum n'est pas l'emplacement adéquat pour proposer tes codes.
Mieux vaudrait "Ajouter un code" dans l'onglet "Codes" (menu au survol de l'onglet) de la page principale, en y plaçant un projet complet en guise d'exemple.
Tu pourras ainsi mieux partager ton travail et recueillir les commentaires, voire les notations.


Et vu la taille et la simplicité du code un Snippet serait même, le plus adéquat:

http://www.codyx.org/

A+
Commenter la réponse de bigfish_le vrai
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Je ne suis pas certain que ce soit réellement nouveau sauf qu'à beaucoup chercher je n'ai pas trouvé de solution aussi simple et adaptée aux langues comme le grec.

Je ne comprends pas le rapport


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
Bonjour à tous,

Je ne sais pas comment retirer ce que j'ai appelé une modeste contribution sinon je le ferais. Mais vous, qui avez peut-être accès à des ouvertures que je n'ai pas, pouvez le faire pour moi, et que cesse cette polémique qui n'a pas réellement lieu d'être.

Je ne ferais plus, plus jamais, je le jure.

Alors, bigfish_le_vrai, pour ce qui concerne les conseils de Jack... (Jack est toujours de bons conseils) Je les ai bien sûr entendus et intégrés. Mais venant d'un homme qui se veut donneur de leçon en qualité de logique (programmation) ce n'est pas brillant... JUSTEMENT, c'est parce que je savais mon code modeste, c'est parce que je ne suis pas 'supérieur et méprisant' que modestement, juste pour donner un petit coup de pouce, en catimini, je n'ai pas affiché mon astuce sur le mur des 'certitudes'.

Exact, Le Pivert. 9a marche super. J'aurais bien aimé trouver ce code de moi-même... Si on cherche "Texte qui défile" maintenant, on va pouvoir tomber sur votre astuce. Mes lignes auront au moins servi à ça.

Merci.


Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Commenter la réponse de whombat