Fenster nach minimieren wieder anzeigen
-
Im Hintergrund von welchem Fenster? Wenn es sich bei dem Fenster um ein "topmost window" handelt, dann bleibt dein Fenster hinter diesem Fenster.
Oder wird dein Fenster gar nicht mehr angezeigt? Dann liegt es wohl daran, daß der "WindowState" noch auf "Minimize" steht und du das Fenster wieder im Normalzustand anzeigen mußt:WindowState = wsNormal;
Und lies auch mal How to Restore a Delphi Form from Minimized / Maximized state to the Previous State, Programmatically! .
-
@drummi
Mein Programm hat nur diese eine Fenster. Ansonsten sind dann zum Beispiel Microsoft Word, Notepad++ usw. geöffnet. Wenn ich dannShowWindow(Form1->Handle, SW_SHOW);
oder
Visible = true; //und (!) ShowWindow(Application->Handle, SW_SHOW);
aufrufe wird mein Programm im Hintergrund geöffnet. So das ich das Programm in der Taskleiste anklicken muss und danach erst erscheint das Programm im Vordergrund und man kann damit arbeiten. Denn wenn Notepad++ im Vordergrund ist kann ich ja schlecht mein Programm benutzen. Hoffe jetzt ist klar welches Fenster im Vordergrund erscheinen soll.
Frage:
Funktioniert der Code bei euch? Erscheint nach dem Minimieren das Programm bei euch im Vordergrund? Hat eine es ausprobiert?
-
@th69 Das hat leider auch nicht geholfen.
-
Hast du denn jeweils nur genau eine der 5 Methoden ausprobiert?
Du mußt natürlich zuerst das Fenster anzeigen lassen und danach dann in den Vordergrund bringen.Zur Info: In einem C# Tray-Projekt benutze ich zuverlässig folgendes:
if (!Visible) { Visible = true; WindowState = FormWindowState.Normal; Activate(); }
(sollte also im Prinzip auch so mit der VCL umsetzbar sein)
-
Eventuell ist es auch eine eigenart von Windows selbst.
Ich hatte schon einigemale folgendes phänomen gehabt:
Hatte im Explorer eine kopieraktion angestoßen und der Kopier-Fortschrittsdialog wurde dabei nicht im Vordergrund geöffnet
-
Wichtig ist, daß bei "BringToFront" das Fenster selbst schon den Fokus hat (also "active" ist), ansonsten erscheint der Flash-Effekt beim Taskbar-Button (d.h. das orange Blinken).
Und genau dies erledigt dann in .NET dieActivate()
-Methode.
-
@th69 Ich habe alles mögliche ausprobiert. Einzel, alle hintereinander in unterschiedliche Reihenfolge. Alle Handels ausgetauscht mal Application->Handle mal this->Handle. Und deine Methode von C# ebenfalls. Leider kein Erfolg.
-
@th69 gerade ausprobiert und es hat nicht geholfen.
-
@firefly Ja die vermutung habe ich auch.
-
Welches Windows benutzt du denn?
Ich habe noch Windows 7 und da funktioniert es ja mit meinem .NET-Programm (das ja intern auch nur die WinAPI benutzt).
-
@th69 Windows 10
-
Hier ist eine Routine in Delphi, die lässt sich auch leicht in C++ umsetzen: