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

Windows Presentation Foundation Discussion :

Supprimer les marges dues à une police.


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut Supprimer les marges dues à une police.
    Bonjour,

    Je ne sais pas si ce que je cherche à faire est possible.

    Déjà voici mon code:
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <Grid Height="300"  Width="195">
    	<Viewbox Stretch="Fill">
    		<TextBlock Text="4" FontFamily="Freehand521 BT"/>
    	</Viewbox>
    </Grid>

    Le but est que mon texte fasse au rendu 195x300 bien entendu sans marge.

    J'ai joué avec les Lineheight et height, mais rien de bien fiable.
    De plus certaines polices dépassent sur les côtés.

    Quelqu'un aurait une piste vers quoi se tourner?

    Merci.

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour nejnej
    Ce probleme de marge non-ajustable est je pense du au fait que
    - d'une part les tailles de police sont generes dans un carre(emsize est un carre)
    -et d'autre part qu'il y a un interligne et un espace inter-caracterequi sont inclus lors du formattage du texte avec le font qui creent donc fatalement une marge haute et 2 marges gauches-droite ....
    Aussi vaut-il mieux "dessiner" le caractere avec DrawingBrush qui utilise une balise GlyphRun pour le texte et une balise geometry pour les graphiques.

    Le seul aspect genant de glyphrun est qu'il faut fournir un indice de glyph pour chaque caractere.....qui n'est pas exactement mappe avec les numeros de code Unicode des caracteres(decalage de 5 des indices par rapport aux indices caracteres Unicode ).
    Pour les retrouver j'ai utiliser Tables de Caracteres Speciaux du menu accessoires de windows....
    code xaml qui dessine "A" et "4" sans marge et sans ViewBox avec le font Arial:
    Code xaml : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    Window x:Class="Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300"
        Background="White">
        <Grid 
     
            Height="300"
            Width="195"
            Background="Yellow">
            <Grid.RowDefinitions>
                <RowDefinition ></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <TextBlock 
                Grid.Row="0">
                <TextBlock.Background>
                    <DrawingBrush>
                        <DrawingBrush.Drawing>
                            <GlyphRunDrawing 
                              ForegroundBrush="Red" > 
                                <GlyphRunDrawing.GlyphRun>
                                  <GlyphRun 
                                      CaretStops="{x:Null}" 
                                      ClusterMap="{x:Null}" 
                                      IsSideways="False" 
                                      GlyphOffsets="{x:Null}" 
                                      GlyphIndices="36" 
                                      BaselineOrigin="0,12.29"  
                                      FontRenderingEmSize="14.0" 
                                      DeviceFontName="{x:Null}" 
                                      AdvanceWidths="10" 
                                      BidiLevel="0" >
                                     <GlyphRun.GlyphTypeface>
                                         <GlyphTypeface  FontUri="C:\Documents and Settings\OUNIS\Bureau\WpfViewBoxWithText\WpfTextDrawingBrush\NewFolder1\arial.ttf" />
                                      </GlyphRun.GlyphTypeface>
                                    </GlyphRun>
                                </GlyphRunDrawing.GlyphRun>
                            </GlyphRunDrawing>
                         </DrawingBrush.Drawing>  
                    </DrawingBrush>
                </TextBlock.Background>
            </TextBlock>
            <TextBlock 
                Grid.Row="1">
                <TextBlock.Background>
                    <DrawingBrush>
                        <DrawingBrush.Drawing>
                            <GlyphRunDrawing 
                              ForegroundBrush="YellowGreen" > 
                                <GlyphRunDrawing.GlyphRun>
                                  <GlyphRun 
                                      CaretStops="{x:Null}" 
                                      ClusterMap="{x:Null}" 
                                      IsSideways="False" 
                                      GlyphOffsets="{x:Null}" 
                                      GlyphIndices="23" 
                                      BaselineOrigin="0,12.29"  
                                      FontRenderingEmSize="14.0" 
                                      DeviceFontName="{x:Null}" 
                                      AdvanceWidths="10" 
                                      BidiLevel="0" >
                                     <GlyphRun.GlyphTypeface>
                                         <GlyphTypeface  FontUriFontUri="C:\WINDOWS\Fonts\arial.ttf" />
                                      </GlyphRun.GlyphTypeface>
                                    </GlyphRun>
                                </GlyphRunDrawing.GlyphRun>
                            </GlyphRunDrawing>
                         </DrawingBrush.Drawing>  
                    </DrawingBrush>
                </TextBlock.Background>
            </TextBlock>
        </Grid>
     
    </Window>
    bon code....................

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut
    J'étais parti sur les Glyphs aussi, mais je ne trouvais pas de solution.
    Je comptais le dessiner au final.

    Mais j'avais pas pensé à réunir les deux.

    En tout cas merci beaucoup pour ta réponse MABROUKI et je re poste demain pour dire si ça a marché.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut
    Bon ça marche impeccable.
    Pour passer du texte c'est assez simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    List<ushort> textglyphs = new List<ushort>();
                List<double> adwidths = new List<double>();
     
                GlyphTypeface type = new GlyphTypeface(new Uri(@"C:\WINDOWS\Fonts\SQUICKT_.TTF"));
                foreach (char achar in text.ToCharArray())
                {
                    textglyphs.Add(type.CharacterToGlyphMap[achar]);
                    adwidths.Add(10);
                }
    Plus qu'à réaliser un petit traitement pour calculer l'avance idéale.

    Merci encore MABROUKI.

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

Discussions similaires

  1. Supprimer les marges d'une page
    Par koKoTis dans le forum Mise en page CSS
    Réponses: 15
    Dernier message: 15/12/2007, 22h18
  2. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  3. Supprimer les marges dans une page html
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/01/2006, 04h41
  4. [DEBUTANT]Supprimer les espaces pour une requete
    Par tripper.dim dans le forum Oracle
    Réponses: 4
    Dernier message: 12/10/2005, 16h04
  5. [EXCEL]Modifier les marges d'une page dans Excel
    Par ms91fr dans le forum Composants VCL
    Réponses: 4
    Dernier message: 06/01/2004, 15h26

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