Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как добавить событие в конторол? / 5 сообщений из 5, страница 1 из 1
08.01.2010, 14:31
    #36400560
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить событие в конторол?
Использую Microsoft Masked Edit Control 6.0. У него нет стандартных событий для мыши: Click , DblClick и т.д. Как их можно туда добавить или дайте ссылку на нормальный textbox с маской ввода для даты.
Спасибо
...
Рейтинг: 0 / 0
08.01.2010, 19:05
    #36400933
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить событие в конторол?
TpaBka,

По идее, можно сабклассингом, то есть перехватить сообщения, посылаемые виндами окну контрола. Посмотрите примеры по сабклассингу прямо в этой ветке.
...
Рейтинг: 0 / 0
11.01.2010, 10:14
    #36403014
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить событие в конторол?
> Автор: TpaBka
> или дайте ссылку на нормальный textbox с маской ввода для даты.

А что DTPicker из Object BrowserLibrary MSComCtl2
C:\WINDOWS\system32\mscomct2.oca
Microsoft Windows Common Controls-2 6.0 (SP6) уже отменили?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.01.2010, 12:04
    #36404916
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить событие в конторол?
Игорь ГорбоносА что DTPicker из Object Browser
Library MSComCtl2
C:\WINDOWS\system32\mscomct2.oca
Microsoft Windows Common Controls-2 6.0 (SP6)
уже отменили?
Спасибо
...
Рейтинг: 0 / 0
29.01.2010, 16:00
    #36439104
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить событие в конторол?
Не DTPicker не подошел :(
Решил воспользоваться советом по сабклассингу и так:
Создал модуль:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Option Explicit
'Определим объекты которые вазываяют подмену события
Public Frm As Form
Public MaskEdBoxCtr As MaskEdBox

'Определим необходимые константы
Const GWL_WNDPROC = - 4 &
Const WM_LBUTTONDBLCLK = &H203

'Объявления API-функций
Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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 Sub SetWndProc()
 Frm.hPrevWndProc = _
 SetWindowLong(MaskEdBoxCtr.hwnd, _
 GWL_WNDPROC, AddressOf WindowProc)
End Sub

'Пользовательская оконная процедура
Public Function WindowProc(ByVal hwnd As Long, _
 ByVal iMsg As Long, _
 ByVal wParam As Long, _
 ByVal lParam As Long) As Long
 Select Case iMsg
    Case WM_LBUTTONDBLCLK
    If MaskEdBoxCtr = "__.__.____" Then
    MaskEdBoxCtrl = Date
    Else
    MaskEdBoxCtr = "__.__.____"
    End If
 End Select

 'вызов оконной процедуры по умолчанию
 WindowProc = CallWindowProc( _
 Frm.hPrevWndProc, MaskEdBoxCtr.hwnd, _
 iMsg, wParam, lParam)
End Function

В форме:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Option Explicit

Private m_hPrevWndProc As Long

'Свойство, содержащее адрес оконной процедуры по умолчанию
Public Property Get hPrevWndProc() As Long
 hPrevWndProc = m_hPrevWndProc
End Property

Public Property Let hPrevWndProc(Value As Long)
 m_hPrevWndProc = Value
End Property

Private Sub MaskEdBox1_GotFocus()
Set Frm = Me
Set MaskEdBoxCtr = Me.ActiveControl
SetWndProc
End Sub

В итоге после запуска VB закрывается.
Если код переписать для подмены события окна формы, то работает я же хочу для конкретного контрола.
Чувствую, что проблема в Property Get hPrevWndProc а может и нет.
Кто ни будь помогите пожалуйста
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как добавить событие в конторол? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]