Консультация № 197103
16.11.2019, 17:54
0.00 руб.
0 4 1
Здравствуйте, уважаемые эксперты!

Работаю с Free Pascal (Windows). Возникла потребность работать непосредственно с буфером текстовой консоли, то есть читать и записывать информацию напрямую (для упрощённого создания оконного меню). Как это сделать?

Заранее благодарен за подсказки и ответы!

Обсуждение

давно
Старший Модератор
31795
6196
19.11.2019, 12:37
общий
Адресаты:
Цитата: Delph
Free Pascal (Windows)

Free Pascal под Windows создает полноценное WinAPI-приложение:
Превращая код:
[code lang=pascal]var
a:integer;
begin
write('enter A:=');
readln(a);
end.[/code]
В это:

Первая п/п sub_407AC0 - записывает параметры консоли во внутренние переменные.
Второая п/п sub_406BC0 - собственно сама программа.

Можно почитать Экранный буфер консоли
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
21.11.2019, 10:33
общий
это ответ
Здравствуйте, Delph!

Это вопрос скорее не по Pascal, а по WinApi.
Смотрите Экранный буфер консоли.
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
400894
9
21.11.2019, 16:15
общий
А можно ли как-то связать буфер консоли с массивом в памяти программы? В DOS это работало и позволяло простым присваиванием прописать любой нужный символ с выбранными атрибутами по нужным координатам на экране.
давно
Старший Модератор
31795
6196
22.11.2019, 10:35
общий
Адресаты:
Цитата: Delph
А можно ли как-то связать буфер консоли с массивом в памяти программы?

Внимательно перечитайте ссылку на экранный буфер консоли:
Система создает экранный буфер всякий раз, когда она создает новую консоль. Чтобы открыть дескриптор активного экранного буфера консоли, при вызове к функции CreateFile установите значение CONOUT$ . Процесс может использовать функцию CreateConsoleScreenBuffer, чтобы создать дополнительные экранные буферы для своей консоли. Новый экранный буфер не активен до тех пор, пока его дескриптор не будет определен при вызове к функции SetConsoleActiveScreenBuffer. Однако к экранным буферам можно обращаться для чтения и записи, независимо, являются ли они активными или неактивными.

Каждый экранный буфер имеет свой собственный двухмерный массив записей текстовой информации. Данные для каждого символа сохраняются в структуре CHAR_INFO, которая определяет символы Unicode или ANSI, и цвет текста и цвета фона, на котором этот символ отображен.

Вам нужно будет перечитать так же информацию о всех функциях, которые упоминаются по ссылкам.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа