![]() |
InputBox nach vorne bringen?
Wenn beim Aufruf von InputBox aus meinem Programm ein Fenster eines anderen Programmes im Vordergrund ist, ist die Input-Box möglicherweise hinter diesem Fenster versteckt.
Was kann man machen, um die Input-Box in den Vordergrund zu bringen? Ich habe bereits versucht, vor dem Aufruf von InputBox Application.BringToFront aufzurufen, aber das wirkt nicht:
Delphi-Quellcode:
Wer weiß eine Lösung?
Application.BringToFront;
MyVar:= InputBox('Titel', 'Frage:', 'Vorgabe'); |
Re: InputBox nach vorne bringen?
Herzlich Willkommen in der Delphi-PRAXiS, PeterPanino.
Du wirst es nicht immer schaffen, dass ein bestimmtes Fenster im Vordergrund ist. Mit fortschreitender Windows-Version verlagerte MS die Kontrolle immer mehr nach innen. Aber in deinem Fall sollte TForm.BringToFront (manipuliert die Z-Order) oder Windows.SetForegroundWindow (wird von Application.BringToFront verwendet, aber nicht unbedingt) helfen. Wenn nicht, dann wäre interessant, welche Fenster deine Box verdecken. Im Windows Platform SDK kannst du Näheres zum Thema lesen. Freundliche Grüße vom marabu |
Re: InputBox nach vorne bringen?
Zitat:
Bez. TForm.BringToFront/Windows.SetForegroundWindow: Wie soll das konkret funktionieren? Der Aufruf von InputBox gibt ja kein Handle zurück, mit dem ich die InputBox ansprechen könnte. Außerdem kehrt InputBox erst zurück, wenn die InputBox schon wieder geschlossen ist. |
Re: InputBox nach vorne bringen?
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
![]() marabu |
Re: InputBox nach vorne bringen?
Zitat:
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. |
Re: InputBox nach vorne bringen?
Deine Beschreibung klärt jetzt doch einiges auf. InputQuery (InputBox ruft InputQuery) erzeugt ein ganz normales Dialogfenster - sonst nichts. Das, in Verbindung mit dem Zeitpunkt des Aufrufs (MainForm.OnCreate), ist ungeeignet für deine Zwecke. Erstelle einfach ein eigenes Dialogfenster und setze dessen FormStyle auf fsStayOnTop und du solltest zufrieden sein.
marabu |
Re: InputBox nach vorne bringen?
Ich habe jetzt einen gut funktionierenden Workaround für das Problem gefunden: Einfach vor dem Aufruf von InputBox alle Fenster auf dem Desktop minimieren! Natürlich nicht manuell ;-] sondern so:
Delphi-Quellcode:
//Minimiert alle Fenster auf dem Desktop. Benötigt ShlObj UND ComObj.
//Hat den gleichen Effekt wie Rechtsklick auf die Taskleiste -> Desktop anzeigen: procedure Shell_MinimizeAll; var Shell: OleVariant; begin Shell := CreateOleObject('Shell.Application'); Shell.MinimizeAll; end; |
Re: InputBox nach vorne bringen?
Zitat:
Oder weißt du eine konkrete Möglichkeit? |
Re: InputBox nach vorne bringen?
Du musst dieses Fenster (InputDialog) einfach aus der Liste der automatisch erzeugten Fenster heraus nehmen.
Delphi-Quellcode:
marabu
procedure TMainForm.FormCreate();
begin with TInputDialog.Create(Application) do begin ShowModal; Free; end; end; |
Re: InputBox nach vorne bringen?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz