Form im Vordergrund

Wolfgang Kluge
wolfgang@vbwelt.de

Bestimmt kennt jeder die Formen, die sich immer in den Vordergrund stellen und da liegen bleiben, sich dabei auch durch nichts beirren lassen. Und überall,. und das ist nunmal eine Tatsache, überall wird der Code zur schau gestellt.

Nun,....warum nicht hier auch?
Das ist noch nicht mal sehr kompliziert, denn Windows übernimmt die eigentlich arbeit, die es braucht, um ständig alle Fenster zu durchlaufen und zu registrieren, welches denn nun eigentlich vorne liegen müßte.

 Deklaration:
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2


Diese Funktion ist eigentlch dazu bestimmt, die Größe und die Position von Fenstern zu bestimmen.
Im zweiten Parameter kann man jedoch einen Wert übergeben, der Windows dazu veranlasst, die Form ständig im Vordergrund aufzubewahren.

' Form immer im Vordergrund
' SWP_NOSIZE und SWP_NOMOVE werden dazu benutzt, dass
' keine änderung, was Größe und Position betrifft, erfolgt
SetWindowPos Me.hWnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOMOVE

' Form wieder in den Normalzustand bringen
SetWindowPos Me.hWnd, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOMOVE


Wenn ich schon dabei bin, kann ich auch gleich eine Frage beantworten, die sehr häufig gestellt wird, und auf die leider auch immer wieder viel zu kompliziert geantwortet wird.

Die Frage lautet "Wie kann man eine Form immer vor einer anderen Form halten".

Nun ist die komplexe Antwort schon richtig, und auch die einzigste Möglichkeit, wenn man "die andere Form" nicht sein eigen nennen kann, aber der häufigere Fall (beide Form-Objekte in einem Projekt) ist mit VB-Standardmitteln zu erledigen.
Man nehme also an, man hat ein Projekt mit 2 Formen. Das Projekt wird mit Form1 gestartet, und man will Form2 später(auf Knopfdruck) nachladen. Diese 2. Form soll dann immer über der ersten liegen, man soll aber noch weiterarbeiten können (ein Vergleich bietet sich gleich in der Entwicklungsumgebung mit den Tool-Fenstern, die VB so hat).
Wenn man sich die Show.Methode einer jeden Form mal anschaut, bemerkt man, dass diese 2 optionale Parameter empfangen kann.
Einer um zu bestimmen, ob die Form Modal (Dadurch ist nur diese Form des Programms aktiv, bis die Form verschwunden ist), und einer, der das "besitzende" Fenster bestimmt.

In diesem Fall ist nur der letzte Parameter wichtig. Wenn wir also die Form anzeigen, dann benutzen wir die Show-Methode und setzen als 2. Parameter die erste Form.. Schon tuts ;)

' Form2 immer "OnTop" von Form1
Form2.Show , Form1