Défilement de texte dans un label [Résolu]

SnapFAB 61 Messages postés samedi 10 novembre 2007Date d'inscription 5 mars 2011 Dernière intervention - 30 juil. 2008 à 00:45 - Dernière réponse : SnapFAB 61 Messages postés samedi 10 novembre 2007Date d'inscription 5 mars 2011 Dernière intervention
- 30 juil. 2008 à 23:42
Bonsoir tout le monde,

J'ai fait plusieurs recherche sur le site afin de trouver comment faire défiler du texte dans un label.
J'ai télécharger plusieurs projet présent sur le site, certains avec plus de 50 lignes de programmation juste pour faire défiler du texte horizontalement de la droite vers la gauche dans un label.

Finalement je suis tomber sur un programme de lecteur MP3 intéressant, surtout pour le défilement du texte qui ne tient qu'en une seule ligne ...

Mais voici mon problème, le texte défile très bien, disparaît très bien à gauche du label mais par contre il réapparait mot entier par mot entier du coté droit ce qui fait saccader surtout quand il y a des longs mots à faire défiler.

Voici cette ligne de commande qui est placé dans un timer :

Label_Titre.Caption = Mid(Label_Titre.Caption, 2) & Mid(Label_Titre.Caption, 1, 1)

Ma question, est-il possible de faire défiler mon texte lettre par lettre de la droite vers la gauche à la place de mot par mot ?

Merci beaucoup, bonne journée ;-)
Afficher la suite 

16 réponses

Répondre au sujet
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 30 juil. 2008 à 00:59
+3
Utile
..container (Picturebox ou Frame)

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de LIBRE_MAX
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 30 juil. 2008 à 02:02
+3
Utile
Bonsoir Kevin,
très juste ! j' ai pas retenu le détail du sens du défilement.
Maintenant il a deux au prix d' un
Et comme Bonus, un exemple sans container.

Option Explicit
Dim IniCaption As String
Const Plus = 100
Private Sub Form_Load()
  ' sauver le contenu
   IniCaption = Label1.Caption
  
  'initialiser
   Label.AutoSize=False
   Label1.Caption = Space(Plus) & Label1.Caption
End Sub


Private Sub Timer1_Timer()
 'retirer un caractère à chaque passage.
 Label1.Caption = Mid(Label1.Caption, 2, Len(Label1.Caption))
 If Label1.Caption = "" Then _
 Label1.Caption = Space(Plus) & IniCaption


End Sub

'Plus est le nombre d' espace nécéssaire pour faire décaler le contenu du label vers la  droite.
A ajuster donc.





<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de LIBRE_MAX
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 30 juil. 2008 à 21:06
+3
Utile
deux choses l' une (peut être même les deux )

ta variable Pas est bien déclarée ?
ton Timer est bien en marche ?

Écartant le doute:

Private Sub Form_Load()
  'laisses ton label bien au centre
  Timer1.Interval=1
  Timer1.Enabled=True

End Sub

Private Sub Timer1_Timer()
 Label1.Left = Label1.Left -10
    If Label1.Left = 0 Then _
        Label1.Left = 900
End Sub

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de LIBRE_MAX
bonjourcheval 228 Messages postés mercredi 13 décembre 2000Date d'inscription 8 août 2011 Dernière intervention - 30 juil. 2008 à 21:09
+3
Utile
option explicit



*Message subliminal*

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)

Je brise la règle 1 et 2. Je
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de bonjourcheval
Kevin.Ory 843 Messages postés mercredi 22 octobre 2003Date d'inscription 7 janvier 2009 Dernière intervention - 30 juil. 2008 à 01:19
+2
Utile
Salut,

J'allait dire la même chose que LIBRE_MAX, mais il a fait une petit erreur, son texte défile de gauche à droite, c'est à dire qu'il commence à la fin..
Donc plutôt:

Label.Left = Picture.Width
Pas = -1

Sub Timer_Tick()
    Label.Left = Label.Left + Pas
    If Label.Left <= -Label.Width Then _
        Label.Left = Picture.Width
End Sub

Fixe l'interval du timer à 40 au maximum (pour avoir un mouvement fluide) et joue avec la valeur du pas pour changer la vitesse de défilement.
Commenter la réponse de Kevin.Ory
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 30 juil. 2008 à 00:58
+1
Utile
Bonsoir,
Places ton label dans un container (picturebox ou label)
et fait jouer sa propriété Left.


Au début
Label.AutoSize=True
Label.Left=-Label.Width
Pas=10


 Sub Timer()
  Label.Left=Label.Left+Pas
  If Label.Left>=Picture.Width Then _
      Label.Left=-Label.Width
 End Sub





<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
Commenter la réponse de LIBRE_MAX
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 30 juil. 2008 à 19:41
+1
Utile
fais ceci et regardes s' il bouges déjà:

Private Sub Form_Load()
' ceci te permet de voir ton label
  Label1.Left = Picture1.Width -Label1.Width
  'accèlères un peu le pas
   Pas = -10
End Sub

Private Sub Timer1_Timer()
 Label1.Left = Label1.Left + Pas
    If Label1.Left <= -Label1.Width Then _
        Label1.Left = Picture1.Width
End Sub

