Подскажите, как в TP7.0 использовать стрелки |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Подскажите, как в TP7.0 использовать стрелки |
Dean Cane Kenoby |
14.03.2003 15:58
Сообщение
#1
|
Гость |
Пожалуйста, подскажите как в Паскале 7, можно использовать стрелки: Вверх, вниз, лево,право?
Например для проги, которая при нажатии этих клавиш перемещает квадрат (в граф. режиме) по экрану????? ПОЖАЛУЙСТА, А ТО УЧИТЕЛЬ ЗАМУЧИЛ, ГОВОРИТЬ НЕ ХОЧЕТ, А ТРЕБУЕТ ЧТОБ ЗНАЛИ, БЛИН!!!!!!!!!!! |
Slam |
14.03.2003 16:26
Сообщение
#2
|
Пионер Группа: Пользователи Сообщений: 136 Пол: Мужской Репутация: 0 |
Вроде как этого:
#75(вправо): If x>1 then x:=x-1; #77(влево): If x<79 then x:=x+1; #72(вверх): If y>1 then y:=y-1; #80(вниз): If y<24 then y:=y+1; Ну примерно так... |
Dean_Cane_Kenoby |
14.03.2003 16:29
Сообщение
#3
|
Группа: Пользователи Сообщений: 6 Репутация: 0 |
Нууууууу попробуем!
|
Dean_Cane_Kenoby |
14.03.2003 17:20
Сообщение
#4
|
Группа: Пользователи Сообщений: 6 Репутация: 0 |
А есть таблица с кодами! а то галяк с четырьмя клавишами работать!! ??? ??? ??? ???
|
AlaRic |
14.03.2003 17:29
Сообщение
#5
|
... Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: 3 |
http://study.utmn.ru/~mvorobyeva/pascal/ASCII.htm
Неужели так сложно зайти в поисковую систему? |
Slam |
14.03.2003 19:55
Сообщение
#6
|
Пионер Группа: Пользователи Сообщений: 136 Пол: Мужской Репутация: 0 |
Да не парь ты с этой таблицей:
Код uses crt; var c:char; begin clrscr; repeat c:=readkey; writeln (ord(c)); until c=#27; end. Тыкай любую клавишу вот он - код!! |
Clane |
15.03.2003 0:19
Сообщение
#7
|
Гость |
Цитата Да не парь ты с этой таблицей: Код uses crt; var c:char; begin clrscr; repeat c:=readkey; writeln (ord(c)); until c=#27; end. Тыкай любую клавишу вот он - код!! Ты немного не прав... Есть такая штука, как расширенные коды.... Вот талмудик от Some1 на эту тему : Значит так, отвечаю на первый вопрос: Для того чтобы получить нажатие от клавиши F1 тебе нужно знать, что не все клавиши возвращают только один символ. Поясню - вот к примеру такой код: c:=readkey; write(byte©); Если ты нажмёшь одну из букв, цифр, или целого ряда других кнопок, типа "-", "_", "+", то на экран выведется номер этого символа в таблице ASCII, и ты это знаешь ) Так происходит потому, что при нажатии клавиши в буффер клавиатуры попадает один байт с номером той клавиши, которую ты нажал. С клавишами F1-F12 происходит по другому - Когда ты жмёшь одну из таких клавиш, то в буффер клавиатуры попадает не один, а два байта - первый байт равен нулю, и он обозначает, что нажата клавиша с расширенным кодом. И следующий за этим нулевым байт будет обозначать, какая именно из расширенных клавиш была нажата. Поясню на примере: c1:=readkey; c2:=readkey; write(byte(c1),':',byte(c2)); Если нажать к примеру клавишу "А" то программа выполнит первую строку, и в переменную c1 будет занесён символ "А", после чего программа будет ожидать от тебя другого нажатия клавиши - нажмём к примеру "B", и тогда в c1 будет "А", а в c2 будет "В", что тебе и выведет команда Write. Давай на этом же коде попробуем нажать F1: В c1 будет занесён первый байт, равный нулю, и он будет обозначать, что нажата клавиша с расширенным кодом, и значит в буффере клавиатуры есть ещё один байт, который укажет нам, какая именно клавиша была нажата. После этого в c2 попадёт код нажатой клавиши и Write выведет тебе этот код. Подведу итоги - если клавиша простая, то на неё нужен один readkey а если клавиша расширенная, то на неё нужно два readkey'а. Как же тебе быть, если надо использовать проверку и простых и сложных клавиш сразу ? Ответ на этот вопрос тесно переплетён с твоим вторым вопросом - "как сделать так, чтобы в программе где угодно выполнялась реакция на F1 ?" Для того, чтобы у твоей программы появилась возможность выполнять F1 когда угодно есть два способа - один очень сложный и более гибкий - создать резидентный модуль с реакцией на клавишу. Этот способ мы пока рассматривать не будем. Второй способ заключается в том, чтобы сделать в твоей программе один цикл, который выполнялся бы на протяжении всей твоей программы, и в него поместить проверку на нажатие клавиши F1. Вот тебе код, который я уже много раз писал: begin repeat {Этот цикл будет всегда выполняться, пока не нажмёшь ESC} {Тут наша программа выполняет что нибудь, к примеру всегда выводит на экран символ "@" - write('@');} if keypressed then case readkey of {Если появился код клавиши в буффере клавиатуры} #27: break; {Это простая клавиша - ESC - выход из программы} 'A' : {чётить делаем на клавишу "A"} #0: case readkey of {Первый байт был нулём ? значит у нас расширенная клавиша, прочитаем её} #59: {Это твой F1, пиши реакцию на него, к примеру вызывай функцию} #68: {Это для примера - F10} #72: {Это кнопка курсора - вверх} end; end; until false; end. |
Slam |
15.03.2003 19:38
Сообщение
#8
|
Пионер Группа: Пользователи Сообщений: 136 Пол: Мужской Репутация: 0 |
Спасибо за пояснение! Честно говоря я думал Что всё гораздо проще.
|
GLuk |
15.03.2003 19:51
Сообщение
#9
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
А вообще (по-моему) лучше сделать так:
var Code:Word; asm mov ah,0 int 16h {ждет нажатия и возвращает код в AX} mov Code,ax end; точнее, скен помещается в AH, а в AL, аски-код яго или ноль для расширенного кода... |
Shadow |
20.03.2003 0:21
Сообщение
#10
|
Lonely_Raven Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: 1 |
:D ест библиотека для работы с скан клавой
но с ASM вставками работ быстро моно две одновремен нажим бкет наискосок бегать могу выслать shmv@inbox.ru -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
Dean_Cane_Kenoby |
23.03.2003 17:25
Сообщение
#11
|
Группа: Пользователи Сообщений: 6 Репутация: 0 |
Оки поки!!!!! :o :o :o :o :o :o :o :o ;) ;) ;) :D :D ;D ;D
|
Slam |
24.03.2003 16:39
Сообщение
#12
|
Пионер Группа: Пользователи Сообщений: 136 Пол: Мужской Репутация: 0 |
Цитата Оки поки!!!!! :o :o :o :o :o :o :o :o ;) ;) ;) :D :D ;D ;D Что это было, Пух ;D ;D |
CJ |
30.06.2003 22:13
Сообщение
#13
|
Пионер Группа: Пользователи Сообщений: 84 Пол: Мужской Репутация: 2 |
Используй scan-коды клавишь!
-------------------- * Origin: "It's MY LIFE!!! © Jhon Bon Jovi"
|
Текстовая версия | 20.09.2024 14:09 |