Announcement

Collapse
No announcement yet.

Frage zu OnCloseQuery

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Frage zu OnCloseQuery

    Hallo,

    wenn ein Programm geschlossen werden soll, wird das Ereignis OnCloseQuery ausgelöst. Kann man es unterscheiden, woher das Ereignis kommt, also mir geht es darum zu unterscheiden ob der Benutzer das Programm schliessen will (z.B. durch Klick auf das X rechts oben) oder ob der Rechner heruntergefahren wird.

    Gruss
    Sebastian

  • #2
    Hallo Sebastian,

    das weiß ich gar nicht so genau. Aber ich habe eine App. die verhindert, das Windows heruntergefahren werden kann, da fange ich die Botschaft von Windows zum Beenden der App. ab:

    In der Header Datei des Forms Funktion deklarieren:
    <PRE>
    void __fastcall WndProc(Messages::TMessage &Message);
    </PRE>
    Die Funktion:
    <PRE>
    void __fastcall TForm_MainViewer::WndProc(Messages::TMessage &Message)
    {
    if (Message.Msg == WM_QUERYENDSESSION)
    {
    Message.Result = false;
    ShowMessage("Windows kann nicht beendet werden. Beenden Sie zuerst das Programm XYZ.");
    }
    else
    TForm::WndProc(Message);
    }
    </PRE>
    Hierbei wird die Message WM_QUERYENDSESSION abgefangen und das Message.Result auf false gesetzt. Somit wird Windows mitgeteilt, das es nicht heruntergefahren werden kann.
    Andere Botschaften werden an den Standard-Messagehandler weitergereicht.

    Ist es das was Du gesucht hast?

    Ach so, es gibt da auch noch die Funktion WMQueryEndSession(TWMQueryEndSession &msg), die funktioniert aber nicht mit allen Betriebssystemversionen zuverlässig. Selbst obige Routien versagt ab und zu unter Windows NT 4.

    Grüße

    Joche

    Comment


    • #3
      Sebastian,

      was genau willst Du denn erreichen?

      Gruß,<br>
      Ja

      Comment

      Working...
      X