線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:919
推到 Plurk!
推到 Facebook!

如何做个组件可以响应鼠标事件

尚未結案
zhvickie
一般會員


發表:16
回覆:41
積分:11
註冊:2003-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-28 22:45:59 IP:137.132.xxx.xxx 未訂閱
如何做个组件可以响应鼠标事件? 比如有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;
}    
系統時間:2024-05-17 1:15:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!