D
Mach doch ne Ableitung von TImage (o.a.):
class TSprite : public TImage
{
private: // Anwender-Deklarationen
int XPos,YPos;
Boolean Moving;
DYNAMIC void __fastcall MouseDown(TMouseButton Button, Classes::TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(TMouseButton Button, Classes::TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseMove(Classes::TShiftState Shift, int X, int Y);
__published: // Von der IDE verwaltete Komponenten
public: // Anwender-Deklarationen
__fastcall TSprite(TComponent* Owner);
};
__fastcall TSprite::TSprite(TComponent* Owner)
: TImage(Owner)
{
Moving=false;
XPos=-MaxInt;
YPos=-MaxInt;
}
//---------------------------------------------------------------------------
void __fastcall TSprite::MouseDown(TMouseButton Button, Classes::TShiftState Shift, int X, int Y)
{
XPos=X;
YPos=Y;
Moving=true;
TImage::MouseDown(Button, Shift, X, Y);
}
void __fastcall TSprite::MouseUp(TMouseButton Button, Classes::TShiftState Shift, int X, int Y)
{
Moving=false;
TImage::MouseUp(Button, Shift, X, Y);
}
void __fastcall TSprite::MouseMove(Classes::TShiftState Shift, int X, int Y)
{
int DX,DY;
static Updating=false;
if (!Updating)
{
Updating=true;
if (Moving)
{
if ((X!=XPos)||(Y!=YPos))
{
DX=X-XPos;
DY=Y-YPos;
XPos=X-DX;
YPos=Y-DY;
SetBounds(Left+DX,Top+DY,Width,Height);
}
}
Updating=false;
}
TImage::MouseMove(Shift, X, Y);
}