Способ 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
|
Просмотров: 9099
Ваш коментарий будет первым | | |