Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Тут вопрос задавали, как с джойстиками работать   Найти похожие ветки 

 
тихий вовочка ©   (2004-04-16 13:21) [0]

Тут паренек хотел руль использовать как доп. клавиатуру, а его засмеяли. Вот код работы с рулем:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, MMSystem, ComCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   StatusBar1: TStatusBar;//??????? ?? ?????? ????????? ?????????? ? ?????????
   RadioButton1: TRadioButton; //?????? ?????? ?? ?????????
   RadioButton2: TRadioButton; //?????? ?????? ?? ?????????
   RadioButton3: TRadioButton; //?????? ?????? ?? ?????????
   RadioButton4: TRadioButton; //????????? ?????? ?? ?????????

   //??????????? ????????? ?? ??? X (??????? ??? ????)
   //trHorizontal, Min = 0, Max = 65535, Position = 32768
   TrackBar1: TTrackBar;

   //??????????? ????????? ?? ??? Y(???-?????? ??? ????)
   //trVertical, Min = 0, Max = 65535, Position = 32768
   TrackBar2: TTrackBar;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
  connect  : boolean;
  JCaps    : JOYCAPS;  //?????????????? ?????????
  JInfo    : JOYINFOEX;//?????????? ? ?????????????? ??????????
  jnum     : Cardinal;
 public
   { Public declarations }

//?????????? ??????? ?????? ?????????
procedure Joy1ButtonDown(var Msg: TMessage); message MM_JOY1BUTTONDOWN;
procedure Joy1ButtonUp(var Msg: TMessage); message MM_JOY1BUTTONUP;

//?????????? ??????????? ?????????
procedure Joy1UpdCoord(var Msg : TMessage); message MM_JOY1MOVE;

end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 joycount : integer;
 jres     : integer;
 StString : string;
begin
joycount := joyGetNumDevs(); //??????????? ?? ???????? ??????????.
 if (joycount = 0) then
   begin
     StatusBar1.Panels.Items[0].Text := ("???????? ????????? ?? ???????????");
     connect := false;
   end
  else
    connect := true;

if connect then
 begin
   connect := false;
   JInfo.dwSize := sizeof(JOYINFOEX);
   jres := joyGetPosEx(JOYSTICKID1, @JInfo); //???????, ??? ???? ? ????????? 1
    if (jres = JOYERR_NOERROR) then
      begin
        connect := true;
        jnum    := JOYSTICKID1;
      end
    else
      if (jres = MMSYSERR_INVALPARAM) then
        ShowMessage("?????? ??????????? ??????? ?????????")
      else
        begin
          jres := joyGetPosEx(JOYSTICKID2, @JInfo);
          if(jres = JOYERR_NOERROR) then
            begin
              connect := false;
              jnum    := JOYSTICKID2;
              ShowMessage("?? ???? ???????? ?? ?????? ??????????.");
            end;
        end;
  joyGetDevCaps(jnum,@JCaps,sizeof(JOYCAPS)); //???????? ???-?? ????????? 1
 end;

StString :=  "Device name - "" + JCaps.szPname + """ ;
StString := StString + ", number of buttons - " + IntToStr(JCaps.wNumButtons);
StatusBar1.Panels.Items[0].Text := StString;

//????????? Windows ?? ??, ????? ??? ??? ????????????? ? ????????? ?????????
if(connect) then
 joySetCapture(Handle,jnum,JCaps.wPeriodMin*2,FALSE);

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//????????? Windows, ??? ??? ?????? ??????????? ????? ????????? ?????????
if (connect) then
 joyReleaseCapture(jnum);

end;

//??????????? ????????? ? ????????? ?????????
procedure TForm1.Joy1ButtonDown(var Msg: TMessage);
var res : integer;
begin
RadioButton1.Checked := boolean(Msg.WParam AND JOY_BUTTON1);
RadioButton2.Checked := boolean(Msg.WParam AND JOY_BUTTON2);
RadioButton3.Checked := boolean(Msg.WParam AND JOY_BUTTON3);
RadioButton4.Checked := boolean(Msg.WParam AND JOY_BUTTON4);
end;

