Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2008, 03:06   #1
kpishnik
 
Регистрация: 24.07.2008
Сообщений: 4
По умолчанию Управление с клавиатуры

Помогите пожалуйста. Хочу организовать управление клавишами влево вправо. Но не выходит. Пробовал ASCII код. Так вот когда в условие вставляю проверку кода на какую то букву то все нормально, а когда использую код клавиш лево вправо(75, 77) то не хочет виполнять.
kpishnik вне форума Ответить с цитированием
Старый 26.07.2008, 07:56   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

в чём делаете(делфи, паскаль)?
SERG1980 вне форума Ответить с цитированием
Старый 26.07.2008, 08:25   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
а когда использую код клавиш лево вправо(75, 77) то не хочет виполнять.
А что должно выполняться? И код пожалуйста покажите.
puporev вне форума Ответить с цитированием
Старый 26.07.2008, 17:36   #4
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,033
Сообщение

Для Delphi :
Цитата:
procedure TForm4.FormKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
VK_LEFT: действие ; // влево
VK_RIGHT: действие ; // вправо
VK_UP: действие ; // вверх
VK_DOWN: действие ; // вниз
end;
end;
Levsha100 вне форума Ответить с цитированием
Старый 26.07.2008, 17:39   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
Пробовал ASCII код.
Судя по этому - Паскаль.
puporev вне форума Ответить с цитированием
Старый 26.07.2008, 17:57   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Тут символ
Цитата:
procedure TForm4.FormKeyPress(Sender: TObject; var Key: Char);
а тут число
Цитата:
case Key of
VK_LEFT
Используйте тогда уж procedure TForm4.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
KeyPreview у формы в true.
eoln вне форума Ответить с цитированием
Старый 26.07.2008, 18:20   #7
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

вот тебе простейший пример движения Label на форме (Делфи):
Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
//лево, вверх, право, вниз.
 if key = 37 then Label1.Left:=  Label1.Left - 1;
 if key = 38 then Label1.Top:=   Label1.Top - 1;
 if key = 39 then Label1.Left:=  Label1.Left + 1;
 if key = 40 then  Label1.Top:=  Label1.Top + 1;
end;
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 26.07.2008, 22:35   #8
bag
Пользователь
 
Регистрация: 20.06.2008
Сообщений: 95
По умолчанию

На паскале:
Код:
var
   k:integer;
...

if keypressed then
begin
   k:=ord(readkey);
   if k=0 then k:=255+ord(readkey);
end;
case k of
   330: xi:=xi-stepi;         {Влево}
   332: xi:=xi+stepi;        {Вправо}
   327: yi:=yi-stepi;         {Вверх}
   335: yi:=yi+stepi;        {Вниз}
   32: fire;                       {Кл. пробел}
   27: wyhod;                  {Кл. ESC}
end;
...
Очередной изврат, зато работает Дело в том, что в досе коды управляющих клавиш состоят из 2 байт: 0 и код клавиши, поэтому код клавиши в таком случае надо считывать дважды (как в приведенном выше куске программы)
Не забывайте оставлять отзывы (кнопочка в левом нижнем углу сообщения)

Последний раз редактировалось bag; 26.07.2008 в 22:39.
bag вне форума Ответить с цитированием
Старый 27.07.2008, 18:18   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,220
По умолчанию

Если использовать чистый OnKeyDown, то после нажатия будет небольшая пауза, а затем объект начнет непрерывно двигаться.
Что бы этого избежать, можно использовать связку из OnKeyDown (фиксируем момент нажатия клавиши), OnTimer (выполняем нужные действия) и OnKeyUp (отмечаем отпускание клавиши).
Пример (устанавливаешь форме свойство KeyPreview = True, кидаешь компонент TShape и таймер TTimer, свойство таймера Interval позволяет задать скорость движения, лучше поставить значение 1):
Код:
var KeyCode: Word = 0;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  KeyCode := Key;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  KeyCode := 0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  case KeyCode of
    VK_LEFT: Shape1.Left := Shape1.Left - 1;
    VK_RIGHT: Shape1.Left := Shape1.Left + 1;
    VK_UP: Shape1.Top := Shape1.Top - 1;
    VK_DOWN: Shape1.Top := Shape1.Top + 1;
  end; {case}
end;
Arigato вне форума Ответить с цитированием
Старый 27.07.2008, 18:25   #10
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Автору темы уже давно все до лампочки, а народ тренируется. Скоро код на Си напишут.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Раскладка клавиатуры SERG1980 Общие вопросы Delphi 4 05.07.2010 10:41
имитация клавиатуры Var17 Win Api 3 17.06.2008 14:28
Блокирование клавиатуры Milly Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 18.10.2007 19:15
Отключение клавиатуры Lonix Общие вопросы Delphi 4 04.09.2007 17:48
Управление с клавиатуры PikeIt Общие вопросы Delphi 6 27.12.2006 17:41