IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Message de type téléscripteur


Sujet :

Silverlight

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut Message de type téléscripteur
    Bonjour,

    Je voudrais pouvoir faire défiler un texte en haut d'une page, un peu à la façon d'un téléscripteur. Le texte est variable et provient d'une base de données.

    Si je veux diffuser le mot "Bonjour" , ma zone d'affichage diffusera successivement:

    ______B
    _____Bo
    ____Bon
    ___Bonj
    __Bonjo
    _Bonjou
    Bonjour
    onjour_

    ....
    Je me vois bien utiliser le DispatcherTimer et commencer un truc bien compliqué mais je suppose qu'il doit exister un moyen plus simple...

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Bonjour,

    Est-ce un scrolling pixel par pixel ou caractère par caractère ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Ce serait plutôt pixel par pixel car sinon l'effet serait trop saccadé.

    L'avantage serait de pouvoir faire passer un message en continu dans une zone qui n'afficherait que quelques mots à la fois. Par exemple pour avertir les utilisateurs qu'une maintenance aura lieu à telle ou telle heure.

  4. #4
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Il y a plusieur façon de faire ce genre de chose. Mais sache que si tu veux un control vraiment dynamique, il va falloir se lancer dans des calculs via des ActualWidth et que cela ne sera pas si simple qu'il n'y parait.

    Si tu n'es pas très regardant, tu pourrais faire qqchose comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <Border Width="300">
       <!-- Clipping -->
       <Border.Clip>
            <RectangleGeometry Rect="0,0,300,100"/>
       </Border.Clip>
    <TextBlock x:Name="MonText" Text="Mon Text 123 1231 213 131 321 321 3123 213 21">
      <TextBlock.RenderTransform>
           <TranslateTransform X="300" />
      </TextBlock.RenderTransform>
    </TextBlock>
    </Border>
    Ensuite un petit Storyboard peut animer l'ensemble en faisant varier le X du translateTransform jusqu'a ce qu'il atteigne la valeur -MonText.ActualWidth + 300

    Il est clair que cette méthode est loin d'être la meilleur car elle ne peut pas gérer des messages de taille importante.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Merci pour ton intérêt pour ce problème.
    Je teste sous peu et je te reviens.

    Je pensais vraiment qu'avec tout ce qu'on voit, ça aurait été plus facile...

    A propos, il fut un temps ou tu présentais un contrôle qui se retourne, as-tu encore un lien vers ce sujet ?

  6. #6
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    A propos, il fut un temps ou tu présentais un contrôle qui se retourne, as-tu encore un lien vers ce sujet ?
    c'est ici

    http://blog.naviso.fr/wordpress/?p=102

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Merci, c'est super pour amener un peu d'originalité dans une page

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Je reviens sur ce sujet car je vois plein de site (la plupart du temps flash) qui proposent du texte qui défile. Souvent, même, il y a possibilité de cliquer sur des hyperlinks dans le texte qui défile.

    Je me dis donc que je (ou "on") passe à côté de quelque chose...

  9. #9
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    As-tu essayé la méthode que je te suggère au début de la discution ?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut
    Je comprends pas ou est le problème avec translate transform, j'avais déjà essayé à mes débuts avec silverlight pour le fun, et sa fonctionne très bien

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Oui, c'est une bonne base mais je ne comprend pas totalement le fonctionnement.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     <Border x:Name="tele" Width="300" Margin="120,28,120,0" Height="28" VerticalAlignment="Top">
                            <!-- Clipping -->
                            <Border.Clip>
                                <RectangleGeometry Rect="0,0,300,100"/>
                            </Border.Clip>
                            <TextBlock x:Name="MonText" Text="Bonjour les petits amis, j'espère que vou vous amusez bien ...." RenderTransformOrigin="0.5,0.5">
      <TextBlock.RenderTransform>
                            		<CompositeTransform TranslateX="300"/>
                            	</TextBlock.RenderTransform>
                            </TextBlock>
                        </Border>
    Et voici le storyboard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <Storyboard x:Name="telescripteur">
            	<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="MonText">
            		<EasingDoubleKeyFrame KeyTime="0" Value="300"/>
            		<EasingDoubleKeyFrame KeyTime="0:0:15" Value="-300"/>
            	</DoubleAnimationUsingKeyFrames>
     
            </Storyboard>
    Il y a 3 éléments, le border, le border clip et le textBlock.
    La totalité de mon texte n'apparaissait pas, (la fin était rognée). J'ai donc essayé de changer le "width" du textBlock (pour le mettre à 450) mais ça ne change rien. En fait il faut changer le width du border (à 450) tout en laissant le width du border.clip à 300.

    Donc, on va dire que ça fonctionne presque comme je voudrais...

    Il reste encore que je voudrais que le texte réapparaisse sur la droite avant que le storyboard ne soit terminé et que donc le texte n'ait complétement disparu sur la gauche... (peut-être en créant un deuxième textBlock avec un storyboard décalé ?)

    Et puis je voudrais que les dimensions du Border soient variables en fonction du texte que je désire afficher (par exemple un avis de maintenance ou de changement de version..)

    Mais je touche au but et merci à vous pour votre aide.

  12. #12
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Il reste encore que je voudrais que le texte réapparaisse sur la droite avant que le storyboard ne soit terminé et que donc le texte n'ait complétement disparu sur la gauche... (peut-être en créant un deuxième textBlock avec un storyboard décalé ?)
    C'est toute la difficulté de la chose.
    Tu peux effectivement faire comme tu as dit même si cela n'est pas très performant si ton message est long.

    sinon tu peux utiliser un seul TextBlock. En calculant la taille du glyph qui sort et en ajustant le texte (sans la lettre sortante et avec une nouvelle lettre à la fin) lorsque le parcours du storyboard sur la lettre qui doit sortir est terminé.
    Cela te permet d'afficher le strict nécessaire à l'écran

    un exemple :

    1 - le texte à afficher actuellement :

    abcdefg

    2 - quand 'a' doit sortir on ajoute une lettre ou plus au texte ici 'h' (selon la taille de la lettre a ) pour que l'on est l'impression d'une continuité. on lance un storyboard sur la longueur de 'a' pour donner l'impression de mouvement.

    abcdefgh

    3 - une fois le storyboard terminé on retire 'a' du texte, on repositionne le textblock à 0 (automatique avec le storyboard), et on retourne au point 1

    bcdefgh

    On peut faire aussi un paquet de truc sympa avec des canvas toujours avec la même technique.

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Merci Samoteph, je pense que dans un premier temps (sans doute même dans un second ), je vais accepter d'avoir un vide entre chaque affichage.

    D'autant plus qu'avec le rendertransform, le rendu est assez sympa.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/02/2009, 12h14
  2. Réponses: 4
    Dernier message: 03/08/2008, 20h54
  3. Message de type RUNDLL error
    Par Maman Kakalé Néhémiya dans le forum Windows
    Réponses: 3
    Dernier message: 11/09/2006, 13h37
  4. Message erreur Type défini par l'utilisateur non défini
    Par Michel DELAVAL dans le forum Access
    Réponses: 2
    Dernier message: 27/06/2006, 16h37
  5. comment faire un message de type "alert" en java
    Par fracam dans le forum Composants
    Réponses: 4
    Dernier message: 05/12/2005, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo