Abfrage der aktuellen Position nach dem Zeichnen von Text



  • Hallo Community,

    ich habe mich inzwischen mit der Funktion DrawString aus der Graphics-Klasse angefreundet. Funktioniert ja auch sehr gut. Ein Problem habe ich aber noch:

    Ich möchte in einer Zeile mehrere Teilstrings zeichnen, z.B. in verschiedenen Schriften oder Farben. Die Teilstrings muss ich natürlich getrennt voneinander zeichnen.

    Bein Aufruf von DrawString muss ich natürlich die Startposition angeben. Das wäre bei einem nachfolgenden Teilstring die Endposition des vorangegangenen Teilstrings. Wie kann ich diese Position abfragen?????

    (Die einzige Methode, die mir sonst noch einfällt, ist das Feststellen der Stringlänge mit MeasureCharacterRanges, aber das hat seine ganz besonderen Probleme.....)



  • Nimm MeasureString
    int width = g.MeasureString("DeinString", font).Width;



  • Prima Idee, nur ... noch so eine Funktion innerhalb des Paint-Event erscheint mir doch ein wenig übertrieben. Abgesehen davon: MeasureString hat auch noch einmal sehr viele Probleme und liefert nur mit vielen zusätzlichen Tricks die korrekte Breite des Textes, wie sie dann mit DrawString erscheinen würde.

    (Wenn mann bei jedem DrawString wieder neu messen müsste, wundert es mich nicht, dass viele Applikationen so grottenlangsam sind. Allein Bill Gates weiß - vielleicht - warum diese wichtige Positionsinformation so verborgen werden musste)



  • WishfulThinking schrieb:

    Prima Idee, nur ... noch so eine Funktion innerhalb des Paint-Event erscheint mir doch ein wenig übertrieben.

    Wie meinst Du das?

    Abgesehen davon: MeasureString hat auch noch einmal sehr viele Probleme und liefert nur mit vielen zusätzlichen Tricks die korrekte Breite des Textes, wie sie dann mit DrawString erscheinen würde.

    Verwende statt 'DrawString' und 'MeasureString' einfach die 'TextRenderer'-Hilfsklasse.

    (Wenn mann bei jedem DrawString wieder neu messen müsste, wundert es mich nicht, dass viele Applikationen so grottenlangsam sind. Allein Bill Gates weiß - vielleicht - warum diese wichtige Positionsinformation so verborgen werden musste)

    So läuft's nunmal. Das hat mit Bill Gates nichts zu tun. Wie soll es denn bitte besser gehen?


Anmelden zum Antworten