Hallo!
Ich habe folgendes Problem:
Ich habe ein Fenster (ist ein TMemo), in welches Text geschrieben wird.
Nun soll der Cursor und das Fenster sich folgend verhalten:
der Cursor befindet sich an der "Eingabeaufforderung" bzw. hinter dem letzten dargestellten zeichen und wenn der Inhalt größer als das Fenster ist, dann wird der Inhalt nach oben geschoben, damit der Cursor zumindest immer am unteren Rand angezeigt wird.
Das ist also vergleichbar mit z.B. dem Windows Commandpromt oder bei jeder anderen Eingabemaske auch.
Ich habe zwar eine "alte" Lösung, die hat nur nun folgendes Problem: Mein Programm ist ein Executable, das beliebig viele Instanzen eines Tools aufmachen kann. In jedem dieser Tools kann bzw. soll das Fenster / Terminal aufrufbar sein. Das ganze läuft mit
TCP/
IP und daher unter Verwendung von INDI, welches jeder neuen Instanz des Tools klarerweise einen Thread verpasst, in welchem dieses läuft.
Nun schlägt sich meine bisherige Lösung aber mit diesem Threadhandling, soll heißen, wenn ich meine Cursorfunktionalität ausklammere, dann funktioniert das Programm, sonst kann es bei Beendigung des Programms zu einem Deadlock kommen.
Gibt es eine Möglichkeit einer derartigen Realisierung, die auch mit Threads zuverlässig funktioniert. Also die Bewegung und Positionierung des Cursors im Fenster. Geht das auch ohne Berechnung der Inhalte, Fenstergrößen, Canvas.Textwidth etc. Also ohne dass (zig) WindowsMessages gefeuert werden? Denn genau das verursacht den Deadlock beim Terminieren, dass permanent die aktuelle Cursorposition ermittelt werden muss, also ob sich die mittlerweile durch Eingabe oder so verändert hat. Dadurch kracht dann diese Berechnung und damit die WindowsMessages mit dem Thread zusammen.
Kurz gesagt: Es der Cursor soll sich so verhalten, wie in einem Commandpromt, immer bei der aktuellen Eingabeaufforderung und wenn auf eine Eingabe Daten angezeigt werden (vgl.Ping) immer an die richtige Position "mitwandern". Wie der Commandpromt eben, bei einem Listcommand oder einer einfachen Eingabe.
Hätte jemand von Euch da bitte eine Idee, wie ich das realisieren könnte, mit möglich sparsamer Anzahl an WindwosMessages? Oder vielleicht auch ohne (wenn das überhaupt geht).
Hab nämlich schon einige Zeit damit verbracht, den Fehler zu lokalisieren.
Stephan.