мне бы че нить по проще, невозможно все изучить.
Вот есть такой код, джойстик определяет, кол-во кнопок итд но
почему то все время (если не трогать конпки/рычаги) шлет сообщение UpdCoord и координаты не меняются при движении рычагами.
Хотя в свойствах в панели управления винды все отлично меняется, те данные джойстик присылает верные.
CODE
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
#include <ImgList.hpp>
#include <Buttons.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:
TMemo *Memo1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall UpdButton(TMessage &msg);
void __fastcall UpdCoord(TMessage &msg);
private:
int jnum;
JOYCAPS JoyCaps;
bool connect;
public:
__fastcall TForm1(TComponent* Owner);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MM_JOY1BUTTONDOWN,TMessage,UpdButton)
MESSAGE_HANDLER(MM_JOY1BUTTONUP,TMessage,UpdButton)
MESSAGE_HANDLER(MM_JOY1MOVE,TMessage,UpdCoord)
MESSAGE_HANDLER(MM_JOY2BUTTONDOWN,TMessage,UpdButton)
MESSAGE_HANDLER(MM_JOY2BUTTONUP,TMessage,UpdButton)
MESSAGE_HANDLER(MM_JOY2MOVE,TMessage,UpdCoord)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//================================================================================
====
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <mmsystem.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MMRESULT jr;
JOYINFOEX JoyInfo;
int joycount=joyGetNumDevs();
if (joycount==0) Memo1->Lines->Add("Драйверы джойстика не установлены");
else
{
connect=false;
jr=joyGetPosEx(JOYSTICKID1,&JoyInfo);
if (jr ==JOYERR_NOERROR)
{
connect=true;
jnum= JOYSTICKID1;
}
else if (jr == MMSYSERR_INVALPARAM)
ShowMessage("Ошибка определения наличия джойстика");
else if((jr=joyGetPosEx(JOYSTICKID2,&JoyInfo)) == JOYERR_NOERROR)
{
connect = true;
jnum= JOYSTICKID2;
}
}
joyGetDevCaps(jnum,&JoyCaps, sizeof(JOYCAPS));
if (connect) Memo1->Lines->Add("Джойстик подключен") ;
else Memo1->Lines->Add("Джойстик не подключен");
Memo1->Lines->Add("Номер устройства - "+ IntToStr(jnum));
Memo1->Lines->Add("Наименование - " + AnsiString(JoyCaps.szPname));
Memo1->Lines->Add("Число кнопок - " + IntToStr(JoyCaps.wNumButtons));
if (connect)
jr=joySetCapture(Handle,jnum,500,FALSE);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpdButton(TMessage &msg)
{
Memo1->Lines->Add("КНОПКА");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpdCoord(TMessage &msg)
{
int x = msg.LParamLo;
Memo1->Lines->Add("x= "+IntToStr(x));
}
//---------------------------------------------------------------------------
Сообщение отредактировал IgorKossak - Nov 20 2011, 19:34
Причина редактирования: [codebox]