我自己写了一个控件,如下:
TCustomDraw = class(TCustomControl)
private
    procedure CMMouseWheel(var Message: TCMMouseWheel); message CM_MOUSEWHEEL;
    procedure WMMouseWheel(var Message: TWMMouseWheel); message WM_MOUSEWHEEL;
end;procedure TCustomDraw.WMMouseWheel(var Message: TWMMouseWheel);
begin
   MoveToMapCenter(Message.WheelDelta);//根据滚动的上下方向缩放地图
end;procedure TCustomDraw.CMMouseWheel(var Message: TCMMouseWheel);
begin
    MoveToMapCenter(Message.WheelDelta);//根据滚动的上下方向缩放地图
end;我想在控件内利用滚轮进行地图的缩放,可是当我利用VCL的消息截取机制通过上述方式截取消息时,程序却没有任何反映,即我的截取消息是不成功的,单步跟踪也执行不到断点处,请问这是为何啊?我应该如何实现我的需求呢.

解决方案 »

  1.   

    给你一个让dbGrid处理滚轮的例子,原理是一样的.
    1.自定义变量用来标记老的消息处理方法:
       OldGrid1Wnd:TWndMethod;
    2.自定义新的消息处理函数:
       a声明 Procedure newdbgrid1wnd(var message:Tmessage); 
       b定义 
    procedure TForm9.newdbgrid1wnd(var message:tmessage);
    var
    isneg:boolean;
    begin
      if message.msg=wm_mousewheel then
      begin
        isneg:=short(message.WParamHi)<0;
        if isneg then
        begin
          dbgrid1.DataSource.DataSet.MoveBy(1);
        end   //if..end;
        else
          dbgrid1.DataSource.DataSet.MoveBy(-1);
        begin
        end;//if..else..end;
      end
      else
      begin
        oldgrid1wnd(message);
      end;//if...else..en;
    end;
      

  2.   

    补充一点.在窗体创建时或在你认为合适的时候要先将wndprc:=newdbgrid1wnd;