我在DLL中创建了一个窗口,并在窗口中加如了Times定时控件,设置了ontime事件,用热键激活该窗口并用CLOSE方法关闭该窗口后激活了Times控件的Enable=ture;但好象关闭窗口Ontime事件并未被触发,请问有什么方法让窗口关闭后也能定时,不用Times控件也行,我也知道可以用API中的settimer或其他的定时函数,但好象用后只要用close方法将窗口关闭后,其中的任何代码都未被执行,有什么解决方法吗?最好能有代码,谢谢.

解决方案 »

  1.   

    窗口关闭FREE以后,自然上面的控件就FREE掉了
    实际上你可以把窗口HIDE掉而不是FREE掉!
      

  2.   

    不行啊,因为程序设计需要,如果用HIDE隐藏的话,将会有显示问题(这是本程序的要求),有没有其他方法
      

  3.   

    用CLose方法关闭窗口,会将窗口FREE??
      

  4.   

    不知你的Form在OnClose事件中是否设置了Action := caFree;?反正我试了一下应该是可以的,只要Form没有Free。
      

  5.   

    一定要用timer吗?试一下thread。
      

  6.   

    settimer可以放置一个回调过程也是可以完成这个任务不过要开始的DLL里面的APPLICATION.HANDLE等与调用的APPLICATION.HANDLE
    然后在ONMESSAGE里面进行处理
      

  7.   

    我想知道你的TIMER控件实现什么定时功能的?或许你可以换一种思路
      

  8.   

    TO:zjybestzjybest(zjybestzjybest) 
    我也知道可以用settimer但具体的语法还有各种声明我都忘了能否给出一个完整的代码,谢谢在这里我讲明下我的用途和功能。
    我写的这个程序是在DLL中封装了一个窗口并设置了HOOK,运行后在另外的程序A中按相应的热键就可以呼出DLL中的窗口,这个窗口的作用是设置相关的定时器中事件的运行参数,设置好后返回程序A定时器就能工作,并且能随时再呼出窗口进行相关设置参数,返回后能继续运行定时器的事件,请问用什么方法能使定时比较准,速度在1mm级别,最好不要用Timer控件,我想用Settimer请给个代码。谢谢了。
      

  9.   

    第一 你的调用方式 如果不是 动态调用 一般你free掉窗口以后 dll 不会从内存中移除
    你用了hook 我想应该是静态调用的吧。第二 可以用回调 实现参数传递 不用dll的窗体第三 非要用窗体的话  ontimer你是不是把它写在 dll的窗体类里了 如果这样 他肯定会在free窗体后也没free 掉了    怎么改动就不需我多说了