Zitat von
marabu:
Es reicht, wenn du das aktuelle Fenster deiner Anwendung in den Vordergrund zerrst - die InputBox setzt sich dann selbst noch davor. Ich fürchte allerdings, dass ein anderes Fenster immer noch weiter im Vordergrund sein wird. Nimm als Beispiel den Task-Manager. Du kannst für sein Fenster AlwaysOnTop festlegen und durch unsere Bemühungen wirst du deine InputBox da auch nie davor schieben können. Wie ich schon erwähnte bietet der
Windows Platform SDK da einiges an Informationen.
marabu
Zu dem Zeitpunkt, an dem dieser Aufruf von InputBox erfolgt (FormCreate des Hauptfensters, hatte ich eingangs vergessen zu erwähnen) ist noch kein Fenster sichtbar bzw. aktiv. Deswegen funktioniert Application.BringToFront ja nicht. Bei bereits erfolgter Initialisierung der Fenster - Form Create und Show - funktioniert Application.BringToFront ja wunderbar.
Das verdeckende Fenster ist übrigens kein StayOnTop-Fenster wie der TaskManager, sondern ein ganz gewöhnliches WindowsExplorer-Fenster. (Beim Endanwender könnten es auch andere normale Fenster sein, welche die InputBox verdecken).
Aus programmtechnischen Gründen muss der Aufruf von InputBox leider schon an dieser Stelle erfolgen. Deshalb kann ich auch nicht ein eigenes TForm-Formular für die Eingabe verwenden, weil zu diesem Zeitpunkt die anderen Formulare noch nicht erzeugt wurden.
Der einzige Ausweg, den ich hier sehe, wäre die Erstellung einer eigenen
DLL mit einem Formular für die Eingabe und diese dynamisch aufzurufen. Kann eine
DLL denn ihr eigenes Fenster mit BringToFront in den Vordergrund bringen?
Die Verwendung einer
DLL ist aber wiederum fehleranfällig, denn sie könnte beim Endanwender aus irgendwelchen Gründen abhanden kommen usw.