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:
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:
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
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