procedure TForm1.Joy1ButtonUp(var Msg: TMessage);
begin
RadioButton1.Checked := boolean(Msg.WParam AND JOY_BUTTON1);
RadioButton2.Checked := boolean(Msg.WParam AND JOY_BUTTON2);
RadioButton3.Checked := boolean(Msg.WParam AND JOY_BUTTON3);
RadioButton4.Checked := boolean(Msg.WParam AND JOY_BUTTON4);
end;

procedure TForm1.Joy1UpdCoord(var Msg : TMessage);
var Pos : TPoint;
begin

Pos.x :=  msg.LParamLo;
Pos.y :=  msg.LParamHi;

TrackBar1.Position := msg.LParamLo;
TrackBar2.Position := msg.LParamHi;

end;

end.


 
тихий вовочка ©   (2004-04-16 13:21) [0]

Тут паренек хотел руль использовать как доп. клавиатуру, а его засмеяли. Вот код работы с рулем:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, MMSystem, ComCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   StatusBar1: TStatusBar;//??????? ?? ?????? ????????? ?????????? ? ?????????
   RadioButton1: TRadioButton; //?????? ?????? ?? ?????????
   RadioButton2: TRadioButton; //?????? ?????? ?? ?????????
   RadioButton3: TRadioButton; //?????? ?????? ?? ?????????
   RadioButton4: TRadioButton; //????????? ?????? ?? ?????????

   //??????????? ????????? ?? ??? X (??????? ??? ????)
   //trHorizontal, Min = 0, Max = 65535, Position = 32768
   TrackBar1: TTrackBar;

   //??????????? ????????? ?? ??? Y(???-?????? ??? ????)
   //trVertical, Min = 0, Max = 65535, Position = 32768
   TrackBar2: TTrackBar;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
  connect  : boolean;
  JCaps    : JOYCAPS;  //?????????????? ?????????
  JInfo    : JOYINFOEX;//?????????? ? ?????????????? ??????????
  jnum     : Cardinal;
 public
   { Public declarations }

//?????????? ??????? ?????? ?????????
procedure Joy1ButtonDown(var Msg: TMessage); message MM_JOY1BUTTONDOWN;
procedure Joy1ButtonUp(var Msg: TMessage); message MM_JOY1BUTTONUP;

//?????????? ??????????? ?????????
procedure Joy1UpdCoord(var Msg : TMessage); message MM_JOY1MOVE;

end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 joycount : integer;
 jres     : integer;
 StString : string;
begin
joycount := joyGetNumDevs(); //??????????? ?? ???????? ??????????.
 if (joycount = 0) then
   begin
     StatusBar1.Panels.Items[0].Text := ("???????? ????????? ?? ???????????");
     connect := false;
   end
  else
    connect := true;

if connect then
 begin
   connect := false;
   JInfo.dwSize := sizeof(JOYINFOEX);
   jres := joyGetPosEx(JOYSTICKID1, @JInfo); //???????, ??? ???? ? ????????? 1
    if (jres = JOYERR_NOERROR) then
      begin
        connect := true;
        jnum    := JOYSTICKID1;
      end
    else
      if (jres = MMSYSERR_INVALPARAM) then
        ShowMessage("?????? ??????????? ??????? ?????????")
      else
        begin
          jres := joyGetPosEx(JOYSTICKID2, @JInfo);
          if(jres = JOYERR_NOERROR) then
            begin
              connect := false;
              jnum    := JOYSTICKID2;
              ShowMessage("?? ???? ???????? ?? ?????? ??????????.");
            end;
        end;
  joyGetDevCaps(jnum,@JCaps,sizeof(JOYCAPS)); //???????? ???-?? ????????? 1
 end;

StString :=  "Device name - "" + JCaps.szPname + """ ;
StString := StString + ", number of buttons - " + IntToStr(JCaps.wNumButtons);
StatusBar1.Panels.Items[0].Text := StString;

