WindowState Änderung erkennen



  • Hallo !

    Ich habe ein Fenster, welches immer an der Oberfläche bleiben soll, da ich auf einem TouchScreen PC damit eine Tastatur aufrufen muss.

    Nun kann es aber vorkommen, dass es "minimized" werden kann und sich dann in der Taskleiste versteckt. Die ist bei mir aber auch unsichtbar.

    Wird ein Ereignis ausgelöst, wenn sich der WindowState ändert ?
    Oder kann ich eine Änderung von Hause aus verhindern ?

    OnHide oder OnDeactivate greifen nicht.
    Bliebe erst einmal nur eine zyklische Kontrolle von WindowState.

    Vielen Dank



  • Hallo,

    Dann wird wohl W_SIZE mit dem Parameter SIZE_MINIMIZED gesendet.
    siehe auch hier:
    http://msdn.microsoft.com/en-us/library/ms632646.aspx



  • Das einzige Bit was sich ändert ist WS_VISIBLE.
    Komisch ist nur, dass ich diese Änderung nicht über die Eigenschaft Visible des Formulares mitbekomme.
    Ich lasse nun einen Sekundentimer laufen und Frage dabei das Bit ab.

    void __fastcall TMainFormDlg::TimerWindowStateTimer(TObject *Sender)
    {
    	long wl = GetWindowLong(this->Handle, GWL_STYLE);
    	if ((wl & WS_VISIBLE) != WS_VISIBLE) {
    
    		SetWindowLong(this->Handle, GWL_STYLE, wl | WS_VISIBLE);
    //		Visible = false;
    //		Visible = true;
    		Left = 0;
    		Top  = 0;
    	}
    }
    

Anmelden zum Antworten