Страницы: 1
RSS
Ошибка при подключении USER32 на системе х64 в офисе 2013 х64
 
Доброе утро друзья. Выручайте.
Хочу сделать растягивание формы мышкой за уголок. Для этого воспользовался библиотекой USER32.
Дома тестировал код на х86 и офисе 2010 х86. Прописал кучу условий, но пришёл на работу, запустил файл на системе х64 в 2013 офисе х64 и не работает.
И чего только не старался менять всё равно ругается на что-нибудь.
Чего только из гугла не подставлял и не пробовал.
В общем-то задача стоит в том чтобы растягивание работало начиная с офиса 2003 заканчивая х64 2016.
В чём ещё может быть ошибка. Код уже раз 20 менял поэтому сам запутался как должно быть правильно.
Изменено: Alemox - 09.10.2017 08:50:17
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Победил следующим образом
Код
#If VBA7 Then
Private Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    #If Win64 Then
        Private Declare PtrSafe Function GetWindowLongPtr Lib "USER32" Alias "GetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
        Private Declare PtrSafe Function SetWindowLongPtr Lib "USER32" Alias "SetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
    #Else
        Private Declare PtrSafe Function GetWindowLongPtr Lib "USER32" Alias "GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
        Private Declare Function SetWindowLongPtr Lib "USER32" Alias "SetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
    #End If
#Else
    Private Declare Function GetWindowLongPtr Lib "USER32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLongPtr Lib "USER32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

Private Sub UserForm_Initialize()
SetWindowLongPtr FindWindow(vbNullString, Me.Caption), -16&, GetWindowLongPtr(FindWindow(vbNullString, Me.Caption), -16&) Or &H40000
End Sub
Если кому-то нужен код, то используйте на здоровье. Изменение формы мышкой.
Правда на 2010 ещё не тестировал.
Если не сложно отпишитесь с версией системы и офисом работает или нет, чтобы можно было дальше допиливать.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
Страницы: 1
Наверх