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

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

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

> Keypressed в цикле, Как сменить значение keypressed
Soxatyi
сообщение 9.10.2005 13:25
Сообщение #1


Гость






Такая проблема. Необходимо вставить паузу в цикл, т.е. если во время выполнения цикла я нажал любую клавишу, то программа останавливается на 2 сек., а потом цикл продолжается. Приведу простой ппример:
program delay_key;
var x:integer;
begin
x:=0;
repeat;
x:=x+1;
writeln(x);
delay(1000);
if keypressed then delay(10000);
until(x=30);
readln;
end.

Здесь такая бага: после одного нажатия клавиши программа дальше всегда вставляет паузу, т.е. сменив значение keypressed на TRUE, она при следующем проходе цикла так и оставляет это значение. Нужно, чтобы от одного нажатия пауза вставлялась один раз. Если я потом опять нажал на кнопку, то пауза опять вставится, и т.д.
По логике, в if..then после длинного delay надо впихнуть что-то вроде keypressed:=FALSE (ибо keypressed суть boolean), но выдается ошибка 122.
Что делать?
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
Guest
сообщение 15.10.2005 20:19
Сообщение #2


Гость






Мой вариант компилится только на 16-ти битных компиляторах,
почему - говорилось выше, странно, что ты опять поднимаешь эту тему.
Простейший вариант, когда твой вариант не сработает
uses
CRT;
var
ch : char;
begin
ClrScr;
WriteLn('Press and hold any key...');
ReadKey;
While KeyPressed do ReadKey;
WriteLn('Bye...');
end.

Если нажать и удерживать клавишу, то программа не должна сразу
завершиться. В моем варианте допущена ошибка (пришлось поставить Pascal для проверки), на
самом деле нужно было писать:
memW[$0: $042c] := memW[$0: $042a]

Применение это нашло здесь: http://www.borlpasc.narod.ru/prog/Soliter.zip
 К началу страницы 
+ Ответить 
volvo
сообщение 15.10.2005 20:56
Сообщение #3


Гость






Цитата(Guest @ 15.10.2005 19:19)
Мой вариант компилится только на 16-ти битных компиляторах, почему - говорилось выше, странно, что ты опять поднимаешь эту тему.
Тему-то, на самом деле, поднимаешь ты. Я могу только еще раз повторить, что для того чтобы избежать БОЛЬШИХ проблем при переходе с 16-ти на 32-х битные компиляторы я бы советовал (и об этом я уже говорил выше) пользоваться ТОЛЬКО библиотечными функциями...

Цитата(Guest @ 15.10.2005 19:19)
Простейший вариант, когда твой вариант  не сработает
:D Смеяться уже можно? Чего это "не сработает"? У меня прекрасно работает...
Причем и в TP70, и в FPC 2.0.0 (кстати, а какой вариант ты мне можешь предложить для FPC? Не писать пока программы?)
 К началу страницы 
+ Ответить 
Guest
сообщение 16.10.2005 16:59
Сообщение #4


Гость






Цитата(volvo @ 15.10.2005 20:56)
:D Смеяться уже можно? Чего это "не сработает"? У меня прекрасно работает...

Смеяться ты можешь, когда хочешь, лишь была причина, а то окружающие не так поймут...
То есть ты хочешь сказать, что программа в моем примере не завершается, пока ты удерживаешь клавишу?
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Soxatyi   Keypressed в цикле   9.10.2005 13:25
volvo   Ага, прямо сейчас Паскаль даст тебе присвоить функ...   9.10.2005 13:30
Soxatyi   Спасибо огромное. )   9.10.2005 14:38
Romtek   Мне по душе больше такой вариант: uses crt; var x...   9.10.2005 19:43
Guest   Вариант while keypressed do readkey; Невсегда ра...   10.10.2005 17:46
volvo   Guest, приведи пример, КОГДА именно while keypress...   10.10.2005 18:19
Guest   В Делфи это конечно не прокатит, так как данный ме...   10.10.2005 21:11
volvo   Guest, я прекрасно знаю, что это не пойдет в Дельф...   11.10.2005 1:58
Guest   Прошу прощения, что не мог ответить ранее, был в п...   15.10.2005 18:38
volvo   Да твой вариант вообще не компилится на многих ко...   15.10.2005 18:47
pasman   а мона так: program delay_key; var x:integer; ...   15.10.2005 17:49
Guest   Мой вариант компилится только на 16-ти битных комп...   15.10.2005 20:19
volvo   Тему-то, на самом деле, поднимаешь ты. Я могу толь...   15.10.2005 20:56
Guest   Смеяться ты можешь, когда хочешь, лишь была причи...   16.10.2005 16:59
hiv   2Guest: А я тоже смеюсь :D Если считаешь себя прав...   17.10.2005 9:51
Guest   Без комментариев... Если есть, что сказать по де...   17.10.2005 17:34
volvo   Кусаться будешь в другом месте. Тебе уже все сказа...   17.10.2005 19:38


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

 



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