Minimierten Modus wird nicht erkannt



  • hi.

    Wo könnte da der Fehler liegen:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
       Application->OnMinimize = Timer2Timer;
       Timer2->Interval        = 1000;
    }
    
    void __fastcall TForm1::Timer2Timer(TObject *Sender)
    {
       if (WindowState == wsMinimized)
             Application->Title = "Shutdown in: " + Label2->Caption;
       else
          Timer2->Enabled = false;
    }
    

    Das Aufrufen des Timers funktioniert, aber obwohl das Fenster minimiert ist geht er in der If-Anweisung zum "Timer2->Enabled = false".

    Warum?



  • Startest du deine Anwendung im Minimized-Modus?



  • Nein. Der Sinn meines Programms ist folgender: Ich habe eine Zeit (eine einfache Zahl) die in meinem Programm herunterläuft. Nach ablaufen dieser Zeit passiert was. Auf jeden Fall soll aber, wenn das Programm minimiert ist, der aktuelle Wert in der Application->Title (also in der Taskleiste neben dem Button) stehen. Der Timer soll die Anzeige jede Sekunde wiederholen, da sich der Wert dieser Zahl auch jede Sekunde ändert. Nur krieg ich das eben nicht hin.



  • Sebastian Thalhammer schrieb:

    Wo könnte da der Fehler liegen:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
       Application->OnMinimize = Timer2Timer;
       Timer2->Interval        = 1000;
    }
    

    Ich würde vermuten die Zuweisung von OnMinimize bringt nicht den gewünschten
    Effekt. Vielleicht wird das OnMinimize-Event schon generiert bevor die
    entsprechende WindowsState-Eigenschaft gesetzt wird.
    Schreibe Dir stattdessen eine Methode, die aufgerufen wird, sobald
    das Minimize-Event auftritt. (Im Moment rufst Du ja direkt die Timer-Methode
    auf.)
    In dieser Methode würde ich den Timer aktivieren. Das Deaktivieren passiert
    ja automatisch in der OnTimer-Methode.

    Gruß,

    Alexander



  • Wenn das Programm nicht minimiert gestartet wird, dann geht doch der Timer sofort aus! Irgendwas läuft in deiner Vorstellung des ganzen verkehrt.



  • wo muss ich das überprüfen mit dem OnMinimize? Das weiss ich nicht.
    Es geht nicht im OnActivate. Der Rest sieht bei mir so aus:

    // Eigene Aktion mit der ActionList erstellt
    // Wird sofort beim Minimieren aufgerufen. Noch vor Form::Activate. Das kann 
    // doch eigentlich nicht sein oder?
    
    void __fastcall TForm1::MinimizedTitleExecute(TObject *Sender)
    {
       Timer2->Enabled = true;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Timer2Timer(TObject *Sender)
    {
       if (WindowState == wsMinimized)
          Application->Title = "Shutdown in: " + Label2->Caption;
       else
          Timer2->Enabled = false;
    }
    

    Tja, ich weiss nichts wie es sonst gehen könnte. Brauche dringend Hilfe. 😃



  • Im OnMinimize startest du den Timer, im OnTimer setzt du den Application-Title und im OnRestore stoppst du den Timer und setzt ggf. den Title zurück.
    Fertig.


Anmelden zum Antworten