Страница: 1 |
|
Вопрос: Вопросец: разработка ActiveX кнопки
|
Добавлено: 15.01.09 15:42
|
|
Автор вопроса: mishaprogrammer
|
Хочу для проги создать кнопку чтобы была похожа предположим, на office 2007. Типа создаю image и если мышь наведена запихиваю картинку 1, если же нет картинку 2. Только как в ActiveX контроле узнать наведена мышь или нет???
Ответить
|
Номер ответа: 7 Автор ответа: Alex
Вопросов: 10 Ответов: 131
|
Профиль | | #7
|
Добавлено: 16.01.09 02:29
|
а как тоже самое сделать для формы? (но без таймера, желательно как fAndOrIn)
Ответить
|
Номер ответа: 8 Автор ответа: Father
Вопросов: 0 Ответов: 159
|
Профиль | | #8
|
Добавлено: 16.01.09 03:27
|
Код приведенный fAndOrIn для практического применения не подходит вообще. Он и сам это знает, когда предлагает
отсчитываем каждый пиксель, типа никуда не торопимся .
Есть ф-ция TrackMouseEvent, если не пугает сабкласинг окна.
Ответить
|
Номер ответа: 9 Автор ответа: Alex
Вопросов: 10 Ответов: 131
|
Профиль | | #9
|
Добавлено: 16.01.09 15:18
|
Father а пример можно, а то чтото у меня неполучается (((
Ответить
|
Номер ответа: 10 Автор ответа: Father
Вопросов: 0 Ответов: 159
|
Профиль | | #10
|
Добавлено: 16.01.09 18:24
|
- Option Explicit
-
- Public Sub Hover()
- Me.BackColor = vbHighlight
- End Sub
-
- Public Sub Leave()
- Me.BackColor = vbButtonFace
- End Sub
-
- Private Sub Form_Load()
- SetProp Me.hwnd, "OBJPTR", ObjPtr(Me)
- SetProp Me.hwnd, "FATHER", SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WndProc)
- End Sub
- Option Explicit
-
- Public Type TME
- cbSize As Long
- dwFlags As Long
- hwndTrack As Long
- dwHoverTime As Long
- End Type
-
- Public Declare Function TrackMouseEvent Lib "user32" (lpEventTrack As TME) As Long
- Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
- Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
- Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
- Public Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
- Public Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hwnd As Long, ByVal lpString As String) As Long
- Public Declare Function RemoveProp Lib "user32" Alias "RemovePropA" (ByVal hwnd As Long, ByVal lpString As String) As Long
- Public Declare Sub PutMem4 Lib "msvbvm60" (Destination As Any, ByVal Source As Long)
-
- Public Const GWL_WNDPROC = (-4)
- Public Const WM_DESTROY = &H2
- Public Const WM_MOUSEMOVE = &H200
- Public Const WM_MOUSELEAVE = &H2A3
- Public Const TME_LEAVE = &H2
-
- Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
- On Error Resume Next
- Dim frm As Object
- PutMem4 frm, GetProp(hwnd, "OBJPTR")
- Select Case Msg
- Case WM_DESTROY
- RemoveProp hwnd, "BHOVER"
- RemoveProp hwnd, "OBJPTR"
- RemoveProp hwnd, "FATHER"
- Case WM_MOUSEMOVE
- If Not CBool(GetProp(hwnd, "BHOVER")) Then
- Dim tm As TME
- SetProp hwnd, "BHOVER", True
- frm.Hover
- tm.cbSize = LenB(tm)
- tm.hwndTrack = hwnd
- tm.dwFlags = TME_LEAVE
- TrackMouseEvent tm
- End If
- Case WM_MOUSELEAVE
- SetProp hwnd, "BHOVER", False
- frm.Leave
- End Select
- PutMem4 frm, 0&
- WndProc = CallWindowProc(GetProp(hwnd, "FATHER"), hwnd, Msg, wParam, lParam)
- End Function
Ответить
|
Номер ответа: 11 Автор ответа: Alex
Вопросов: 10 Ответов: 131
|
Профиль | | #11
|
Добавлено: 16.01.09 20:03
|
OK спасибо заработало )
+
Ответить
|
Страница: 1 |
Поиск по форуму