На форме расположена метка, в которой выводится текущее время. При загрузке формы включается таймер и идет посекундный отсчет времени. Внешний вид формы показан на рис. 23.
Воспользуемся функцией Timer, которая возвращает число секунд,
прошедших с полуночи до текущего |
Рис. 23. Внешний вид формы |
момента времени, и функцией Time, |
|
которая возвращает текущее время по системным часам. |
|
Private Sub UserForm_Activate() |
|
Dim d As Date, d1 As Date |
|
d1 = Timer |
‘засекаем время |
While Timer < d1 + 100 |
‘часы будут работать 100 секунд |
Label1.Caption = Time |
‘отображаем текущее время |
d = Timer
While Timer < d + 1 ‘делаем паузу в 1 секунду DoEvents ‘ожидание наступления события
Wend Wend
End Sub
На форме расположены: рисунок с автомобилем, рисунок с гаражом, две кнопки «В гараж» и «Из гаража» на одном и том же месте (видна только кнопка «В гараж»). При нажатии на кнопку «В гараж» автомобиль начинает движение к гаражу, как только он доезжает до гаража, картинка гаража заменяется на картинку с открытыми воротами, автомобиль продолжает движение пока не въедет в гараж, останавливается, ворота закрываются (картинка с гаражом заменяется на прежнюю), кнопка «В гараж» становится невидимой, а кнопка «Из гаража» – видимой. Аналогичные действия происходят при нажатии на кнопку «Из гаража», только движение осуществляется в другую сторону и рисунок автомобиля повернут в другую сторону. Внешний вид формы до начала работы программы показан на рис. 24.
41
Рис. 24. Внешний вид формы
Dim start As Date
_______________________________________________________________________________________________________
Private Sub CommandButton1_Click() ‘кнопка «В гараж»
‘загружаем рисунок автомобиля
Image1.Picture = LoadPicture(“C:\машина1.bmp”)
‘пока автомобиль не достигнет гаража, смещаем его вправо
While Image1.Left < Image2.Left – Image1.Width Image1.Left = Image1.Left + 5
‘делаем паузу start = Timer
While Timer < start + 0.1
DoEvents ‘ожидает наступления события
Wend Wend
‘открываем ворота (меняем рисунок гаража с закрытыми ‘воротами на рисунок гаража с открытыми воротами) Image2.Picture = LoadPicture(“C:\гараж2.bmp”)
‘пока автомобиль не въедет в гараж, смещаем его вправо
While Image1.Left < Image2.Left + 10
Image1.Left = Image1.Left + 5 start = Timer
While Timer < start + 0.1 DoEvents
Wend Wend
‘возвращаем рисунок гаража с закрытыми воротами
Image2.Picture = LoadPicture(“C:\гараж1.bmp”)
Image1.Visible = False |
‘скрываем рисунок автомобиля |
|
42 |
CommandButton2.Visible |
= True |
‘показываем вторую кнопку |
CommandButton1.Visible |
= False |
‘скрываем первую кнопку |
End Sub
_______________________________________________________________________________________________________
Private Sub CommandButton2_Click() |
‘кнопка «Из гаража» |
‘загружаем рисунок автомобиля |
|
Image1.Picture = LoadPicture(“C:\машина2.bmp”) Image1.Visible = True ‘показываем рисунок
‘загружаем рисунок гаража с открытыми воротами
Image2.Picture = LoadPicture(“C:\гараж2.bmp”) ‘автомобиль выезжает из гаража
While Image1.Left > Image2.Left – Image1.Width Image1.Left = Image1.Left – 5
start = Timer
While Timer < start + 0.1 DoEvents
Wend Wend
‘загружаем рисунок гаража с закрытыми воротами
Image2.Picture = LoadPicture(“C:\гараж1.bmp”) ‘продолжаем движение автомобиля до левого края формы
While Image1.Left > 1 Image1.Left = Image1.Left – 5 start = Timer
While Timer < start + 0.2 DoEvents
Wend Wend
CommandButton1.Visible = True
CommandButton2.Visible = False End Sub
На форме расположены список с названиями месяцев, поле и метка с пояснительным текстом. При помощи мыши из списка перетаскивают в поле необходимый элемент, выделенный в списке. При неправильном действии, т.е. перетаскивании не в поле, происходит вывод предупреждающего сообщения. Список формируется при активации формы из значений на рабочем листе
43
Excel. Внешний вид формы после перемещения и диалоговое окно показаны на рис. 25.
Рис. 25. Внешний вид формы и диалогового окна
Для реализации данного проекта необходимо использовать технологию DragAndDrop (прил. 2), позволяющую перемещать объекты. Когда пользователь захватывает выбранный им элемент списка, то возникает некоторое событие, в нашем примере это событие
MouseMove.
Private Sub UserForm_Activate() Dim i As Byte
‘формируем список значениями из ячеек рабочего листа
For i = 1 To 12 ListBox1.AddItem (Cells(i, 1)) Next i
End Sub
_______________________________________________________________________________________________________
Private Sub ListBox1_MouseMove(ByVal Button As Integer)
Dim D As DataObject
Dim R As Integer |
|
If Button = 1 Then |
‘если копируем объект |
‘создает новый объект и связываем его с переменной D Set D = New DataObject
‘копируем содержимое выбранного элемента списка ‘в текстовую строку
D.SetText ListBox1.Value
R = D.StartDrag ‘результат операции ‘если переместили не на текстовое поле
44
If R = 0 Then MsgBox (“Ошибка. Повторите операцию!”) End If
End Sub
На форме расположена кнопка «Начать», нажатие на которую выводит на экран предупреждающее диалоговое окно с текстом «Нажмите кнопку» и кнопкой «ОК» (рис. 26).
Рис. 26. Внешний вид формы и диалогового окна
После нажатия кнопки «ОК» появляется диалоговое окно с текстом «Начать?» и кнопками «Да» и «Нет». Если пользователь нажал кнопку «Да», то у него запрашивается его имя. Затем, если пользователь ввел имя, выводится информационное диалоговое окно с приветствием, в противном случае выводится предупреждающее диалоговое окно с соответствующим сообщением (рис. 27).
Рис. 27. Внешний вид диалоговых окон и окна ввода
45