追踪鼠标(2) __property TNotifyEvent OnMouseEnter = {read = FOnMouseEnter, write = FOnMouseEnter}; __property TNotifyEvent OnMouseExit = {read = FOnMouseExit, write = FOnMouseExit}; }; //exSpeedButton.cpp TexSpeedButton::TexSpeedButton(TComponent *Owner):public TSpeedButton(Owner) { FEnterColor = clBlue; //移入颜色缺省为蓝色 } void TexSpeedButton::WndProc(TMessage &Message) { TCustomControl::WndProc(Message); //调用祖先类的缺省处理(注:这是4.0版的写法, 5.0中TCustomControl的WndProc方法已经被隐藏,只能用TControl::WndProc) if (Message.Msg == CM_MOUSEENTER) //处理CM_MOUSEENTER消息 { MouseEnter(); Repaint(); //别忘了刷新界面 } if (Message.Msg == CM_MOUSELEAVE) //处理CM_MOUSELEAVE消息 { MouseEnter(); Repaint(); //同样别忘了刷新界面 } } void TexSpeedButton::MouseEnter(void) { if(FOnMouseEnter) //如果事件处理句柄存在(用户写了相应事件) { FOnMouseEnter(this); //执行用户定义的事件 } else //否则执行缺省处理 { FOldFontColor = Font->Color; Font->Color = FEnterFontColor; } } void TexSpeedButton::MouseExit(void) { if(FOnMouseEnter) //如果事件处理句柄存在(用户写了相应事件) { FOnMouseEnter(this); //执行用户定义的事件 } else //否则执行缺省处理 { Font->Color = FOldFontColor;