Moin!
Folgendes Problem: Ich möchte für eine selbstgezeichete Konsole (unter .NET) das Caret am Ende des Eingabestrings zeichnen. Bei einem Einzeiligen ist das natürlich kein Problem, ich ermittle einfach mit
MeasureString die Größe des Bereichs, den der String benötigt (Die Funktion entspricht unter Delphi
Canvas.TextWidth.
Bei Strings, die am Ende der Zeile automatisch umgebrochen werden, ist das so nicht möglich, weil das Caret dadurch zwar in der richtigen Zeile, aber am rechten Rand (der Breite der Box) landet.
Mein erster Ansatz wäre jetzt gewesen, die Position zu brute-forcen, indem ich einfach alle Zeichen bis zum letzten Umbruch zähle und dann die Größe der letzten Zeile ermittle. Es dürfte klar sein, dass das nicht übermäßig performant ist, vor allem, weil ich bei jedem Caret-Blink neuzeichne (gut, dass ließe sich zwar reduzieren, indem ich zeichne und zurückkopiere, aber zumindest bei jeder neuen Eingabe ist es notwendig).
Ich könnte zwar davon ausgehen, dass es eine Monospace-Schrift ist, aber das möcht ich ehrlich gesagt auch lieber nicht.
Gibt es irgend eine einfachere bzw. sauberere Methode dafür? Bei Textboxen funktioniert das ja schließlich auch...
Danke!
Silas
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat