Форум: "Потрепаться";
Текущий архив: 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.044 c