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_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;
      

  2.   

    本来是给lihuasoft刀友的,因为我结贴了他还在回复,不过你开口了,也意思一下。
      

  3.   

    使用 Application.OnMessage 处理消息 效率非常低的.
      

  4.   

    你改用POSTMESSAGE就可以了
      

  5.   

    应该是少写什么内容所以没传递过来,如.Handle的定义和接受,应该是子窗口没收到这个消息。
    可惜我是菜鸟,不知要写什么,又放在哪里。
      

  6.   

    子窗口能如何接受SendMessage((Components[iii] as TDBGrid).Handle,WM_KEYDOWN,VK_UP,0) 
    我是菜菜鸟,提示一定请要具体,菜得就象没插电还以为电脑坏了一样。
      

  7.   

    你的东东怎么接 我不知道,但是你用stringgrid能达到想要的效果,就是它会自动模拟上下键.