Autor Beitrag
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Do 05.06.08 18:54 
Moin! :wave:

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 ;-)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 05.06.08 20:59 
Wäre es evtl. nicht performanter die Zeilenumbrüche selbst zu verwalten? Oder willst du den gesamten Inhalt wirklich in einem einzigen langen String haben?
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Do 05.06.08 21:04 
Moin delfiphan,

die Zeilenumbrüche verwalte ich schon selber, ich meinte damit eigentlich die automatischen Zeilenumbrüche, die ein Canvas verursacht, wenn man Text in ein Rechteck zeichnet und der länger wird, als das Reckteck breit ist.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)