//????????? Windows ?? ??, ????? ??? ??? ????????????? ? ????????? ?????????
if(connect) then
 joySetCapture(Handle,jnum,JCaps.wPeriodMin*2,FALSE);

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//????????? Windows, ??? ??? ?????? ??????????? ????? ????????? ?????????
if (connect) then
 joyReleaseCapture(jnum);

end;

//??????????? ????????? ? ????????? ?????????
procedure TForm1.Joy1ButtonDown(var Msg: TMessage);
var res : integer;
begin
RadioButton1.Checked := boolean(Msg.WParam AND JOY_BUTTON1);
RadioButton2.Checked := boolean(Msg.WParam AND JOY_BUTTON2);
RadioButton3.Checked := boolean(Msg.WParam AND JOY_BUTTON3);
RadioButton4.Checked := boolean(Msg.WParam AND JOY_BUTTON4);
end;

procedure TForm1.Joy1ButtonUp(var Msg: TMessage);
begin
RadioButton1.Checked := boolean(Msg.WParam AND JOY_BUTTON1);
RadioButton2.Checked := boolean(Msg.WParam AND JOY_BUTTON2);
RadioButton3.Checked := boolean(Msg.WParam AND JOY_BUTTON3);
RadioButton4.Checked := boolean(Msg.WParam AND JOY_BUTTON4);
end;

procedure TForm1.Joy1UpdCoord(var Msg : TMessage);
var Pos : TPoint;
begin

Pos.x :=  msg.LParamLo;
Pos.y :=  msg.LParamHi;

TrackBar1.Position := msg.LParamLo;
TrackBar2.Position := msg.LParamHi;

end;

end.


 
тихий вовочка ©   (2004-04-16 13:21) [1]

Что-то с кодировкой не то. Комментарии пропали


 
тихий вовочка ©   (2004-04-16 13:21) [1]

Что-то с кодировкой не то. Комментарии пропали


 
Sun bittern ©   (2004-04-16 13:25) [2]

тихий вовочка ©   (16.04.04 13:21) [1]

Это, когда копируешь из Delphi, рскладка клавы должна быть на русском, иначе приведенный выше результат.


 
Sun bittern ©   (2004-04-16 13:25) [2]

тихий вовочка ©   (16.04.04 13:21) [1]

Это, когда копируешь из Delphi, рскладка клавы должна быть на русском, иначе приведенный выше результат.


 
тихий вовочка ©   (2004-04-16 13:26) [3]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, MMSystem, ComCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   StatusBar1: TStatusBar;//Выведем на строку состояния информацию о джойстике
   RadioButton1: TRadioButton; //Первая кнопка на джойстике
   RadioButton2: TRadioButton; //Вторая кнопка на джойстике
   RadioButton3: TRadioButton; //Третья кнопка на джойстике
   RadioButton4: TRadioButton; //Четвертая кнопка на джойстике

   //перемещение джойстика по оси X (поворот для руля)
   //trHorizontal, Min = 0, Max = 65535, Position = 32768
   TrackBar1: TTrackBar;

   //перемещение джойстика по оси Y(газ-тормоз для руля)
   //trVertical, Min = 0, Max = 65535, Position = 32768
   TrackBar2: TTrackBar;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
  connect  : boolean;
  JCaps    : JOYCAPS;  //Характеристики джойстика
  JInfo    : JOYINFOEX;//Информация о присутствующих джойстиках
  jnum     : Cardinal;
 public
   { Public declarations }

//Обработчик нажатия кнопок джойстика
procedure Joy1ButtonDown(var Msg: TMessage); message MM_JOY1BUTTONDOWN;
procedure Joy1ButtonUp(var Msg: TMessage); message MM_JOY1BUTTONUP;

//Обработчик перемещения джойстика
procedure Joy1UpdCoord(var Msg : TMessage); message MM_JOY1MOVE;

end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 joycount : integer;
 jres     : integer;
 StString : string;
