Rt,如果我在窗体的BUTTONCLICK事件里写,:让当前窗体失去焦点,再取当前焦点,是不是得到的就是前一个窗体的焦点!如果是,那怎么让窗体失去焦点?

解决方案 »

  1.   

    n你问的问题真的很猛... 你点BUTTON那么你的窗体就是处在焦点状态,除非你SHOW别的WINDOW..我搞一下先
      

  2.   

    很简单
    SendMessage(Handle,WM_KillFocus,0,0);
      

  3.   

    哎...我想了半天,它当前就是焦点所在最前面的窗口,如果不最小化的话真的很难把焦点传到下面的窗口,消息过滤也不行.你还是最小化的时候写然后恢复大小吧procedure TForm1.Timer1Timer(Sender: TObject);
    begin
       application.Minimize;
       timer2.Enabled:=true;
       timer1.Enabled:=false;
    end;procedure TForm1.Timer2Timer(Sender: TObject);
    begin
    edit1.Text:=inttostr(getforegroundwindow);
    application.Restore;
    timer2.Enabled:=false; //TIMER2开始是FALSE
    end;
      

  4.   

    楼主肯定是在不知道下个窗体是什么的情况下提这个要求撒.. 楼主可以搞个CHECKEDBOX 控制TIMER1的ENABLE属性,这样就可以反复获得下个焦点的句柄了
      

  5.   

    楼上, 可试:OtherWindow.BringToFront;
      

  6.   

    也可以这样:Self.SendToBack;
      

  7.   

    找了一下, 除上面说的BringToFront和SendToBack这两个TControl的方法可以使用,
    还有以下几个API函数可以使用:GetNextWindow  -- 可以返回某窗口(Window)前面或后面按Z序排列的窗口句柄
    BringWindowToFront --- 这个就不用说了...MicroSoft Windows提供了更多API可以查找使用.
      

  8.   

    12楼打错字了, 更正:BringWindowToTop汗自己
      

  9.   

    在一般的情况下,当一个窗口A失去焦点转到另一个窗口B之后,在窗口的ZOrder当中B的下一个窗口仍然是A,于是可以不用切换焦点,直接GetNextWindow.但是很明确的是,ZOrder很容易被改变.
      

  10.   

    //-----------------------------------
    Self.SendToBack;
    sleep(1000);
    showmessage(inttostr(getfocus));
    self.BringToFront;  
    //===================================这个和最小化最大化就没啥区别... 我那上面看着多,是做实验的  
    //=======================================================
    showmessage(inttostr(GetNextWindow(handle,GW_HWNDNEXT)));
    //=======================================================貌似就个是取得下个窗口的句柄..与上面的相比
    SHOW出的数据压根就不一样
      

  11.   

    呵呵如果想深入研究的话,去研究一线windows消息机制吧!会对你有帮助的。