Programminstanz aus minimierten Zustand in den maximierten Zustand wandeln



  • Hallo,

    ich prüfe bei meinem Programmstart, ob eine Programminstanz des gleichen Typs bereits vorhanden ist um damit eine Zweitinstanzierung der Anwendung zu verhindern. Sollte das Formular bereit hinter anderen Formularen existiern, wird das bereits existierende Formular in den Vordergrund geholt. Leider gelingt es mir nicht das Formular aus dem minimierten Zustand wieder in einen maximierten Zustand zu bekommen. Was muss ich tun? Hier ein Auszug:

    // Versuche Mutex:
    		HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, "Programm nr1");
    
    		// Mutex-Handle ist 0, Mutex erzeugen:
    		if (!hMutex)
    			hMutex = CreateMutex(0, 0, "Programm nr1");
    		else {
    			// Dies ist die 2. Programminstanz. Die erste Instanz in
    			// Vordergrund bringen:
    			LockSetForegroundWindow(LSFW_UNLOCK);
    			HWND hWnd = FindWindow(0, "Programm nr1");
    			//OpenIcon(hWnd);
    		  	SetForegroundWindow(hWnd);
    
    			return 0;
    


  • Es gibt die ShowWindow Funktion aus der Win32 API. Mit ShowWindow( hWnd, SW_SHOWMAXIMIZED ) sollte das eigentlich gehen.



  • Danke ersteinmal für die Antwort. Leider funktioniert das nicht korrect. Wenn diese Methode aufgeruffen wird, wird zwar mein Formular dargestellet aber der Inhalt des Formulars wird durch ein graues Panel überlagert.
    Das Formular liegt ohne Inhalt vor.
    Woran mag das liegen?



  • Also bei mir funktionierts...

    Sonst probier doch erst einmal SW_RESTORE, vielleicht reagiert dein Formular nicht richtig auf die Grössenänderung und verbockt das Layout.



  • Hi,

    warum so umständlich, WindowState = wsMaimized oder WindowState = wsNormal sollte auch funktionieren.

    Gruß Mümmel



  • Weil FindWindow ein Window Handle zurückgibt und keinen Zeiger auf TForm.



  • DocShoe schrieb:

    Weil FindWindow ein Window Handle zurückgibt und keinen Zeiger auf TForm.

    Hm, dann sende doch eine Message an das Handle. Dann kannst du im Form selbt prüfen, welchen Zustand es gerade hat und entsprechend reagieren. Ich wüsste zumindest nicht, wie man über das Handle rausfindet, ob das Form minimiert, oder nur im Hintergrund, oder eventuell sogar nur im Tray ist.

    Schönmes Wochenende!


Anmelden zum Antworten