Einzelnen Beitrag anzeigen

Benutzerbild von Orakel-von-Delphi
Orakel-von-Delphi

Registriert seit: 27. Jan 2004
Ort: Mittelhessen
45 Beiträge
 
Delphi 2007 Professional
 
#2

Re: TrackPopupMenu im WinThread bzw. per Timer schließen ???

  Alt 11. Sep 2008, 20:22
Meine Lösung:

Auf den Event WM_ENTERMENULOOP hin starte ich einfach einen Thread:

Delphi-Quellcode:
int CCloseTracker::Run()
{
  MSG msg;
  int iTimer = 0;
  int iWaitInterval = 10; /* mSec */
  int iMaxWait = 20; /* Sec */

  while( TRUE )
  {
    if( !PeekMessage( &msg, 0, 0, 0xFFFFFFFF, PM_REMOVE) )
    {
        Sleep(iWaitInterval);
        iTimer++;
        if( iTimer > iMaxWait * 1000 / iWaitInterval )
            break;
        else
            continue;
    }

    else
    {
        switch(msg.message)
        {
        case WM_QUIT:
              TRACE("CCloseTracker: Termination without action !\n");
              return 0;
        default:;
        }

    }
  }

  TRACE("CCloseTracker: Close popup ...\n");

  for(int i = 0; i < 4; i++) /* Maximal 4 Level */
  {
    PostMessage(m_pParent->m_hWnd, WM_KEYDOWN, VK_ESCAPE, 1);
    PostMessage(m_pParent->m_hWnd, WM_KEYUP, VK_ESCAPE, 0);
  }

  
  return 0;
}
Der sorgt nach 20 sec. dafür, dass sich alles wieder schließt.

Sollte ein WM_EXITMENULOOP eintreten, wird dort der Thread "gekilled".
Michael
  Mit Zitat antworten Zitat