Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.02.2018, 22:38
pANda777 pANda777 вне форума
Прохожий
 
Регистрация: 19.01.2018
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Движение 2-ух объектов одновременно

На форме есть 2 Shape в виде круга. Я прописал их движение на кнопки
Первый передвигается на стрелочки, второй на NUMPAD'e.

Проблема в том, что они одновременно двигаться не хотят. Писал через оператор Case, if и задавал горячие клавиши и всё равно двигаются только по очереди.

Код:
 case Key of
     VK_UP: begin
             Gamer1.Top := Gamer1.Top -12;
             Exit;
            end;

   VK_LEFT: begin
             Gamer1.Left := Gamer1.Left-12;
             Exit;
            end;

   VK_Right: begin
             Gamer1.Left := Gamer1.Left+12;
             Exit;
            end;

   VK_DOWN: begin
             Gamer1.Top := Gamer1.Top +12;
             Exit;
            end;
  //end;
 //case Key  of


  {VK_NUMPAD8:  begin
                Gamer2.Top := Gamer2.Top -12;
                Exit;
               end;

  VK_NUMPAD4:  begin
                Gamer2.Left := Gamer2.Left -12;
                Exit;
               end;

  VK_NUMPAD6:  begin
                Gamer2.Left := Gamer2.Left +12;
                Exit;
               end;

  VK_NUMPAD5:  begin
                Gamer2.Top := Gamer2.Top +12;
                Exit;
               end;
  end;}

примерный код. Если объединять в 1 Case то так же двигаются по 1.
Ответить с цитированием
  #2  
Старый 12.02.2018, 23:39
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А NumLock зажечь пробовали? без горящего светодиода коды для основных стрелок и на цифровой части совпадают. Но это тоже не поможет, будет двигаться тот шейп, кого двинули первым, нужно выносить перемещение из обработчика жима на таймер, а из него следить за состоянием клавиш посредством вызова GetKeyboardState для TKeyboardState
Ответить с цитированием
  #3  
Старый 13.02.2018, 00:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вешай поток и в нем проверяй через GetKeyState.
Ответить с цитированием
  #4  
Старый 18.02.2018, 12:56
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Это не совсем так. Если вы будете быстро нажимать и отпускать клавиши, то все будет работать как задумано, а вот если вы зажмете одну клавишу и не отпуская ее нажмете вторую это уже будет не два разных нажатия а одно сложное и обрабатывать его тоже надо соответственно, а для этого есть функция GetAsyncKeyState(). Применительно к вашим шейпам делаем проверку на нажатие клавиши А:
Код:
if GetAsyncKeyState(65) < 0 then Shape2.Left := Shape2.Left - 1;
Помещать в кейс обработку в этом случае нельзя, т.к. у вас могут быть одновременно нажато намного больше 1 клавиши.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 19.02.2018, 23:40
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Да на таймере всёж легче выполнить, вот пример под D7
Вложения
Тип файла: zip shm.zip (1.9 Кбайт, 3 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter