AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) C++ TrackPopupMenu im WinThread bzw. per Timer schließen ???
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Orakel-von-Delphi · begonnen am 6. Sep 2008 · letzter Beitrag vom 11. Sep 2008
Antwort Antwort
Benutzerbild von Orakel-von-Delphi
Orakel-von-Delphi

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

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

  Alt 6. Sep 2008, 13:00
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:

http://www.codeguru.com/forum/showthread.php?t=162333

Hier gibet leider keine Antwort
Michael
  Mit Zitat antworten Zitat
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz