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 языка