Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

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

 
тихий вовочка ©   (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]

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


 
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.



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

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.044 c
14-1081947771
*pavel
2004-04-14 17:02
2004.04.11
Реализация сети


1-1079708935
INTAARI
2004-03-19 18:08
2004.04.11
Перевод из десятичной системы в восмеричную.


14-1082303574
Шишкин Илья
2004-04-18 19:52
2004.04.11
Проблемы с процессором


1-1082719243
hawkins
2004-04-23 15:20
2004.04.11
как програмно присвоить обработчик события OnMouseMove у ListBox


3-1081592370
Mouse
2004-04-10 14:19
2004.04.11
Как выделить нужную строку в DBGrid по нажатию на кнопку?