si ça marches pas, sors ton pc prendre l' air.
Il est sûrement surmené
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
Commenter la réponse de LIBRE_MAX
SnapFAB 61 Messages postés samedi 10 novembre 2007Date d'inscription 5 mars 2011 Dernière intervention - 30 juil. 2008 à 19:25
0
Utile
Bonsoir Kevin et Max !

J'ai tester vos codes mais aucun des 2 ne fonctionnent chez moi, bon faut dire aussi que je suis une sacrée buse sous VB.
Voici le code que j'ai mis avec une picturebox nommé Picture1 et à l'intérieur un label nommé label1 (j'ai tester avec une frame à la place de la picturebox mais pareil) :

Private Sub Form_Load()
Label1.Left = Picture1.Width
Pas = -1

End Sub

Private Sub Timer1_Timer()
 Label1.Left = Label1.Left + Pas
    If Label1.Left <= -Label1.Width Then _
        Label1.Left = Picture1.Width
End Sub

J'ai mis l'interval du timer à 40, mais rien ne se passe, je ne vois même pas mon texte.

++, mais merci quand même, et si vous avez une solution je suis preneur
Commenter la réponse de SnapFAB
SnapFAB 61 Messages postés samedi 10 novembre 2007Date d'inscription 5 mars 2011 Dernière intervention - 30 juil. 2008 à 20:47
0
Utile
Tu vas peut être pas me croire mais ça bouge pas du tout ...

A la rigueur si j'agrandis ma picturebox par rapport à mon label, le texte est juste déplacé à l'extrême droite de ma picturebox, mais aucun mouvement en vue ...

Je vais faire prendre l'air à mon pc de suite
Commenter la réponse de SnapFAB
SnapFAB 61 Messages postés samedi 10 novembre 2007Date d'inscription 5 mars 2011 Dernière intervention - 30 juil. 2008 à 21:42
0
Utile
Oups, merci Cheval....

hem hem, euh désolé Max de t'avoir fait perdre de ton temps à cause d'une petite option qui avait oublier d'être explicite ...

Merci beaucoup Max en tout cas, bien évidement ça marche impeccable ...

Bonne soirée tout le monde
Commenter la réponse de SnapFAB
SnapFAB 61 Messages postés samedi 10 novembre 2007Date d'inscription 5 mars 2011 Dernière intervention - 30 juil. 2008 à 22:05
0
Utile
Hello, c'est encore moi

J'ai encore un petit soucis, mon texte défile nickel maintenant, mais le problème c'est que ma police est assez grande (de taille 24) et lors du défilement sa scintille vraiment beaucoup. Peut on remédier à ce scintillement ?
Commenter la réponse de SnapFAB
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 30 juil. 2008 à 22:39
0
Utile
Alors là , tu nous poses vraiment une colle
Avec DrawText peut être, mais ça marche qu' avec des controls qui ont un Hwnd , je crois.
Il faudra donc troquer ton label contre un TextBox ou PictureBox.

Fais une recherche à ce sujet.
Désolé, je n' ai pas de code à ce proposer.

Bonne continuation.

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
Commenter la réponse de LIBRE_MAX
SnapFAB 61 Messages postés samedi 10 novembre 2007Date d'inscription 5 mars 2011 Dernière intervention - 30 juil. 2008 à 22:42
0
Utile
Ok, merci Max, je vais faire des recherches ...

Bonne soirée et bonne nuit
Commenter la réponse de SnapFAB
Kevin.Ory 843 Messages postés mercredi 22 octobre 2003Date d'inscription 7 janvier 2009 Dernière intervention - 30 juil. 2008 à 22:52
0
Utile
Perso je saurais te répondre pour du .NET, mais pour VB6 aucune idée
Commenter la réponse de Kevin.Ory
SnapFAB 61 Messages postés samedi 10 novembre 2007Date d'inscription 5 mars 2011 Dernière intervention - 30 juil. 2008 à 23:18
0
Utile
Avec un textbox ça ne saccade plus, malheureusement il n'y a pas de fonction autosize sur les textbox

donc si on veut faire défiler du texte à longueur aléatoire ça pose soucis, par contre si le texte est toujours de la même longueur sa passe bien... il me reste plus qu'à trouver une bidouille pour du texte aléatoire...
Commenter la réponse de SnapFAB
SnapFAB 61 Messages postés samedi 10 novembre 2007Date d'inscription 5 mars 2011 Dernière intervention - 30 juil. 2008 à 23:42
0
Utile
Pour clôturer ce débat, pour une fois c'est moi qui apporte une bonne nouvelle
C'est très simple comme solution mais ça marche.

Soit un label caché nommé "Label1(0)" en Autosize et un textbox nommé "Text1" (les deux avec police et taille identique)

Label1(0).Caption = "SOURCE D'OU PROVIENT LE TEXTE A DIFFUSER" & "     * * *      "

Text1.Width = Label1(0).Width
Text1 = Label1(0).Caption

Mettre le pas à -20 et l'intervalle du timer à 1

Aucune saccade garanti ;-)

Allez, je vais pouvoir me coucher heureux et passer une bonne nuit, merci à tous pour votre aide

++
Commenter la réponse de SnapFAB

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.