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

C# Discussion :

[WPF] Afficher du texte avec précision et rapidité


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Points : 51
    Points
    51
    Par défaut [WPF] Afficher du texte avec précision et rapidité
    Bonjour,

    Avant tout, je tiens à préciser que je débute le WPF, mais pas le C#.

    Je développe actuellement une application WPF permettant d'afficher dynamiquement une liste de chaînes de caractères.
    Je souhaite avoir un contrôle total sur chaque caractère, c'est-à-dire le placer où je veux au pixel près, pouvoir le sélectionner (afficher un curseur), le modifier, etc. (un peu à la manière d'un éditeur hexadécimal).

    Mon premier essai a été de dessiner un FormattedText pour chaque élément de ma liste.
    Cette solution ne me convient pas car bien qu'on puisse placer le FormattedText à la position voulue, on ne maîtrise pas la position des caractères suivants le premier.

    Mon deuxième essai a été de dessiner un FormattedText par caractère.
    Cette solution ne me convient pas non plus car l'affichage est très lent.
    Par exemple, pour un affichage de 50 chaînes de 700 caractères (35000 FormattedText à dessiner), cela prend plusieurs secondes à dessiner (au redimensionnement de la fenêtre, au changement de police, etc.).

    Je me tourne donc vers vous, car je ne sais plus sous quelle angle attaquer ce problème.

    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Points : 51
    Points
    51
    Par défaut
    Problème résolu en utilisant des GlyphRun à la place du FormattedText.
    L'affichage est bien plus rapide, et on peut définir la taille de chaque caractère.

    Pour ceux que ça intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
    {
        Typeface typeface = new Typeface(new FontFamily("Lucida Console"), FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
        GlyphTypeface glyphTypeface;
        if (!typeface.TryGetGlyphTypeface(out glyphTypeface))
            throw new Exception("No GlyphTypeface found");
     
        // Calcul de la largeur d'un caractère en fonction du Typeface et de la taille de la police
        double fontSize = 14;
        FormattedText formattedText = new FormattedText("A", CultureInfo.CurrentCulture, FlowDirection.LeftToRight, typeface, fontSize, Brushes.Black);
        double charWidth = formattedText.Width;
     
        string text = "Mon texte à afficher";
     
        ushort[] glyphIndexes = new ushort[text.Length];
        double[] advanceWidths = new double[text.Length];
        for (int i = 0; i < text.Length; i++)
        {
            glyphIndexes[i] = (ushort)(text[i] - 29);
            advanceWidths[i] = (double)charWidth;
        }
     
        GlyphRun glyphRun = new GlyphRun(glyphTypeface, 0, false, fontSize, glyphIndexes, new Point(0, 0), advanceWidths, null, null, null, null, null, null);
        drawingContext.DrawGlyphRun(Brushes.Black, glyphRun);
    }

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

Discussions similaires

  1. WPF Afficher un texte avec plusieurs couleur differentes
    Par ZashOne dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 03/01/2008, 00h38
  2. Afficher du texte avec SDL.
    Par kmitz dans le forum SDL
    Réponses: 14
    Dernier message: 30/04/2006, 19h56
  3. [JTextComponent] Afficher du texte avec style et image
    Par jean_bobi dans le forum Composants
    Réponses: 9
    Dernier message: 30/10/2005, 13h47
  4. [Javascript] Afficher du texte avec des intervalles
    Par Invité4 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/01/2005, 21h29
  5. Comment afficher du texte avec swing ?
    Par meda dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 27/10/2004, 14h35

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