Fenster anzeigen, ohne es zu aktivieren
Veröffentlicht am 04.05.2005
Wenn Sie ein Access-Fenster eines Formulars oder Berichts mit Hilfe der „Visible-Eigenschaft“ sichtbar machen, aktiviert Access das Fenster automatisch. Das vorher geöffnete Formular verliert dadurch den Eingabefokus.
Um dies zu verhindern, setzen Sie den Eingabefokus mit dem Befehl SelectObject zurück:
Forms![frmUhrzeit].Visible = True 'Formular anzeigen und aktivieren
Domd.SelectObject acForm, "frmEingabe 'Formular wieder aktivieren
Mit dieser Methode entsteht allerdings ein störendes Geflacker, so dass der Fokus hin- und hergeschickt wird.
Diesem Umstand kann jedoch durch die Verwendung der bekannten Funktion SetWindowPos und einiger Konstanten abgeholfen werden.
Durch Angabe geeigneter Flags im letzten Parameter können Sie SetWindowPos dazu bringen, ein Fenster einzublenden, ohne es zu aktivieren. Dieses Verhalten wäre beispielsweise für Formulare interessant, die einen Status (z.B. die Uhrzeit) anzeigen. Folgendes Beispiel setzt die SetWindowPos-Funktion ein, um ein verborgendes Formular frmUhrzeit einzublenden, ohne dass das aktuelle Formular den Eingabefokus verliert:
Private Sub btnShowTime_Click()
FensterAktivieren Forms![frmUhrzeit]
End Sub
Die Prozedur FensterAktivieren sieht wie folgt aus:
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const SWP_SHOWWINDOW = &H40
Public Const SWP_NOACTIVATE = &H10
Declare Function SetWindowPos Lib "user32" _
Alias "SetWindowPos" (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
Public Function FensterAktivieren(F As Form)
SetWindowPos F.hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE _
Or SWP_NOMOVE _
Or SWP_NOZORDER _
Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
End Function
Die Flags SWP_NOSIZE und SWP_NOMOVE sorgen dafür, dass die Größe und Position des Fensters nicht verändert werden.