unit PaintBoxExt; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls,Buttons,CanvasPanel; type TPaintBoxExt = class(TPaintbox) private { Private declarations } FOnMouseLeave: TNotifyEvent; FOnMiddleDblClick: TNotifyEvent; protected { Protected declarations } procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; procedure WMMButtonDblClk(var Message: TWMMButtonDblClk); message WM_MBUTTONDBLCLK; procedure MouseWheelHandler(var Message: TMessage); override; public { Public declarations } Wnd: HWND; Constructor Create(AOwner:TComponent);override; property WheelAccumulator; published { Published declarations } (*Property OnMouseMove; Property OnClick; Property OnDblClick; Property OnDragDrop; Property OnEndDrag; Property OnDragOver; Property OnStartDrag; Property OnMouseUp; Property OnMouseDown; *) property OnMouseLeave:TNotifyEvent read FOnMouseLeave write FOnMouseLeave; property OnMiddleDblClick:TNotifyEvent read FOnMiddleDblClick write FOnMiddleDblClick; property OnMouseWheel; end; implementation Procedure TPaintBoxExt.CMMouseLeave(var Message: TMessage); begin if assigned(FOnMouseLeave) then FOnMouseLeave(self); end; constructor TPaintBoxExt.Create(AOwner: TComponent); begin inherited; //ControlStyle := ControlStyle - [csOpaque]; end; procedure TPaintBoxExt.MouseWheelHandler(var Message: TMessage); begin //Form := GetParentForm(Self); //if (Form <> nil) and (Form <> Self) then Form.MouseWheelHandler(TMessage(Message)) //else with TMessage(Message) do Result := Perform(CM_MOUSEWHEEL, WParam, LParam); end; procedure TPaintBoxExt.WMMButtonDblClk(var Message: TWMMButtonDblClk); begin FOnMiddleDblClick(Self); end; end.