Modeste contribution. Texte qui défile dans un label

Résolu
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011 - 20 oct. 2011 à 13:33
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.

8 réponses

cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 137
20 oct. 2011 à 17:10
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 212
20 oct. 2011 à 13:41
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
20 oct. 2011 à 13:44
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)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 212
20 oct. 2011 à 13:55
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
0

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

Posez votre question
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
20 oct. 2011 à 15:12
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.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 14
20 oct. 2011 à 15:49
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+
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 212
20 oct. 2011 à 16:18
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
0
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
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.
0
Rejoignez-nous