Самоучитель VBA


         

Перемещение элемента управления при помощи операции drag-and-drop


Рассмотрим диалоговое окно новые похождения колобка (рис. У6.5), с которым связана ниже приведенная программа, дающая два простых примера программирования операций drag-and-drop.

Рис. У6.5. Диалоговое окно Новые похождения Колобка

  • Если расположить указатель мыши на Колобке и нажать правую кнопку становится печальным Если далее перемещать указатель мыши при нажатой правой кнопке по поверхности диалогового окна, то колобок будет передвигаться вслед за указателем мыши. Настроение колобка запрограммировано в процедурах веселыйКолобок и печальныйколобок. Изменение настроения колобка при нажатии и отпускании правой клавиши мыши запрограммировано в процедурах Image1_MouseDown и Image1_MouseUp, а перемещение — в Imagel_MouseMove.

  • Если расположить указатель мыши на надписи колобок и переместить указатель мыши при нажатой правой кнопке в область второй надписи, обведенной рамкой, а там уже отпустить правую клавишу мыши, то во вторую надпись будет скопирован текст колобок. Процедура Labeli_MouseMove копирует заголовок первой надписи в объект Dataobject, играющий роль буфера обмена, процедура Label2_BeforeDragOver контролирует операции drag-and-drop во время перемещения указателя мыши, a Label2_BeforeDropOrPaste в момент отпускания правой кнопки мыши.

    '

    ' Определение переменной уровня модуля

    Dim Kono6oкDataObject As DataObject

    '

    Private Sub imagel_MouseDown(ByVal Button As Integer,

    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    If Button = 1 Then

    'ПечальныйКолобок

    End If

    End Sub

    Private Sub Imagel_MouseUp(ByVal Button As Integer,

    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    If Button = 1 Then ВеселыйКолобок

    End If

    End Sub

    Private Sub Imagel_MouseMove(ByVal Button As Integer,

    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    If Button = 1 Then

    IfX^2+Y^2 = 0 Then A = 0 В = 0

    Else

    A = X / Sqr(X л 2 + Y л 2) В = Y / SqrtX л 2 + Y л 2)

    End if With Imagel

    .Top = Imagel.Top + В

    .Left = Imagel.Left + A



    Содержание  Назад  Вперед