各位老大帮我看看错误啊?

aurorabxy 2004-08-11 08:11:19
老大,这是我看到得一个用摇杆模拟鼠标得一个BCB程序,但是我自己运行起来确是很多错误,而我又找不到?
老大能不能帮我试试看?纠正一下呢?谢谢老大哦!
//---------------------------------------------------------------------------

#ifndef Unit3H
#define Unit3H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
private:// User declarations
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MM_JOY1BUTTONDOWN,Tmessage,OnJoyDown)
MESSAGE_HANDLER(MM_JOY1MOVE,Tmessage,OnJoyMove)
END_MESSAGE_MAP(Tform)
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall OnJoyDown(Tmessage &Message);
void __fastcall OnJoyMove(Tmessage &Message);

};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif




//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
int JoyMsg;
//捕获游戏操纵杆
JoyMsg=joySetCapture(Handle,JOYSTICKID1,0,false);
if(JoyMsg==JOYERR_NOCANDO)
{
//捕获失败
ShowMessage("不能捕获游戏杆!");
}
else
{
if(JoyMsg==JOYERR_UNPLUGGED)
{
//没有连接
ShowMessage("游戏杆未与系统连接!");
}
else
{
if(JoyMsg==MMSYSERR_NODRIVER)
{
//没有安装
ShowMessage("系统没有安装游戏杆!");
}
else
{
//捕获成功
ShowMessage("捕获游戏杆成功!");
}
}
}

 

}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{ //释放操纵杆捕获
joyReleaseCapture(JOYSTICKID1);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnJoyDown(Tmessage &Message)
{
if(Message.Wparam & JOY_BUTTON1)
{
//模拟鼠标左键按下
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Caption=”左键按下”;
}
if(Message.Wparam & JOY_BUTTON2)
{
//模拟鼠标右键按下
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
Caption="右键按下";
}
if(Message.Wparam & JOY_BUTTON3)
{
//模拟鼠标左键抬起
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
Caption="左键抬起";
}
if(Message.Wparam & JOY_BUTTON4)
{
//模拟鼠标右键抬起
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
Caption="右键抬起";
}
//继续传递消息
Tform::Dispatch(&Message);
}

//自定义的MM_JOY1MOVE消息响应函数OnJoyDown
void __fastcall TForm1::OnJoyMove(Tmessage &Message)
{
int x,y;
POINT pt;
//取得鼠标当前坐标
GetCursorPos(&pt);
x=LOWORD(Message.Lparam);
y=HIWORD(Message.Lparam);
if(x!=32678)
{
if(x)
{
//向右
pt.x+=10;
}
else
{
//向左
pt.x-=10;
}
}
if(y!=32678)
{
if(y)
{
//向下
pt.y+=10;
}
else
{
//向上
pt.y-=10;
}
}
//设置鼠标坐标
SetCursorPos(pt.x,pt.y);
//继续传递消息
Tform::Dispatch(&Message);
}


  






...全文
162 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
aurorabxy 2004-08-12
  • 打赏
  • 举报
回复
主要是头文件里得一些东东,我现在搞不清楚要有哪些?这个程序得头文件调试得时候并不对啊
aurorabxy 2004-08-12
  • 打赏
  • 举报
回复
不需要摇杆也可以,就是帮我看看错误在哪里?帮我调调!
我现在运行不起来啊
aurorabxy 2004-08-12
  • 打赏
  • 举报
回复
能把头文件也帮我写上嘛?我想调试一下.
另外我写得那个程序能帮我看一下错误嘛?谢谢
yjy1001 2004-08-12
  • 打赏
  • 举报
回复
另外的错误,是大小写出错,老妖说了
yjy1001 2004-08-12
  • 打赏
  • 举报
回复
就一个头文件

我这里没有 摇杆,无法帮你调试的
ccrun.com 2004-08-12
  • 打赏
  • 举报
回复
Tmessage应为TMessage吧。
注意大小写
aurorabxy 2004-08-12
  • 打赏
  • 举报
回复
我又重新调试了一下,joySetCapture等函数错误提示倒是没有
但是pravite里面的错误不知道怎么办?
Tmessage OnJoyDown OnJoyDown提示为没有相应定义等等错误.
jishiping 2004-08-12
  • 打赏
  • 举报
回复
摇杆的api函数,用到的就是头文件mmsystem.h。“提示没有定义”,应该还是你其它地方写错了吧。
aurorabxy 2004-08-12
  • 打赏
  • 举报
回复
我加了你所说得头文件,但是错误还是依旧啊!
而且基本都在private里面!
另外摇杆得api函数得调用需要什么头文件呢?
我得用joySetCapture等函数时,错误提示没有定义?
yjy1001 2004-08-12
  • 打赏
  • 举报
回复
这些代码写得都没问题----就是简单了点.........
yjy1001 2004-08-12
  • 打赏
  • 举报
回复
只需要加入这句话 就可以编译成功了
#include <mmsystem.h>

你包含对应的头文件,当然无法编译
constantine 2004-08-11
  • 打赏
  • 举报
回复
操纵杆,这里没有帮不上忙

void __fastcall TTetrisForm::JoyMove(TMessage &msg)
{
if (!isPlaying) return;
int PosX,PosY;
PosX=msg.LParamLo;
PosY=msg.LParamHi;
if (PosX<10000)
MoveLeft();
else if (PosX>55000)
MoveRight();
if (PosY>55000)
MoveDown();

}
void __fastcall TTetrisForm::JoyPress(TMessage &msg)
{
if (!isPlaying) return;
if (msg.WParam & JOY_BUTTON1)
Rotate();
}
void __fastcall TTetrisForm::J1Click(TObject *Sender)
{
JOYINFO JoyInfo;
J1->Checked=!J1->Checked;
if (!J1->Checked)
joyReleaseCapture(JOYSTICKID1);
else {
joyGetPos(JOYSTICKID1,&JoyInfo);
joySetCapture(Handle,JOYSTICKID1,2*JoyCaps.wPeriodMin,false);
}

}
//---------------------------------------------------------------------------


void __fastcall TTetrisForm::ConnectJoy()
{
MMRESULT Result;
JOYINFO JoyInfo;
if (joyGetNumDevs()==0){
J1->Enabled=false;
return;
}
Result=joyGetPos(JOYSTICKID1,&JoyInfo);
if (Result!=JOYERR_NOERROR){
J1->Enabled=false;
return;
}

if (J1->Checked){
joyGetDevCaps(JOYSTICKID1,&JoyCaps,sizeof(JOYCAPS));
joySetCapture(Handle,JOYSTICKID1,2*JoyCaps.wPeriodMin,false);
}
}

void __fastcall TTetrisForm::FormDestroy(TObject *Sender)
{
if (J1->Checked)
joyReleaseCapture(JOYSTICKID1);
}
//---------------------------------------------------------------------------

来自《C++Builder 5.0高级编程技术》
给你参考
胜天配置新手速成 我也是个初级的delphi玩家,我在配置胜天这份源代码中也遇到一些困难,不过在 花费了4小时之后,终于搞定,和我一样,有很多新手在配置中肯定也遇到问题,特 把我的一些经验写出来,希望起到抛砖引玉的效果,老鸟或者骨灰级的玩家们千万 别扔砖头 建议环境是DELPHI7.0+WINDOWS2000,最好是安装一个OFFICE 胜天要用的以下几个控件,在国内优秀的DELPHIBOX网站有下,并且很全。 需要安装的控件包 DevExQuantumGrid v3.22 Pro for D6,D7 表格控件 ExpressBars v4.2 (工具条控件) RX Library 2.75 D7 (控件包) ExpressQuantumGrid Suite v 4.2 表格控件 SkinEngine v3.4.7 (皮肤界面控件包) 需要编译的控件包(不需要安装) InfoPower 4000.0.3 (数据库控件包) Report Machine 2.6 报表控件包 TsncCurrency 货币编辑控件 V1.1 vclzip2.23 需要安装的微软的 MSAGENT.EXE 比较麻烦的 ehlib3 建议处理办法,把胜天源代码解压缩到任意并命名好目录:E:ST; 然后建立E:stpackage 一, MSAGENT.EXE的安装,直接运行,安装完后,设置如下: Delphi=>Component=>Import ActiveX Control=>选中Microsoft Agent ControlXX =>选择下边Install [last_exile说明] 二, InfoPower 4000.0.3 (数据库控件包); Report Machine 2.6 报表控件包; TsncCurrency 货币编辑控件 V1.1;vclzip2.23 这四个,从网上下载后,解压缩 并分别放到 E:stpackageInfoPower E:stpackageReport Machine E:stpackageTsncCurrency E:stpackagevclzip2.23 Delphi=>FileOpen E:stpackagexxx.dpk 打开后,运行Compile,如果没有错误 在运行Install(如下) InfoPower 4000.0.3 (数据库控件包)=ip4000v7.dpk Report Machine 2.6 报表控件包=DclRMachine7.dpk TsncCurrency 货币编辑控件 V1.1=SNC.dpk vclzip2.23=VCLZipD6.dpk 三, DevExQuantumGrid v3.22 Pro for D6,D7 表格控件;ExpressBars v4.2 (工具 条控件); RX Library 2.75 D7 (控件包); ExpressQuantumGrid Suite v 4.2 表 格控件; SkinEngine v3.4.7 (皮肤界面控件包)的安装 DevExQuantumGrid;ExpressBars,RX Library最好安装,不过,安装以后,参考第 二步的目录建立一个目录,把安装后的文件拷贝到里面去。 E:stpackageDevExQuantumGrid E:stpackageExpressBars E:stpackageExpressQuantumGrid Suite E:stpackageSkinEngine v3.4.7 E:stpackageRX Library(这个程序默认的安装目录是C:) 四, 最让人头痛的是ehlib3的安装,还考了不少人 1. 将EhLib v3.0 Full Source解压缩到 E:stpackageehlib3。 2. 打开Delphi 7,将EhLib的Delphi7子目录加到Delphi的Library path。(菜单操 作路径为:Tools|Environment Options...|Library|Library path) 3. 将EhLib目标安装目录中的common和DataService子目录的文件移动到EhLib的De lphi7子目录中。 4. 在Delphi 7中打开EhLib70.dpk,编译,但不要安装。 5. 在Delphi 7中打开DclEhLib70.dpk,编译并安装。 6. 组件面板中出现一个EhLib的组件页。 [zIzII提供] 五,最后配置: Delphi=>Tools=>Environment Options...=>Library=>Library path E:stpackageDevExQuantumGridXXX E:stpackageExpressBarsXXX E:stpackageExpressQuantumGrid SuiteXXX E:stpackageSkinEngine v3.4.7XXX E:stpackageRX LibraryXXX E:stpackageehlib3XXX E:stpackageInfoPowerXXX E:stpackageReport MachineXXX E:stpackageTsncCurrencyXXX E:stpackagevclzip2.23XXX (XXX是最末一级目录,当你运行时缺那个文件就添加吧) 最后说明,本来不需要这么麻烦的,主要是考虑到新手不太明白,所以写了这个 操作比较繁琐的说明,其实老鸟可以10分钟搞定,而且老鸟看我写的肯定头晕, 并且大骂,拜托各位老大,这是给菜鸟看的。

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