如何做个组件可以响应鼠标事件?
比如有OnMouseMove(); 我试着去做,可是好像没有效果。
//--------------------------------------------------------------------------- #ifndef MouseComponentH
#define MouseComponentH
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp>
//---------------------------------------------------------------------------
class PACKAGE TMouseComponent : public TComponent
{
private:
bool FVisible;
//String FHint;
bool FTimerActive;
TTimer *FTimer;
TNotifyEvent FOnTimer; TMouseMoveEvent FOnMouseMove;
TMouseMoveEvent FOnMouseExit;
TMouseMoveEvent FOnMouseEnter; TMouseEvent FOnMouseDown;
TMouseEvent FOnMouseUp;
TNotifyEvent FOnClick;
TNotifyEvent FOnDblClick;
TNotifyEvent FOnCreate;
TNotifyEvent FOnDestroy;
TNotifyEvent FOnActivate;
TNotifyEvent FOnDeactivate; void __fastcall SetHint(String Hint);
int __fastcall GetInterval();
void __fastcall SetInterval(int Value);
bool __fastcall GetTimerState();
void __fastcall SetTimerState(bool Value);
protected:
virtual void __fastcall SetVisible(bool Value);
virtual void __fastcall DoOnTimer(void); virtual void __fastcall DoClick();
virtual void __fastcall DoDblClick();
virtual void __fastcall DoMouseMove(TShiftState Shift, int X, int Y);
virtual void __fastcall DoMouseDown(TMouseButton Button, TShiftState Shift, int X, int Y);
virtual void __fastcall DoMouseUp(TMouseButton Button, TShiftState Shift, int X, int Y);
public:
__fastcall TMouseComponent(TComponent* Owner); __published:
__property bool Visible = { read=FVisible, write=SetVisible, default=false };
__property int TimerInterval = {read=GetInterval,write=SetInterval,default=1000};
__property bool TimerActive = {read=GetTimerState,write=SetTimerState,default=false}; __property TNotifyEvent OnTimer = {read=FOnTimer,write=FOnTimer}; __property TNotifyEvent OnClick = { read=FOnClick, write=FOnClick };
__property TMouseMoveEvent OnMouseEnter = {read=FOnMouseEnter,write=FOnMouseEnter};
__property TMouseMoveEvent OnMouseExit = {read=FOnMouseExit,write=FOnMouseExit};
__property TMouseMoveEvent OnMouseMove = {read=FOnMouseMove,write=FOnMouseMove};
__property TMouseEvent OnMouseUp = {read=FOnMouseUp,write=FOnMouseUp};
__property TMouseEvent OnMouseDown = {read=FOnMouseDown,write=FOnMouseDown}; __property TNotifyEvent OnCreate = {read=FOnCreate,write=FOnCreate};
__property TNotifyEvent OnDestroy = {read=FOnDestroy,write=FOnDestroy};
__property TNotifyEvent OnActivate = {read=FOnActivate,write=FOnActivate};
__property TNotifyEvent OnDeactivate = {read=FOnDeactivate,write=FOnDeactivate};
};
//---------------------------------------------------------------------------
#endif //--------------------------------------------------------------------------- #include
#pragma hdrstop #include "MouseComponent.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
// static inline void ValidCtrCheck(TMouseComponent *)
{
new TMouseComponent(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMouseComponent::TMouseComponent(TComponent* Owner)
: TComponent(Owner)
{
FVisible = false;
FTimer = new TTimer(NULL);
FTimer->Enabled = false;
FTimer->OnTimer = OnTimer;
FTimer->Interval = 1000;
}
//---------------------------------------------------------------------------
namespace Mousecomponent
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TMouseComponent)};
RegisterComponents("LBM", classes, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TMouseComponent::DoClick()
{
if (FOnClick)
FOnClick(this);
}
//---------------------------------------------------------------------------
void __fastcall TMouseComponent::DoDblClick()
{
if (FOnDblClick)
FOnDblClick(this);
}
//---------------------------------------------------------------------------
void __fastcall TMouseComponent::DoMouseMove(TShiftState Shift, int X, int Y)
{
if (FOnMouseMove)
FOnMouseMove(this, Shift, X, Y);
}
//---------------------------------------------------------------------------
void __fastcall TMouseComponent::DoMouseDown(TMouseButton Button, TShiftState Shift,
int X, int Y)
{
if (FOnMouseDown)
FOnMouseDown(this, Button, Shift, X, Y);
}
//---------------------------------------------------------------------------
void __fastcall TMouseComponent::DoMouseUp(TMouseButton Button, TShiftState Shift,
int X, int Y)
{
if (FOnMouseUp)
FOnMouseUp(this, Button, Shift, X, Y);
}
//---------------------------------------------------------------------------
void __fastcall TMouseComponent::SetVisible(bool Value)
{
FVisible = Value;
}
//---------------------------------------------------------------------------
void __fastcall TMouseComponent::DoOnTimer(void)
{
//
}
int __fastcall TMouseComponent::GetInterval()
{
return FTimer->Interval;
}
//---------------------------------------------------------------------------
void __fastcall TMouseComponent::SetInterval(int Value)
{
FTimer->Interval = Value;
}
//---------------------------------------------------------------------------
bool __fastcall TMouseComponent::GetTimerState()
{
return FTimerActive;
}
//---------------------------------------------------------------------------
void __fastcall TMouseComponent::SetTimerState(bool Value)
{
if (ComponentState.Contains(csLoading))
FTimerActive = Value; if (!ComponentState.Contains(csDesigning))
FTimer->Enabled = Value;
}