begin
joycount := joyGetNumDevs(); //Установлены ли драйверы джойстиков.
 if (joycount = 0) then
   begin
     StatusBar1.Panels.Items[0].Text := ("Драйверы джойстика не установлены");
     connect := false;
   end
  else
    connect := true;

if connect then
 begin
   connect := false;
   JInfo.dwSize := sizeof(JOYINFOEX);
   jres := joyGetPosEx(JOYSTICKID1, @JInfo); //Смотрим, как дела у джойстика 1
    if (jres = JOYERR_NOERROR) then
      begin
        connect := true;
        jnum    := JOYSTICKID1;
      end
    else
      if (jres = MMSYSERR_INVALPARAM) then
        ShowMessage("Ошибка определения наличия джойстика")
      else
        begin
          jres := joyGetPosEx(JOYSTICKID2, @JInfo);
          if(jres = JOYERR_NOERROR) then
            begin
              connect := false;
              jnum    := JOYSTICKID2;
              ShowMessage("Не хочу работать со вторым джойстиком.");
            end;
        end;
  joyGetDevCaps(jnum,@JCaps,sizeof(JOYCAPS)); //Получаем хар-ки джойстика 1
 end;

StString :=  "Device name - "" + JCaps.szPname + """ ;
StString := StString + ", number of buttons - " + IntToStr(JCaps.wNumButtons);
StatusBar1.Panels.Items[0].Text := StString;

//Указываем Windows на то, чтобы она нас информировала о состоянии джойстика
if(connect) then
 joySetCapture(Handle,jnum,JCaps.wPeriodMin*2,FALSE);

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Указываем Windows, что нас дальше неинтересно знать состояние джойстика
if (connect) then
 joyReleaseCapture(jnum);

end;

//Обработчики сообщений о состоянии джойстика
procedure TForm1.Joy1ButtonDown(var Msg: TMessage);
var res : integer;
begin
RadioButton1.Checked := boolean(Msg.WParam AND JOY_BUTTON1);
RadioButton2.Checked := boolean(Msg.WParam AND JOY_BUTTON2);
RadioButton3.Checked := boolean(Msg.WParam AND JOY_BUTTON3);
RadioButton4.Checked := boolean(Msg.WParam AND JOY_BUTTON4);
end;

procedure TForm1.Joy1ButtonUp(var Msg: TMessage);
begin
RadioButton1.Checked := boolean(Msg.WParam AND JOY_BUTTON1);
RadioButton2.Checked := boolean(Msg.WParam AND JOY_BUTTON2);
RadioButton3.Checked := boolean(Msg.WParam AND JOY_BUTTON3);
RadioButton4.Checked := boolean(Msg.WParam AND JOY_BUTTON4);
end;

procedure TForm1.Joy1UpdCoord(var Msg : TMessage);
var Pos : TPoint;
begin

Pos.x :=  msg.LParamLo;
Pos.y :=  msg.LParamHi;

TrackBar1.Position := msg.LParamLo;
TrackBar2.Position := msg.LParamHi;

end;

end.


 
тихий вовочка ©   (2004-04-16 13:26) [3]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, MMSystem, ComCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   StatusBar1: TStatusBar;//Выведем на строку состояния информацию о джойстике
   RadioButton1: TRadioButton; //Первая кнопка на джойстике
   RadioButton2: TRadioButton; //Вторая кнопка на джойстике
   RadioButton3: TRadioButton; //Третья кнопка на джойстике
   RadioButton4: TRadioButton; //Четвертая кнопка на джойстике

   //перемещение джойстика по оси X (поворот для руля)
   //trHorizontal, Min = 0, Max = 65535, Position = 32768
   TrackBar1: TTrackBar;

   //перемещение джойстика по оси Y(газ-тормоз для руля)
   //trVertical, Min = 0, Max = 65535, Position = 32768
   TrackBar2: TTrackBar;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
  connect  : boolean;
  JCaps    : JOYCAPS;  //Характеристики джойстика
  JInfo    : JOYINFOEX;//Информация о присутствующих джойстиках
  jnum     : Cardinal;
 public
   { Public declarations }

