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