![]()  | 
	
 
  | 
| 
	 | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Создаю игру, как можно отловить нажать двух клавиш: к примеру стрлки вверх и влево (vk_up и vk_vk_left)?  К примеру в процедуре FormKeyDown это возможно? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Возможно, но сложно. Надо понимать, что иллюзия нажатия одновременно двух клавиш и есть иллюзия. На самом деле приходят два последовательных события, сначала от одной, затем от другой клавиши. 
		
	
		
		
		
		
		
	
		
		
	
	
	Поэтому надо извращаться. Отловить нажатие одной клавиши в событии OnKeyDown и запомнить это обстоятельство в каком-нибудь булевском флаге. В событии OnKeyUp отслеживать, а не отпущена ли эта клавиша (если отпущена - флаг сбрасывать). Затем отлавливать нажатие другой клавиши в OnKeyDown и смотреть флаг нажатия первой клавиши. Если флаг первой клавиши не сброшен, то первая клавиша нажата и, таким образом нажаты обе клавиши. По этому условию что-то делать. Если это происходит на форме, то свойство KeyPreview должно быть установлено в True;  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 А ты не пробовал это сделать с помощью хуков? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Спасибо за идейки, щас попробуем =) 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 создаёшь булевый массив для интересующих тебя клавиш, что будет хранить инфу нажата клавиша или нет. потом пишешь стандартную процедуру перехвата сообщений нажатия клавиш примеров тьма. там в аргументе есть код нажатой клавиши, по нему меняешь значения массива. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Есть еще одна проблемка по обработке клавиш в процедуре onkeydown если зажимать клавишу, то компонент timer работает не корректно... т.е. невыполняет заданное условие через определенный промежуток (пропускает некоторые циклы) времени, если зажата клавиша. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 TTimer не точный счетчик потому что VCL :-). 
		
	
		
		
		
		
		
	
		
		
	
	
	Для точного измерения лучше использовать WinAPI: SetTimer - KillTimer.  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
  |