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

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

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

 
 Ответить  Открыть новую тему 
> Подскажите, как в TP7.0 использовать стрелки
сообщение
Сообщение #1


Гость






Пожалуйста, подскажите как в Паскале 7, можно использовать стрелки: Вверх, вниз, лево,право?
Например для проги, которая при нажатии этих клавиш перемещает квадрат (в граф. режиме) по экрану?????
ПОЖАЛУЙСТА, А ТО УЧИТЕЛЬ ЗАМУЧИЛ, ГОВОРИТЬ НЕ ХОЧЕТ, А ТРЕБУЕТ ЧТОБ ЗНАЛИ, БЛИН!!!!!!!!!!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
Ну примерно так...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 6

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


Нууууууу попробуем!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 6

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


А есть таблица с кодами! а то галяк с четырьмя клавишами работать!! ??? ??? ??? ???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


...
*****

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

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


http://study.utmn.ru/~mvorobyeva/pascal/ASCII.htm
Неужели так сложно зайти в поисковую систему?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

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

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


Да не парь ты с этой таблицей:
Код
uses crt;
var c:char;
begin
clrscr;
repeat
c:=readkey;
writeln (ord(c));
until c=#27;
end.

Тыкай любую клавишу вот он - код!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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, и ты это знаешь smile.gif)
Так происходит потому, что при нажатии клавиши в буффер клавиатуры попадает один байт с номером той клавиши, которую ты нажал.
С клавишами 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.  
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

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

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


Спасибо за пояснение! Честно говоря я думал Что всё гораздо проще.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

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

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


А вообще (по-моему) лучше сделать так:
var
    Code:Word;
asm
     mov ah,0
     int 16h {ждет нажатия и возвращает код в AX}
     mov Code,ax
end;
точнее, скен помещается в AH, а в AL, аски-код яго или ноль для расширенного кода...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Lonely_Raven
****

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

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


:D ест библиотека для работы с скан клавой
но с  ASM вставками работ быстро моно две одновремен нажим бкет наискосок бегать
могу выслать shmv@inbox.ru


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11





Группа: Пользователи
Сообщений: 6

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


Оки поки!!!!! :o :o :o :o :o :o :o :o ;) ;) ;) :D :D ;D ;D
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

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

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


Цитата
Оки поки!!!!! :o :o :o :o :o :o :o :o ;) ;) ;) :D :D ;D ;D

Что это было, Пух ;D ;D
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

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

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


Используй scan-коды клавишь!


--------------------
* Origin: "It's MY LIFE!!! © Jhon Bon Jovi"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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