Es gibt zwei Möglichkeiten, mit Hilfe von API-Funktionsaufrufen ein Form dauerhaft in den Vordergrund zu bringen. Wie Sie ein Form in den Vordergrund vor alle übrigen Fenster aller Anwendungen bringen, sehen Sie in Vordergründige Forms.
Die andere Möglichkeit bewirkt, dass sich ein Form lediglich immer vor einem anderen bestimmten Form befindet. Dies ist beispielsweise dann sinnvoll, wenn das Form im Vordergrund ein Werkzeugfenster oder ähnliches darstellen soll und sich immer vor dem dazugehörenden Arbeitsfenster "schweben", aber sich nicht ständig fest in den Vordergrund vor alle anderen Forms und Fenster schieben soll.
Neben der weitaus bekannteren Parent-Zuordnung von Windows-Fenstern (Forms) gibt es auch die Owner-Beziehung zwischen Fenstern. Die Parent-Zuordnung bedeutet, dass sich ein Fenster (etwa das eines Steuerelements) auf der Arbeitsfläche eines anderen Fensters befindet, sich sozusagen "innerhalb" dieses Fensters befindet. Die Owner-Beziehung bedeutet hingegen nur, dass ein Fenster von einem anderen abhängig ist.
Ein Effekt dieser Abhängigkeit ist (und um diesen geht es in diesem Artikel), dass sich das Fenster (Form) immer vor seinem "Besitzer" befindet, diese Vordergrundeigenschaft jedoch andere Fenster nicht berührt. Ein anderer Effekt ist, dass das Fenster verschwindet, wenn sein Besitzer von der Bildfläche verschwindet. Wird etwa der Besitzer minimiert, wird ein zugeordnetes Fenster so lange unsichtbar, bis der Besitzer wiederhergestellt wird. Sie können es mit einem Aufruf der Show-Methode jedoch unabhängig davon wieder sichtbar machen.
Es wird aber auch unsichtbar, wenn der Besitzer geschlossen, also entladen wird. Allerdings sollten Sie es dann mit diesem zusammen entladen - am besten im Unload-Ereignis des Besitzer-Forms. Sollten Sie dies übersehen, können Sie das hinterbliebene zugeordnete Form zwar von einer anderen Stelle in Ihrer Anwendung entladen, jedoch können Sie es nicht mehr sichtbar machen, wenn sein Besitzer nicht mehr existiert.
Diese Owner-Beziehung setzen Sie über einen Aufruf der API-Funktion SetWindowWord mit dem undokumentierten Index-Parameter GWL_HWNDPARENT:
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Sub SetOwner(FormOwned As Form, FormOwner As Form)
Const GWL_HWNDPARENT = -8
SetWindowLong FormOwned.hWnd, GWL_HWNDPARENT, FormOwner.hWnd
End Sub
|