Получение "верхней" главной формы для подчиненной любого уровня вложенности
Автор Ю.Ш. и 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



Просмотров: 9389

  Ваш коментарий будет первым

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code