IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Символ на экране..., какой??
Флогримм
сообщение 26.11.2004 17:44
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 253
Пол: Мужской

Репутация: -  4  +


Как узнать какой символ находиться на экране в позиции [x,y] (в текстовом режиме)??


--------------------
Я не буду жить с этой злобой внутри / Я не буду частью смертельной цепи / Я не буду потребителем твоих идей / Я не буду никогда убивать зверей (Unconform)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 6)
volvo
сообщение 26.11.2004 17:57
Сообщение #2


Гость






Код

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 - 26.11.2004 17:59
 К началу страницы 
+ Ответить 
Флогримм
сообщение 26.11.2004 18:10
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 253
Пол: Мужской

Репутация: -  4  +


volvo, спасибо
ща попробую разобраться


--------------------
Я не буду жить с этой злобой внутри / Я не буду частью смертельной цепи / Я не буду потребителем твоих идей / Я не буду никогда убивать зверей (Unconform)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 26.11.2004 18:55
Сообщение #4


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


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

Это быстро, но можно еще сделать, используя прерывания....


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 26.11.2004 19:01
Сообщение #5


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


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

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

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

я вот подумал... это будет работать быстрее чем то что предложил volvo
Аргументы:
  • Можно обойтись чистым асмом
  • нет массивов -скорость работы выше - доказанно, см. тему "ускорение работы программ".
  • Нет вызова процедур (каждая процедура модуля system это 1 байт и 100 мс вермени smile.gif )
  • Преимущество: работает и в граф. режимах.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ZeroLink
сообщение 27.11.2004 9:17
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 41
Пол: Мужской

Репутация: -  0  +


Посмотри мой исходник на
http://far.by.ru/progs/graph.shtml
за номером 18.


--------------------
Я могу изменить мир, но Бог не даёт исходник:(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
APAL
сообщение 27.11.2004 10:53
Сообщение #7


Смотрю...
*****

Группа: Модераторы
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Код
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;


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 14:03
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"