1

Тема: UserForm теряет фокус при открытии другого окна

Проблема: Userform (установлено свойство showmodal = false, дабы можно было работать с текстом в фоне) при открытии другого документа по кнопке на форме теряется. Как можно вернуть форму в фокус?

2

Re: UserForm теряет фокус при открытии другого окна

Показать ещё раз:

Private Sub CommandButton1_Click()
  UserForm2.Show 0
  Me.Show
End Sub
Лучше день потерять — потом за пять минут долететь!

3

Re: UserForm теряет фокус при открытии другого окна

viter.alex пишет:

Показать ещё раз:

Была же такая мысль! Спасибо.
И вдогонку: я тут излазил все свойства userform, но не нашел возможности превратить ее в самостоятельное окошко с кнопочками свернуть/развернуть. Вероятно, это касается только "полноценных", скомпилированных VB приложений? В VB6, по крайней мере, помнится, это задавалось.

4

Re: UserForm теряет фокус при открытии другого окна

Да, стандартной такой возможности нет, но можно сделать самому при помощи WinAPI
В модуль:

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const GWL_STYLE = (-16)

Public Sub ChangeWindow(f As UserForm)
  Dim hwnd As Long
  Dim retval As Long
  hwnd = FindWindow("ThunderDFrame", f.Caption)
  If hwnd <> 0 Then
    retval = SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
  End If
  If retval = 0 Then MsgBox "Fail"
End Sub

В форме:

Private Sub UserForm_Initialize()
  Call ChangeWindow(Me)
End Sub
Лучше день потерять — потом за пять минут долететь!

5

Re: UserForm теряет фокус при открытии другого окна

Вот это да! Огромное спасибо.