Помощь - Поиск - Пользователи - Календарь
Полная версия: Символ на экране...
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Флогримм
Как узнать какой символ находиться на экране в позиции [x,y] (в текстовом режиме)??
volvo
Код

type
 TVideoWord =
 Record
   Ch: Char; Attrib: Byte;
 End;
 TVideoBuffer = Array[1 .. 50*80] Of TVideoWord;

Var
 Buff: TVideoBuffer Absolute $B800:$0000;
 { цветной режим. Для Mono $B000:$0000 }

 Column: Byte Absolute $0000:$044A;

Function GetChar(x, y: Integer): Char
 Var i: Integer;
 Begin
   i := Column*Pred(y) + x;
   GetChar := Buff[i].Ch;
 End;

Begin
 WriteLn( GetChar(10, 10) );
End.
Флогримм
volvo, спасибо
ща попробую разобраться
Altair
Код
Function GetChar(x, y: Integer): Char
Var i: Integer;
Begin
  i := Column*Pred(y) + x;
  GetChar := Buff[i].Ch;
End;

Это быстро, но можно еще сделать, используя прерывания....
Altair
ага, это функция 08h прерывания 10h.
Код
mov ah,08h
mov bh,00
int 10h
операция возвращает в al символ, в ah атрибуты.

РАБОТАЕТ И В ТЕКСТОВЫХ И ГРАФ РЕЖИМАХ!!!!

считывается сивол из положения курсора (перемещение крсора - int 10h (02h))
Если надо, могу написать процедуру...

я вот подумал... это будет работать быстрее чем то что предложил volvo
Аргументы:
  • Можно обойтись чистым асмом
  • нет массивов -скорость работы выше - доказанно, см. тему "ускорение работы программ".
  • Нет вызова процедур (каждая процедура модуля system это 1 байт и 100 мс вермени smile.gif )
  • Преимущество: работает и в граф. режимах.
ZeroLink
Посмотри мой исходник на
http://far.by.ru/progs/graph.shtml
за номером 18.
APAL
Код
Type Ekr   = array[1..4000] of Byte;
Var  Ma      : Ekr absolute $B800:$0000;

Function GetChar(x,y : Byte) : Byte;
Begin
 GetChar:=Ma[160*(y-1)+x*2-1];
End;

Function GetAttr(x,y : Byte) : Byte;
Begin
 GetAttr:=Ma[160*(y-1)+x*2];
End;

Procedure SetChar(x,y,c : Byte);
Begin
 Ma[160*(y-1)+x*2-1]:=c;
End;

Procedure SetAttr(x,y,a : Byte);
Begin
 Ma[160*(y-1)+x*2]:=a;
End;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.