Formular-Anordungsprozeduren machen was sie wollen

DrMueller

Erfahrenes Mitglied
Hallo Leute,
ich habe vor einigen Wochen schon mal angefragt bzgl. einer Möglichkeit, alle geöffneten Formulare zu speichern und danach in dieser Reihenfolge wieder darzustellen.
Ziel ist, dass danach das selbe Formular zu oberst dargestellt wird resp. das die nachfolgende Reihenfolge erhalten bleibt.
Zu habe ich folgende Funktionen gemacht.
Speichern:
Code:
Private Function ControlsZOrder() As Collection
  On Error GoTo controlsZOrder_Error
  Dim hwnd As Long
  Dim col As Collection
  Set col = New Collection
  Dim frm As Form
  hwnd = GetDesktopWindowHWND
  
  hwnd = GetWindow(hwnd, 5)
  While hwnd > False
    col.Add hwnd
    hwnd = GetWindow(hwnd, 2)
  Wend
  
controlsZOrder_Ende:
  On Error Resume Next
  Set ControlsZOrder = col
  Set frm = Nothing
  Set col = Nothing
  Exit Function

controlsZOrder_Error:
  Debug.Print Err.Description & "(" & Err.Number & ")" & " controlsZOrder in frmMain "
  Debug.Assert (Err = False)
  On Error Resume Next
  WriteDBGView Err.Description & "(" & Err.Number & ")" & " controlsZOrder in frmMain ", App.EXEName
  GoTo controlsZOrder_Ende
  Resume
End Function


Dazwischen werden über die Forms-Collection einige Formulare aufgerufen und geändert, daher einige Formulare treten in dern Vordergrund.

Danach stelle ich die Reihenfolge wie oben gespeichert mit folgender Prozedur her:
Code:
Private Sub ZOrderControls(Controls As Collection)
  On Error Resume Next
  Dim kFlags As Variant
  kFlags = &H2 Or &H1 Or &H10

  Dim ii As Integer
  Dim nWnd As Long
  Dim nLastWnd As Long
  
  On Error Resume Next
  
  nLastWnd = CLng(Controls.Item(1))
  For ii = 2 To Controls.Count
'  nLastWnd = CLng(Controls.Item(Controls.Count))
'
'  For ii = Controls.Count To 2 Step -1
    nWnd = CLng(Controls.Item(ii))
    If Err.Number Then
      Err.Clear
    Else
      SetWindowPos nWnd, nLastWnd, 0, 0, 0, 0, kFlags
      nLastWnd = nWnd
    End If
  Next ii
End Sub


Das Ganze habe ich leicht abgewandelt im Internet so gefunden. Leider scheint es nur auf den ersten Blick zu klappen, teilweise funktioniert es dann wieder gar nicht mehr.

Da ich keine Nachvollziehbarkeit habe, kann ich den Fehler auch nicht erkennen.

Hat jemand vlt. so was ähnliches bereits gesehen und kennt grad den Fehler?



Wie immer vielen Dank für alle Antworten
 

Neue Beiträge

Zurück