![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Morfey85 |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Перешёл из паскаля в делфи
столкнулся с проблемой: в паскале при нажатии кнопки считывал символ так: if KeyPressed then ch:=ReadKey; В делфи такое что то не катит пишет Undeclared identifier... Как мне реализовать это в Делфях подскажите. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Здесь глянь:
Crt в дельфи |
Morfey85 |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо, но я бы хотел узнать как в делфи реализовано перехват кода клавиатуры в программу.
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Ну, это смотря чем ты пользуешься. Если используешь VCL - то есть событие OnKeyPress. Если WinAPI - то немного по-другому...
|
Morfey85 |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
VCL я думаю, в WinAPI лезть пока боюсь.
OnKeyPress это событие. Что мне делать если в бесконечном цикле , я должен при нажатии калвиши либо выйти из цикла либо изминить какие то переменные? Чесно говоря пишу игру. Грубо говоря у меня идет процесс падения какогото "шарика". В процесс падения я хочу поменять фон (использую TImage) при нажатии стрелочек на клавиатуре. Сообщение отредактировано: Morfey85 - 24.06.2006 18:59 |
мисс_граффити |
![]()
Сообщение
#6
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
я в змейке писала так:
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;
то есть при нажатии стрелки менялось направление змейки. мне кажется, тебя что-то подобное должно устроить... но это все равно обработчик события. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Morfey85 |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
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. Подскажите либо как мне обработку клвиатуры сделать внутри цикла либо как сделать так чтобы шарики падали сами по себе, в то время как я мог бы выполнять другие действия. |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Добавь Application.ProcessMessages в цикле, и ты сможешь реагировать на нажатия клавиш тоже...
|
мисс_граффити |
![]()
Сообщение
#9
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
а как цикл реализован? может, сделать привязку к таймеру?
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Morfey85 |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
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 - 2.11.2006 19:48 |
Morfey85 |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всем спасибо за помощь. Везде разобрался, игру дописал.
Если хотите окончательный вариант можно скачать тут |
мисс_граффити |
![]()
Сообщение
#12
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
что НЕ понравилось:
момент первый - принципиальный. мерзкое мерцание. сделай так: 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... имхо, будет лучше читаться. или у твоего варианта есть преимущества, просто я не знаю? Таймеров, я так понимаю, уже сам понапихал, на вопрос ("Что там нащет Таймера?") можно не отвечать? вообще игра порадовала... воспоминания из раннего-раннего детства ![]() -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 1:39 |