Problem z OnKeyDown w Borland C++

0

Witam. Gdy odpalam pusty, nowy formularz i w Form1 wybieram taki event jak OnKeyDown i wpisuje tam:

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if (Key == VK_RETURN)
ShowMessage("wcisnales enter");
}

wtedy wszystko działa ładnie(wyswietla komunikat)

A gdy dodam chociaż jeden button do Form1 i gdy odpalam program wtedy KeyDown mi nie działa (tak jakby Form1 nie było aktywne i myśli że ten enter odnosi sie do buttona a nie do Form1 gdzie jest zaprogramowane zdarzenie OnKeyDown ...

co robić??

0
void __fastcall TFCOpenGL::ProcessKeys()
{


//KURWAif (DXInput1->States.Contains(isUp) 	== true)
//KURWAif (DXInput1->States.Contains(isDown) 	== true)
//KURWAif (DXInput1->States.Contains(isLeft) 	== true) FCOpenGL->MOVE_STRAFE_LEFT(newpos);
//KURWAif (DXInput1->States.Contains(isRight) 	== true) FCOpenGL->MOVE_STRAFE_RIGHT(newpos);
if	  (FCyfra->keys[VkKeyScan('w')])                 AUTOS->PHYSIC_MODEL->AccelUP();//DrawWireFrame = !DrawWireFrame;  
if	  (FCyfra->keys[VkKeyScan('s')])                  AUTOS->PHYSIC_MODEL->GoUP();

if (	  (FCyfra->keys[VkKeyScan('a')]) || 	  (FCyfra->keys[VkKeyScan('d')])                    ) {


if	  (FCyfra->keys[VkKeyScan('a')])                  AUTOS->PHYSIC_MODEL->TurnLeft(); //else   AUTOS->PHYSIC_MODEL->TurnLeftDOWN();
if	  (FCyfra->keys[VkKeyScan('d')])                  AUTOS->PHYSIC_MODEL->TurnRightUP();

																										} else AUTOS->PHYSIC_MODEL->TurnRightDOWN();
  if (FCyfra->keys[VK_UP])    FCOpenGL->MOVE_IN_FRONT(old);
  if (FCyfra->keys[VK_DOWN])  FCOpenGL->MOVE_OUT_FRONT(old);
  if (FCyfra->keys[VK_RIGHT]) FCOpenGL->MOVE_STRAFE_RIGHT(old);
  if (FCyfra->keys[VK_LEFT])  FCOpenGL->MOVE_STRAFE_LEFT(old);
  if (FCyfra->keys[VK_CONTROL]) CheckBox8->Checked = true; else CheckBox8->Checked = false;   
 /* if (keys[VK_SPACE]) then
 {
	CreateRainDrop;
	keys[VK_SPACE] :=FALSE;
}

  if (keys[VK_ADD]) then
{
	if RainInterval > 100 then
	  RainInterval :=RainInterval - 100
	else
	  RainInterval :=25;
	CreateRainDrop;
	SetTimer(h_Wnd, RAIN_TIMER, RainInterval, nil);
	keys[VK_ADD] :=FALSE;
}

  if (keys[VK_SUBTRACT]) then
{
	RainInterval :=RainInterval + 100;
	SetTimer(h_Wnd, RAIN_TIMER, RainInterval, nil);
	keys[VK_SUBTRACT] :=FALSE;
}

  if Keys[Ord('W')] then
{
	DrawWedge :=NOT(DrawWedge);
	Keys[Ord('W')] :=FALSE;
}

  if Keys[Ord('H')] then
  {
	ShowHelp :=NOT(ShowHelp);
	Keys[Ord('H')] :=FALSE;
  } */
}





void __fastcall TFCyfra::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
{

if (Msg.message ==	WM_MOUSEWHEEL)  {
if (Msg.wParam == 7864320) ShowMessage("W GORE");
if (Msg.wParam == 4287102976) ShowMessage("W DOL");
}

if (Msg.message ==	WM_KEYDOWN) {       // Set the pressed key (wparam) to equal true so we can check if its pressed

		keys[Msg.wParam] = true;
	
}
if (Msg.message ==	WM_KEYUP) {       // Set the pressed key (wparam) to equal true so we can check if its pressed

		keys[Msg.wParam] = false;

}


FCOpenGL->draw_2d_menu = keys[VkKeyScan('v')];
}

gdzie


bool keys[256];

processkeys(); trzeba wykopnywac w jakims timerze co pewien czas zeby wiedziec kiedy zmienilismy cos na klawiatrzue

komponent ApplicationEventHandler (Watek OnMessage) wrzucamy jna jakas forme (u mnie FCYFRA)

1 użytkowników online, w tym zalogowanych: 0, gości: 1