Основы офисного программирования и документы Word


Переправа. Берег Левый - Берег Правый


По ходу игры лодка с пассажирами должна переезжать с одного берега на другой. И опять-таки, я реализовал два варианта интерфейса. В первом, более простом варианте щелчок по лодке, заставляет ее переправиться на другой берег, если соблюдены все условия игры, в лодке есть человек и никто никого не кушает. В обработчике события Click объекта Boat вызывается соответствующая процедура, которая требуемым образом изменяет координаты, как самой лодки, так и находящихся в ней пассажиров. Вот текст обработчика и вызываемой в нем процедуры Crossing:

Листинг 6.9.

(html, txt)

Более интересна техника перетаскивания лодки с берега на берега. Ранее лодка служила целью назначения перетаскиваемых в нее объектов. Теперь она сама станет перемещаемым объектом и, следовательно, для нее мы создадим обработчик события MouseMove, в котором и вызовем метод StartDrag объекта DataObject. В роли целевых будут выступать в зависимости от ситуации объекты LeftBank и RightBank, для каждого из которых будут написаны по два обработчика событий BeforeDragOver и BeforeDropOrPaste. О них позже пойдет более подробный разговор, а сейчас для лодки приведем текст обработчика события MouseMove, запускающего процесс перемещения:

Private Sub Boat_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim Effect As Integer 'MyDataObject используется при перетаскивании объектов Dim MyDataObject As DataObject

If Button = 1 Then Set MyDataObject = New DataObject MyDataObject.SetText "Boat" 'Запоминаем имя перемещаемого объекта Effect = MyDataObject.StartDrag 'запускаем процесс перемещения If Effect = 0 Then перетаскиваемый объект не достиг цели 'Сообщение о неуспехе MsgBox Prompt:=Mes1 + vbCrLf + Mes7 + Mes15 _ + vbCrLf + Mes12, Buttons:=vbCritical + vbOKOnly, Title:=Mes13 End If End If End Sub

Листинг 6.10.

(html, txt)

Как видите, ничего нового в этом обработчике нет в сравнении с уже рассмотренными подобными обработчиками, все они построены по одной схеме. Больший интерес представляет обработка событий для целевых объектов, представляющих левый или правый берег, куда причаливает лодка. Но эти объекты являются целевыми и при высадке пассажиров на берег, когда они высаживаются (перетаскиванием) на берег. Поэтому отложим их описание до следующего параграфа, где будет рассмотрена высадка пассажиров из лодки.


Private Sub Boat_MouseMove( ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim Effect As Integer 'MyDataObject используется при перетаскивании объектов Dim MyDataObject As DataObject

If Button = 1 Then Set MyDataObject = New DataObject MyDataObject.SetText "Boat" 'Запоминаем имя перемещаемого объекта Effect = MyDataObject.StartDrag 'запускаем процесс перемещения If Effect = 0 Then перетаскиваемый объект не достиг цели 'Сообщение о неуспехе MsgBox Prompt:=Mes1 + vbCrLf + Mes7 + Mes15 _ + vbCrLf + Mes12, Buttons:=vbCritical + vbOKOnly, Title:=Mes13 End If End If End Sub

Листинг 6.10.

Как видите, ничего нового в этом обработчике нет в сравнении с уже рассмотренными подобными обработчиками, все они построены по одной схеме. Больший интерес представляет обработка событий для целевых объектов, представляющих левый или правый берег, куда причаливает лодка. Но эти объекты являются целевыми и при высадке пассажиров на берег, когда они высаживаются (перетаскиванием) на берег. Поэтому отложим их описание до следующего параграфа, где будет рассмотрена высадка пассажиров из лодки.


Содержание раздела