Па
Павел

Pascal. Модуль CRT. Как считать символ с экрана, зная его координаты?



Не, это не подойдет, так как символ такой не один, и нужно сканировать определенную область экрана на его наличие.

МУ
Минзифа Уланова

Для начала нужно вызвать процедуру GotoXY(x,y: byte) из модуля CRT. Эта процедура перемещает курсор в указанную строку (x) и указанный столбец (у) .

Нумерация начинается с левого верхнего угла монитора: самая верхняя строка, самый левый символ имеют координаты (1,1), второй символ первой строки - (1, 2). Т. е. ось Ox направлена из левого верхнего угла монитора параллельно земле в правый верхний угол, а ось Oy направлена от левого верхнего угла в левый нижний.

Вопрос со считыванием символа решить средствами Паскаля не удастся т. к. в Паскале нет функций возвращающих символ, находящийся в положении курсора. Для этого придется воспользоваться ассемблером:

Для этой цели в ассемблере есть 8-я функция 10h прерывания, которая возвращает символ и его атрибуты, находящийся в положении курсора в регистр ЦП AX.

Сам код функции примерно такой:

Function GetChar(x,y:byte):char; { функция возвращающих символ, находящийся в положении курсора }
Var Reg : Registers; { Эта переменная дает доступ к регистрам ЦП }
Begin
GoToXY(x,y); { процедура, переводящая курсор в положение x,y на экране }
With Reg do
Begin
AH:=8; { Номер функции }
BH:=0; { Номер страницы }
{ именно в эту страницу видеопамяти паскаль записывает все данные процедурами Write/WriteLn }
End;

Intr($10,Reg); { вызываем 10h прерывание ЦП }
{ после этого символ хранится в AL, а его атрибуты в AH }
GetChar:=chr(reg.AL); { присваиваем выходное значение функции }
{ т. е. получаем символ с экрана }
{ если вам понадобится узнать атрибуты символа, тогда вместо GetChar:=chr(reg.AL);
напишите GetChar:=reg.AH; и поменяйте выходной тип функции на byte как показана ниже:
Function GetCharAtrib(x,y:byte):byte;
}
end;

PS: ещё как вариант - попробовать работать с видеопамятью. .

ИП
Иван Прасолов

Правильнее будет не считывать символ с экрана, а перед выводом его на экран сохранить в переменной.

АШ
Алексей Шерстюк

readchar какой-нибудь. Хелп - по кнопке F1 в IDE языка

Похожие вопросы
pascal. Как вывести все символы на экран после найденного пробела?
Pascal. Сортировка массива символов
Помогите с массивами в Pascal с модулем Graph
Помогите пожалуйста написать программу на паскале, совместив модули CRT, GraphABC и Events///////
Можно ли без модуля crt в Делфи красиво вывести 2мерный массив в консольном приложении? Если да, то как?
как вызываются модули типа procedure и function в pascal abc?
Аналог модуля CRT из TB в Console Application в XE3
вывести количество повторяющихся символов в строке Pascal ABC
Проблемы с модулем graph (free pascal)
Модуль Graph Pascal, как сделать чтобы машинки не выходили за границы?