点击combobox,会出现一个下拉框。如果此时鼠标点击其他地方,则下拉框消失,鼠标点击的地方获得焦点。现在想搞类似的一个form,当鼠标点击该form以外的地方时,form消失,鼠标点击的地方获得焦点。注:该form(formA)必须为另一form(formB)生成。鼠标有可能点在formB内,也有可能点在程序外的地方。如果点在程序内(formB内),则formB上鼠标对应的控件得到焦点。如果点在程序外,当然谁也不得到焦点,但是formA还是应该消失。

解决方案 »

  1.   

    formA消失以后怎样再让它显示呢?
    我觉得还是设透明会比较好
      

  2.   

    回玉米:
       formA是由formB生成的。回rouqing :
       可以这样理解:
        formB是个大的窗体,里面有个文本框,还有个按钮。点一下按钮,就生成一个小小的窗体formA(假设没有遮住formB上的文本框)。
       此时鼠标在文本框上方按一下,要求发生以下两件事情:
       1,formA消失。消失不是vusible=false,而是close;
       2,文本框得到焦点。
      

  3.   

    写写我理解的大概意思:formb.button.click   forma.show;//显示的位置可以通过ini文件读取或者ScreenToClient函数转一下,控制窗              //体显示的位置;
    formb.edit.enter// 处在焦点输入状态   SendMessage(forma.handle,0,0,WM_CLOSE);以上事件控件都有,你按这个思路写写看吧
      

  4.   

    要达到楼主的效果,只要给窗口添加上WS_POPUP风格即可!菜单、combobox的下拉框,都是带有WS_POPUP的窗口,有这个风格的窗口,特点就是失去焦点就消失!重载CreateParams,使用SetWindowLong加入WS_POPUP。
      

  5.   

    可以尝试在formA.FormDeactivate事件中加入close语句
      

  6.   

    在WM_KILLFOCUS时消失。
    或者在VCL内部消息:CM_FOCUSECHANGED消息中判断当前的焦点是否在本窗体。不在就消失。之前实现过。