下面是本人采用一种笨办法实现,不知是否合适:
思路:在Image1上移动鼠标,模拟Image2移动的线路,在移动鼠标的同时记录鼠标经过点位置(关于Image1的坐标),之后让Iamge2沿刚才鼠标移动过的位置移动。
1、定义image2移动的线路点数据组(在头文件中定义)
int movep[2][10000];//这里为移动10000点
2、定义计数器(在头文件中定义)
int mx,moveid;
3、增加计时控件 Timer1
属性:Enabled=false;
InterVal=300;
目的:设定Image2移动速度
4、增加一个CheckBox1
目的: 当CheckeBox1选中时开始记录鼠标移动的位置
5、增加一个Buitton1
目的:开始移动Image2
下面是完整的代码,以供参考:
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(CheckBox1->Checked==true&&mx<10000)
{
movep[0][mx]=X;
movep[1][mx]=Y;
mx++;
}
//取得Form1的DC
HDC hdc = ::GetDC(Handle);
//取得鼠标位置的位图色彩
COLORREF pcolor = ::GetPixel( hdc, X, Y );
//逐一用宏取出RGB色彩值
unsigned int r = GetRValue(pcolor);
unsigned int g = GetGValue(pcolor);
unsigned int b = GetBValue(pcolor);
//将结果实时显示在Form1标题文字中
Caption ="鼠标位置:X = "+AnsiString(X)+"
,Y ="+AnsiString(Y)+
",位图色彩:R:"+AnsiString(r)+"_G:"+AnsiString(g)+
"_B:"+AnsiString(b);
//释放Form1的DC handle
ReleaseDC(0,hdc);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(moveid<mx)
{
Image2->Left=movep[0][moveid];
Image2->Top=movep[1][moveid];
moveid++;
}
else
{
moveid=0;
Timer1->Enabled=false;
}
}
//---------------------------------------------------------------------------