ГлавнаяMS ACCESS Получение "верхней" главной формы для подчиненной любого уровня вложенности
Получение "верхней" главной формы для подчиненной любого уровня вложенности
Автор Ю.Ш. и kluck
18.01.2005 г.
Способ 1
'получаем Parent исходной формы до получения ошибки 'автор - Юрий Шерман ака Ю.Ш.
Public Function GetTopForm(frm As Form) As Form On Error GoTo ExitHere Set GetTopForm = frm Do Set GetTopForm = GetTopForm.Parent Loop ExitHere: End Function
Способ 2
'используя WIN32API 'автор - Александр Куклюк aka kluck
Private Declare Function GetClassName Lib "user32" _ Alias "GetClassNameA" (ByVal hWnd As Long, _ ByVal lpClassName As String, _ ByVal nMaxCount As Long) As Long
Function GetTopForm(frm As Form) As Form
'проверяем имя класса окна, если оно не "OForm", идем циклом 'по .Parent, пока не получим имя класса окна OForm. 'И без всяких ошибок 2452.
Dim strClassName As String Dim CurrentForm As Form
Set CurrentForm = frm
Do strClassName = wndClassName(CurrentForm.hWnd)
If strClassName <> "OForm" Then Set CurrentForm = CurrentForm.Parent End If
Loop Until strClassName = "OForm"
Set GetTopForm = CurrentForm Set CurrentForm = Nothing
End Function
'Две вспомагательные функции, которые я давным давно 'выдрал из одного примера А.Митина, да так и оставил. Private Function StrZ(par As String) As String Dim nSize As Long, i As Long, Rez As String nSize = Len(par) i = InStr(1, par, Chr(0)) - 1 If i > nSize Then i = nSize If i < 0 Then i = nSize StrZ = Mid(par, 1, i) End Function
Public Function wndClassName(hWnd As Long) As String Dim s As String Dim r& s = String(128, " ") r& = GetClassName(hWnd, s, 127) wndClassName = StrZ(s) End Function