Страницы: 1
RSS
Блокирование перемещения формы открываемой из формы!
 
Добрый день!  
Помогите с решением такой задачи: нашел код блокирующий перемещение формы (а также ее закрытие по крестику), вставил его в свой документ, во все формы, но появилось три вопроса:  
1. Можно ли код относящийся к декларированию функций закинуть один раз в модуль листа, чтобы не вставлять в код каждой формы? У меня не получилось.  
2. Из одной из формы я открываю другую форму: первая все нормально блокируется от перемещений, вторая - нет, ошибки тоже никакой не выдает.  
3. Может есть другой вариант блокировки, например без использования API?  
 
Private Declare Function GetSystemMenu Lib "user32" _  
(ByVal hwnd As Long, ByVal bRevert As Long) As Long  
 
Private Declare Function RemoveMenu Lib "user32" _  
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long  
 
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _  
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long  
 
Private Const MF_BYPOSITION As Long = &H400&  
 
Private Sub UserForm_Initialize()  
   Dim hwnd As Long  
   Dim e As Integer  
   hwnd = FindWindow(vbNullString, Me.Caption)  
   If hwnd <> 0 Then  
       For e = 0 To 6  
           Call RemoveMenu(GetSystemMenu(hwnd, 0&), 0&, MF_BYPOSITION)  
       Next  
   End If  
End Sub
 
1. Можно ли код относящийся к декларированию функций закинуть один раз в модуль листа, чтобы не вставлять в код каждой формы?    
 
Не только можно, но и нужно.  
Чтобы получилось, надо убрать ключевое слово Private из декларации функций (или заменить его на Public)  
 
 
2. Из одной из формы я открываю другую форму: первая все нормально блокируется от перемещений, вторая - нет  
 
Вы получаете hwnd окна, используя для поиска его заголовок:  
hwnd = FindWindow(vbNullString, Me.Caption)  
 
Может, у обеих форм заголовок одинаковый, и поэтому каждый раз Вы получаете hwnd первой формы?
 
Спасибо огромное, EducatedFool  
 
По первому вопросу я делал, но я просто убирал Private - не работало.  
Сейчас заменил на Public - и заработало.  
 
По второму вопросу: разобрался - у форм были разные Caption, но у второй он был пустой, как только добавил что-либо сразу заработало.
Страницы: 1
Читают тему
Наверх