Собственный UpDown в UserControl не находит Buddy Control

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ФАНТОМНЫЙ ЮЗЕР
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 27.12.2007 (Чт) 20:08
Откуда: phpbb_users

Собственный UpDown в UserControl не находит Buddy Control

Сообщение ФАНТОМНЫЙ ЮЗЕР » 09.10.2004 (Сб) 1:18

Подскажите, пожалуйста, почему при создании элемента UpDpwn :?:
1. не устанавливается Buddy контроль;
2. не работает AutoChangeBuddyText;
3. не работает ShowThousandsSeparator.

Код: Выделить всё
Private Function Create(Optional ByVal dwSelect As Boolean = False)
Dim dwMax As Long
Dim dwMin As Long
Dim dwValue As Long
Dim dwBase As Long
Dim dwStyle As Long
Dim c As Control

    If m_hWnd <> 0 Then
            ' Сохранить предыдущие установки элемента управления
            If dwSelect Or m_ReadProp Then
            dwMax = Max
            dwMin = Min
            dwValue = Value
            GetAccel
            dwBase = Base
        End If
    End If
    '// Гарантировать, что мы уже не имеем управления UpDown:
    Detach
    '// Создать контроль:
    dwStyle = WS_VISIBLE Or WS_CHILD
    dwStyle = dwStyle Or m_Alignment Or m_Orientation
    If m_ArrowKeysChange Then
        dwStyle = dwStyle Or UDS_ARROWKEYS
    End If
    If m_AutoChangeBuddyText Then
        dwStyle = dwStyle Or UDS_SETBUDDYINT
    End If
    If Not (m_ShowThousandsSeparator) Then
        dwStyle = dwStyle Or UDS_NOTHOUSANDS
    End If
    If m_Wrap Then
        dwStyle = dwStyle Or UDS_WRAP
    End If
    '// Проверка коректности
    Debug.Assert (m_hWnd = 0)
    If (m_hWnd = 0) Then
        '// Создать элемент управления UpDown
        m_hWnd = CreateWindowEx(WS_EX_STATICEDGE, UPDOWN_CLASS, vbNullString, dwStyle, _
                                0, 0, UserControl.ScaleWidth \ Screen.TwipsPerPixelX, UserControl.ScaleHeight \ Screen.TwipsPerPixelY, _
                                UserControl.hWnd, 0, App.hInstance, ByVal 0&)
        If (m_hWnd <> 0) Then
            UserControl.ParentControls.ParentControlsType = vbExtender
            If m_BuddyControl <> "" Then
                On Error GoTo ErrorHandler
                For Each c In UserControl.Parent.Controls
                    If m_BuddyControl = c.Name Then
                        ' Сохранить дескриптор указанного элемента управления
                        m_BuddyhWnd = c.hWnd
                        Exit For
                    End If
                Next c
ErrorHandler:   Call SendMessage(m_hWnd, UDM_SETBUDDY, m_BuddyhWnd, ByVal 0&)
                Debug.Print SendMessage(m_hWnd, UDM_GETBUDDY, 0, ByVal 0&) & "; " & m_BuddyhWnd [b]' (не возвращается дескриптор Buddy)[/b]
            End If
            SetAccel
            If dwSelect Or m_ReadProp Then
                Max = dwMax
                Min = dwMin
                Value = dwValue
                Base = dwBase
                m_ReadProp = False
            End If
        End If
        If (Ambient.UserMode) Then
            '// Запуск класса
            SubClass
            m_SubClass = True
        End If
    End If
End Function


Пробовал тот же алгоритм создания элемента UpDown при инициализации формы (Form_Load) - все прекрасно работает :(

ФАНТОМНЫЙ ЮЗЕР
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 27.12.2007 (Чт) 20:08
Откуда: phpbb_users

Сообщение ФАНТОМНЫЙ ЮЗЕР » 26.10.2004 (Вт) 0:19

Разобрался
Код: Выделить всё
    If (m_hWnd = 0) Then
        m_hWndParent = GetParent(UserControl.hwnd)
        '// Создать элемент управления UpDown
        m_hWnd = CreateWindowEx(WS_EX_STATICEDGE, UPDOWN_CLASS, vbNullString, dwStyle, _
                                0, 0, UserControl.ScaleWidth \ Screen.TwipsPerPixelX, UserControl.ScaleHeight \ Screen.TwipsPerPixelY, _
                                m_hWndParent, 0, App.hInstance, ByVal 0&)
        If (m_hWnd <> 0) Then
            ' Установить окно пользователя для управления UpDown.
            ' Возвращаемое значение - дескриптор предыдущего окна пользователя
            Call SendMessage(m_hWnd, UDM_SETBUDDY, m_BuddyhWnd, ByVal 0&)
        End If
    End If


Теперь все работает безукаризненно!!!
Спасибо всем[/code]


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList