//先用这句设置处理过程
SetWindowLong (FHandle, GWL_WNDPROC, LongWord (@NewWndCallBack));//实际的处理过程在这里实现
procedure TStockDrawBaseObject.ProcessMessage(
  var Message: TMessage; var Result: integer);
  var Rect: TRect;
      ch: Char;
      index: integer;
      bResult: boolean;
      Brush  :HBRUSH;
      parentHWND  :HWND;
begin
   Case message.Msg of
      WM_PAINT:
      begin
         Paint (TWMPaint (Message), result);
      end;      WM_ERASEBKGND:
      begin
         self.EraseBkgnd(TWMEraseBkgnd(Message), result);
      end;      WM_LBUTTONDOWN:
      begin
         DoLButtonDown (TWMLButtonDown (Message));
      end;      WM_LBUTTONUP:
      begin
         DoLButtonUp (TWMLButtonUp (Message));
      end;      WM_LBUTTONDBLCLK:
      begin
         DoLButtonDblClk ( TWMLButtonDblClk (Message));
      end;      WM_MOUSEWHEEL:
      begin         bResult  := Result <> 0;
         DoMouseWheel (self, TCMMouseWheel(Message).ShiftState,
            TCMMouseWheel(Message).WheelDelta,
            SmallPointToPoint(TCMMouseWheel(Message).Pos),  bResult);
         if bResult then
            result  := 1
         else
            result  := 0;
      end;      WM_MOUSEMOVE:
      begin
         DoMouseMove (TWMMouseMove(Message));
      end;
      
      WM_CHAR, WM_SYSCHAR:
      begin
         DoChar (TWMChar (Message));
      end;
      
      //其他消息捕获成功,这里普通的键也成功,VK_NEXT VK_PRIOR等几个特殊键不能捕获
      WM_KEYDOWN, WM_SYSKEYDOWN:
      begin
         DoKeyDown(TWMKeyDown (Message));
      end;   end;   if Assigned (FStockDrawOnMessage) then
      FStockDrawOnMessage (FHandle, Message, result);   if self.FManager <> nil then
      FManager.ProcessMessage(FHandle, Message, result);
end;