Application.OnMessage:= 放在主程序中对子程序部分无效(前面部分有效,红色无效) 如在子程序中有效。 
不想分别放在子窗口中,另外前面部分是在主窗口中,对所以子窗口有效,在子窗口加了黄色部分,好象就把主窗口的ommessage屏蔽了,我就把红色部分放在主窗口中,但无效。又都放到子窗口中,绿色黄色部分都是有效的 
现都想主程序中,或部分放在主程序中,目前只能分别放在子窗口中,太累。   if  Msg.Message=WM_KEYDOWN  then 
  begin 
  if (Msg.wParam=VK_RETURN)  then  Keybd_event(VK_TAB,  0,  0,  0); 
  end 
  else 
  if  (Msg.message  =  WM_MOUSEWHEEL) then 
    for  iii:=ComponentCount-1  downto  0  do 
      if  ((Components[iii] is TDBGrid) and (Components[iii] as TDBGrid).Focused) then 
      begin 
          if  Msg.wParam >0  then 
            SendMessage((Components[iii] as TDBGrid).Handle,WM_KEYDOWN,VK_UP,0) 
          else 
            SendMessage((Components[iii] as TDBGrid).Handle,WM_KEYDOWN,VK_DOWN,0); 
          Handled:=True; 
      end;

解决方案 »

  1.   

     if  (Msg.message=WM_MOUSEWHEEL) and (Screen.ActiveForm.ActiveControl is TDBGrid) then
          begin
              if   Msg.wParam >0   then
                 SendMessage(Screen.ActiveForm.ActiveControl.Handle,WM_KEYDOWN,VK_UP,0)
              else
                 SendMessage(Screen.ActiveForm.ActiveControl.Handle,WM_KEYDOWN,VK_DOWN,0);
              Handled:=True;
          end;