//Обработчик нажатия кнопок джойстика
procedure Joy1ButtonDown(var Msg: TMessage); message MM_JOY1BUTTONDOWN;
procedure Joy1ButtonUp(var Msg: TMessage); message MM_JOY1BUTTONUP;

//Обработчик перемещения джойстика
procedure Joy1UpdCoord(var Msg : TMessage); message MM_JOY1MOVE;

end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 joycount : integer;
 jres     : integer;
 StString : string;
begin
joycount := joyGetNumDevs(); //Установлены ли драйверы джойстиков.
 if (joycount = 0) then
   begin
     StatusBar1.Panels.Items[0].Text := ("Драйверы джойстика не установлены");
     connect := false;
   end
  else
    connect := true;

if connect then
 begin
   connect := false;
   JInfo.dwSize := sizeof(JOYINFOEX);
   jres := joyGetPosEx(JOYSTICKID1, @JInfo); //Смотрим, как дела у джойстика 1
    if (jres = JOYERR_NOERROR) then
      begin
        connect := true;
        jnum    := JOYSTICKID1;
      end
    else
      if (jres = MMSYSERR_INVALPARAM) then
        ShowMessage("Ошибка определения наличия джойстика")
      else
        begin
          jres := joyGetPosEx(JOYSTICKID2, @JInfo);
          if(jres = JOYERR_NOERROR) then
            begin
              connect := false;
              jnum    := JOYSTICKID2;
              ShowMessage("Не хочу работать со вторым джойстиком.");
            end;
        end;
  joyGetDevCaps(jnum,@JCaps,sizeof(JOYCAPS)); //Получаем хар-ки джойстика 1
 end;

StString :=  "Device name - "" + JCaps.szPname + """ ;
StString := StString + ", number of buttons - " + IntToStr(JCaps.wNumButtons);
StatusBar1.Panels.Items[0].Text := StString;

//Указываем Windows на то, чтобы она нас информировала о состоянии джойстика
if(connect) then
 joySetCapture(Handle,jnum,JCaps.wPeriodMin*2,FALSE);

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Указываем Windows, что нас дальше неинтересно знать состояние джойстика
if (connect) then
 joyReleaseCapture(jnum);

end;

//Обработчики сообщений о состоянии джойстика
procedure TForm1.Joy1ButtonDown(var Msg: TMessage);
var res : integer;
begin
RadioButton1.Checked := boolean(Msg.WParam AND JOY_BUTTON1);
RadioButton2.Checked := boolean(Msg.WParam AND JOY_BUTTON2);
RadioButton3.Checked := boolean(Msg.WParam AND JOY_BUTTON3);
RadioButton4.Checked := boolean(Msg.WParam AND JOY_BUTTON4);
end;

procedure TForm1.Joy1ButtonUp(var Msg: TMessage);
begin
RadioButton1.Checked := boolean(Msg.WParam AND JOY_BUTTON1);
RadioButton2.Checked := boolean(Msg.WParam AND JOY_BUTTON2);
RadioButton3.Checked := boolean(Msg.WParam AND JOY_BUTTON3);
RadioButton4.Checked := boolean(Msg.WParam AND JOY_BUTTON4);
end;

procedure TForm1.Joy1UpdCoord(var Msg : TMessage);
var Pos : TPoint;
begin

Pos.x :=  msg.LParamLo;
Pos.y :=  msg.LParamHi;

TrackBar1.Position := msg.LParamLo;
TrackBar2.Position := msg.LParamHi;

end;

end.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.048 c
14-1082312672
Феликс
2004-04-18 22:24
2004.05.09
Черты характера


3-1081759274
alex123
2004-04-12 12:41
2004.05.09
ExpressQuantumGrid - значение поля в LookupComboBox программно?


1-1082619455
user_2
2004-04-22 11:37
2004.05.09
MDI form


4-1079581149
StPu
2004-03-18 06:39
2004.05.09
Мастера подскажите как убрать кнопку "Развернуть"


1-1082902802
ss300
2004-04-25 18:20
2004.05.09
TBitBtn





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский