Здравствуйте, Аноним, Вы писали:
А>Привет всем! Помогите советом или наработками. А>Задача такая: нужно создать терминал (что то вроде консольного приложения, но он должен быть обязательно графический) А>как это можно сделать проще? А>У меня сечас получаеться так — создаю компонент TPanel (вообще не важно — использую просто его Handle), далее создаю каретку, перемещаю ее и вывожу TextOut'ом, но все это с буферами, координатами и жутко неудобной работой с фокусом элемента А>может есть какой компонент для этих целей?
Я не дельфист, забрел случайно, поэтому подскажу более "виндовое" решение.
1. Если это у тебя терминал, то у тебя должно быть понятие экранного буфера.
2. Экранный буфер может вмещать больше строк, чем видно на экране.
3. Конкатенировать строки в терминале не обязательно (т.е. терминал не обязан хранить свой текст в виде одной строки), можно прямо так и хранить — фиксированное количество символов на строку. Это избавит тебя от постоянного перераспределения памяти по приходу каждого символа. Т.е. можно использовать фиксированный для текущего сеанса буфер строк.
4. Очевидно, буфер может быть кольцевым, т.е. копировать при переводе строки ничего никуда не нужно.
5. Сделай отрисовку экранной области самостоятельно. У тебя фиксированный шрифт, ты можешь узнать ширину символа, затем вычисли "невалидный" прямоугольник в координатах символов (а не точек), затем прорисуй подстроки только требуемых строк (т.е. рисовать лишнее не обязательно)
Вроде, ничего сложного, но должно получиться легковесное по отношению к ресурсам и шустрое приложение.