原意是这样的:一个主程序,还有一个呢是消息提醒的程序,在调用消息提醒程序的同时不能影响主程序的输入过程,就是说消息程序在显示,但焦点还在主程序!

解决方案 »

  1.   

    听说用SendMessage或PostMessage可以实现,但我看这两个函数好象都是通过windows caption来找窗体的,能不能只让应用程序得到焦点??
    大家帮帮忙哦,今天晚上就要搞定哦……
      

  2.   

    To:Wally_wu(Wally) 
       不清楚?这个消息程序类似Word的助手,当有消息来的时候才出现……两个窗体我做过了,程序得到焦点有点儿问题!消息显示的时候其它的窗体就把焦点转移了,消息会在任何窗体的时候都有可能出现,不可能去控制所有的窗体的焦点吧……
      

  3.   

    我不太明白你的意思,我这看你(说消息程序在显示,但焦点还在主程序)这句了:想想是不是有点类似“金山词霸”在取词后显示的效果:出现Tip,焦点不会转移。如果是这样可以使用这样的API:
    ::SetWindowPos(hFxZi,HWND_TOPMOST,ptc.x+20,ptc.y+20,0,0,
    SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE);
    //显示字典窗口
    SWP_SHOWWINDOW|SWP_NOACTIVATE 这个参数就是使窗口显示,但不激活它。
    ::ShowWindow(hFxZi,SW_HIDE);//隐藏字典窗口
      

  4.   


      在主窗体中控制其他窗体上的memo,焦点怎么会过去呢?我试过了,可行。
      

  5.   

    To:zhdhj(dhj) 
        ::SetWindowPos(hFxZi,HWND_TOPMOST,ptc.x+20,ptc.y+20,0,0,SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE);
    你写的这个我不太明白……就最后一个参数SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE
    可以这样写的吗,5.0好象不行呀,只用SWP_NOACTIVATE和只用SWP_SHOWWINDOW都不行呀?!
      

  6.   

    具体的意思是这样的:窗体A:数据录入;窗体B消息提醒。
         当正在A中输入数据时,B有可能弹出(StayOnTop),但要求这个时候A不能失去焦点,还要能看到B!
      

  7.   

    如果你的两个window是同一个Application的话,用这样做:
      ShowWindow(Form2.Handle, SW_SHOWNA);
    如果你的Windows是不同一个Application的话,
    先在Application1定义一个message
    const
      WM_Test     = WM_USER + 10;
    然后通过这个API函数:
      SendMessage(Form1.Handle, WM_Test, 1, 0);
    //TButton(Sender).Tag为button的TAg属性Application2接收是可以这样写:
    procedure TestMessage(var Msg: TMessage); Message WM_Test ;
    procedure TForm1.TestMessage(var Msg: TMessage);begin
    with msg do
      begin
        Case WParam of
          1: ShowWindow(Form2.Handle, SW_SHOWNA);
        end;
    end;
      

  8.   

    如果你的两个window是同一个Application的话,用这样做:
      ShowWindow(Form2.Handle, SW_SHOWNA);
    如果你的Windows是不同一个Application的话,
    先在Application1定义一个message
    const
      WM_Test     = WM_USER + 10;
    然后通过这个API函数:
      SendMessage(Form1.Handle, WM_Test, 1, 0);Application2接收是可以这样写:
    procedure TestMessage(var Msg: TMessage); Message WM_Test ;
    procedure TForm1.TestMessage(var Msg: TMessage);begin
    with msg do
      begin
        Case WParam of
          1: ShowWindow(Form2.Handle, SW_SHOWNA);
        end;
    end;
      

  9.   

    呵呵,应该先FindWindow再说吧!找到窗口句柄后再激活那个窗口!
      

  10.   

    To pandaxj(框):我是以C++的规则写的,应为我不太用dephi
    pascal规则的是:
    SetWindowPos(form2.handle,HWND_TOPMOST,left,top,width,height,
    SWP_SHOWWINDOW or SWP_NOACTIVATE );
    在Win98+dephi5 中编译通过。