![]() |
TrackPopupMenu im WinThread bzw. per Timer schließen ???
Hallo Gemeinde !
Gibt es eine Möglichkeit ein TrackPopupMenu innerhalb eines Threads zu öffnen (meine Versuche schlugen leider fehl) od. das TrackPopupMenu nach einiger Zeit über ein bestimmes Kommando seitens eines Timers/Threads dazu zu bringen, dass es sich schließt ? Das Senden von WM_CANCELMODE generiert zwar eine Nachricht WM_EXITMENULOOP und der Popup schließt sich, aber die Funktion TrackPopupMenu kommt trotzdem nicht zurück ... Hat jemand eine Idee ? Edit: ![]() Hier gibet leider keine Antwort :( |
Re: TrackPopupMenu im WinThread bzw. per Timer schließen ???
Meine Lösung:
Auf den Event WM_ENTERMENULOOP hin starte ich einfach einen Thread:
Delphi-Quellcode:
Der sorgt nach 20 sec. dafür, dass sich alles wieder schließt.
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; } Sollte ein WM_EXITMENULOOP eintreten, wird dort der Thread "gekilled". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz