Breite von Buchstaben



  • Hallo,

    ich möchte die Breite von bestimmten Buchstaben mit einem bestimmten Font herausbekommen. So mache ich das jetzt:

    Graphics localGraphics=Graphics.FromHwnd(this.Handle);
    SizeF Size=localGraphics.MeasureString("A",CurrentFont);
    

    Gibt es auch eine bessere Methode?
    Außerdem gibt die Methode bei mir Werte mit Nachkommastellen aus. Ist das Normal?



  • Was gefällt Dir denn an der Methode nicht, die ist doch extra dafür da um die Länge von Zeichenfolgen zu messen?

    SlimTimmy schrieb:

    Außerdem gibt die Methode bei mir Werte mit Nachkommastellen aus. Ist das Normal?

    Die Methode gibt eine SizeF Struktur zurück und eine SizeF Struktur besteht aus Gleitkommazahlen.



  • Ich wundere mich darüber nur, dass ein Buchstabe eine Breite von 20,16235 Pixeln haben kann. Aber, ok. Dann werde ich das so machen.



  • Ich rufe die Methode für jeden Buchstaben einzeln aus, aber die Werte scheinen nicht zu stimmen! Sie sind zu groß! Woran kann das liegen?



  • Hättest du die Hilfe zu MeasureString gelesen, wüstest du, dass

    Die MeasureString-Methode ist für die Verwendung mit einzelnen Zeichenfolgen vorgesehen und enthält etwas zusätzlichen Platz für überhängende Symbole vor und hinter der Zeichenfolge. Außerdem passt die DrawString-Methode Symbolpunkte an, um die Anzeigequalität zu optimieren. So kann eine Zeichenfolge schmaler als von MeasureString gemeldet angezeigt werden.



  • Ich bin am verzweifeln. Ich möchte gerne, dass meine Buchstaben, die ich auf eine Bitmap male, ganz weit rechts ausgerichtet sind wie bei StringFormat.GenericTypographic
    Ich möchte gerne herausbekommen, welches Element dafür verantwortlich ist, dass der Text ganz rechts steht.
    Seht selbst:

    StrFormat=new StringFormat();
    
    StringFormat fmt=StringFormat.GenericTypographic;
    StrFormat.FormatFlags=fmt.FormatFlags;
    			StrFormat.SetDigitSubstitution(fmt.DigitSubstitutionLanguage,fmt.DigitSubstitutionMethod);
    StrFormat.Trimming=fmt.Trimming;
    StrFormat.Alignment=fmt.Alignment;
    StrFormat.LineAlignment=fmt.LineAlignment;
    float tb;
    float[] Ar=fmt.GetTabStops(out tb);
    
    StrFormat.SetTabStops(tb,Ar);
    StrFormat.HotkeyPrefix=fmt.HotkeyPrefix;
    

    Das müsste jetzt doch das gleiche sein, oder? (also fmt und StrFormat)
    Allerdings wird bei dem einen (fmt) ganz weit rechts der Text gemalt, bei dem anderen wie gehabt!! *grr*
    Was soll ich ändern?


Anmelden zum Antworten