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

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

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

 
 Ответить  Открыть новую тему 
> Символ на экране..., какой??
сообщение
Сообщение #1


Бывалый
***

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

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


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


--------------------
Я не буду жить с этой злобой внутри / Я не буду частью смертельной цепи / Я не буду потребителем твоих идей / Я не буду никогда убивать зверей (Unconform)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

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

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


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


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


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

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

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


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

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


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


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

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

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


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

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

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

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


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


Новичок
*

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

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


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


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

 





- Текстовая версия 3.05.2024 8:31
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name