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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> If Keypressed Then Ch:=readkey;
сообщение
Сообщение #1


Новичок
*

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

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


Перешёл из паскаля в делфи

столкнулся с проблемой:

в паскале при нажатии кнопки считывал символ так: if KeyPressed then ch:=ReadKey;
В делфи такое что то не катит пишет Undeclared identifier...
Как мне реализовать это в Делфях подскажите.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Здесь глянь:
Crt в дельфи
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


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


Гость






Ну, это смотря чем ты пользуешься. Если используешь VCL - то есть событие OnKeyPress. Если WinAPI - то немного по-другому...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


VCL я думаю, в WinAPI лезть пока боюсь.

OnKeyPress это событие.

Что мне делать если в бесконечном цикле , я должен при нажатии калвиши либо выйти из цикла либо изминить какие то переменные?

Чесно говоря пишу игру.
Грубо говоря у меня идет процесс падения какогото "шарика".
В процесс падения я хочу поменять фон (использую TImage) при нажатии стрелочек на клавиатуре.


Сообщение отредактировано: Morfey85 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


я в змейке писала так:

procedure TForm1.KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
vk_down: if napravl<>nup then
napravl:=ndown;
vk_up: if napravl<>ndown then
napravl:=nup;
vk_left: if napravl<>nright then
napravl:=nleft;
vk_right: if napravl<>nleft then
napravl:=nright;
end;
end;


то есть при нажатии стрелки менялось направление змейки.
мне кажется, тебя что-то подобное должно устроить... но это все равно обработчик события.


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


Новичок
*

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

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


procedure TForm1.KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
vk_down: if napravl<>nup then
napravl:=ndown;
vk_up: if napravl<>ndown then
napravl:=nup;
vk_left: if napravl<>nright then
napravl:=nleft;
vk_right: if napravl<>nleft then
napravl:=nright;
end;
end;


это меня утраивает есть только одно НО.

У меня в прецессе игры идет бесконечный цикл падения "шариков" и в процессе его выполнения я не могу обработать событие KeyDown.

Подскажите либо как мне обработку клвиатуры сделать внутри цикла либо как сделать так чтобы шарики падали сами по себе, в то время как я мог бы выполнять другие действия.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Добавь Application.ProcessMessages в цикле, и ты сможешь реагировать на нажатия клавиш тоже...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


а как цикл реализован? может, сделать привязку к таймеру?


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


Новичок
*

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

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


Application.ProcessMessages помогло. Только я теперь из цикла выйти не могу и из програмы тоже пока не нажму Еsc(k:=5) и только потом могу выйти.

procedure TForm1.N2Click(Sender: TObject);
var
i,g:word; //откуда падают яйца и жизни
begin
randomize;
o:=0;k:=1;g:=3;
Image1.Picture.LoadFromFile(FonFile(k));

repeat
i:=random(3)+1;
repeat

Image1.Picture.LoadFromFile(FonFile(k));
нарисовать яйцо
преместить его координаты
Application.ProcessMessages;
until яйцо дошло доконца;
if i=k then inc(o) else dec(g);
until g=0;
end;


Что там нащет Таймера?.

Кому интересно что я вообще намучил можете скачать посмотреть тут может что посоветуете.

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


Всем спасибо за помощь. Везде разобрался, игру дописал.
Если хотите окончательный вариант можно скачать тут
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


что НЕ понравилось:
момент первый - принципиальный. мерзкое мерцание.
сделай так:
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=true;<-----добавь эту строку
k:=0;
Image1.Picture.LoadFromFile(FonFile(k));
end;

и будет замечательно

момент второй - менее значительный. пользователю незаметный....
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if GameOver=false then
begin
case Key of
39: if (k<>2)and(k<>4) then k:=k+1;
37: if (k<>1)and(k<>3)and(k<>0) then k:=k-1;
38: if (k<>4)and(k<>3) then k:=k+2;
40: if (k<>1)and(k<>2)and(k<>0) then k:=k-2;
end;
Image1.Picture.LoadFromFile(FonFile(k));
Image1.Canvas.Ellipse(x-5,y-5,x+5,y+5);
end;
end;

немножко смущает выбор по кодам (39, 40...). может, это я дура, но коды всех клавиш не помню. напиши лучше vk_down, vk_up... имхо, будет лучше читаться. или у твоего варианта есть преимущества, просто я не знаю?

Таймеров, я так понимаю, уже сам понапихал, на вопрос ("Что там нащет Таймера?") можно не отвечать?

вообще игра порадовала... воспоминания из раннего-раннего детства smile.gif


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

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

 




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