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

Вниз

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

 
тихий вовочка ©   (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.48 MB
Время: 0.034 c
4-1079599813
b0bi
2004-03-18 11:50
2004.05.09
Как получить Handle


3-1081849765
Dina
2004-04-13 13:49
2004.05.09
переименовать имя солбца


1-1082540079
4aynik
2004-04-21 13:34
2004.05.09
Да как же открыть типиз-й файл для чтения? даже смешно :)


3-1081435673
Wolferio
2004-04-08 18:47
2004.05.09
К предыдущему вопросу!!!


4-1079765987
Iks
2004-03-20 09:59
2004.05.09
Я научился создовать окна на WinAPI,





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский