Программный код проекта
Опишем две закрытые переменные типа Integer модуля формы, j и k. Переменная j используется для индексации компонента ImageList при добавлении изображений, и указывает на место в списке, куда будет добавлено новое изображение. Переменная k используется для просмотра изображений ImageList в цикле, и указывает место в списке отображаемого в данный момент изображения.
Dim k As Integer
Dim j As Integer
Опишем закрытую переменную img типа ListImage модуля формы, которая используется для добавления картинки в компонент ImageList, путь к которой получен с помощью CommonDialog1.
Dim img As ListImage
Опишем функцию, возвращающую полное имя файла, указанного в окне открытия файла.
Private Function FCmdFileName(CmD As CommonDialog) As String
‘Устанавливаем директорию по умолчанию
CmD.InitDir="C:\"
‘Делаем, чтобы нажатие не «Отмену» считалось ошибкой
CmD.CancelError = True
‘Если произошла ошибка, переходим на метку MtkEr
On Error GoTo MtkEr
‘Устанавливаем флаг обязательного существования файла
CmD.Flags = cdlOFNFileMustExist
‘Делаем пустым начальный путь к файлу
CmD.FileName = ""
‘Вызываем диаологовое окно
CmD.ShowOpen
‘Запоминаем путь к выбранному файлу
FCmdFileName = CmD.FileName
Exit Function
‘Сюда мы попадаем, если произошла ошибка
MtkEr:
‘Если произошедшая ошибка – не нажатие на «Отмену»
If Err.Number <> cdlCancel Then
‘Делаем пустым путь к файлу
FCmdFileName = ""
‘И выводим сообщение об ошибке
MsgBox "Ошибка: " & Err.Description, vbCritical, _
"CmnDlgError"
End If
End Function
Опишем процедуру, загружающую картинку из файла в объект.
Private Sub LoadGrFile(Pict As Object, CmnDlg As CommonDialog)
‘Объявляем переменную типа строка
Dim CmdFileName As String
‘Указываем, файлы с каким расширением будут видны в диалоговом
‘окне
CmnDlg.Filter = "Графические файлы
(*.bmp;*.jpg;*.gif;*.wmf;*.emf). |
*.bmp;*.jpg;*.gif;*.wmf;*.emf"
‘Запоминаем путь к файлу
CmdFileName = FCmdFileName(CmnDlg)
‘Если путь к файлу не пустой
If CmdFileName <> "" Then
‘Если это первый добавленный файл
If j = 1 Then ‘Если файл первый
‘Активируем кнопку «Сначала»
Toolbar1.Buttons.Item(1).Enabled = True
‘Активируем кнопку «Продолжить»
Toolbar1.Buttons.Item(2).Enabled = True
‘Отображаем картинку
Pict.Picture = LoadPicture(CmdFileName)
End If
‘Добавляем картинку в ImageList
Set img = ImageList1.ListImages.Add(j, "",
LoadPicture(CmdFileName))
‘j – позиция следующей картинки, увеличиваем ее на единицу
j = j + 1 ‘Увеличиваем j
End If
End Sub
В событии загрузки формы устанавливаются начальные значения переменных k и j, а так же активность таймера и кнопок «Остановить» и «Продолжить», т.к. еще нет ни одного изображения.
Private Sub Form_Load()
k = 1
j = 1
Timer1.Enabled = False
Toolbar1.Buttons.Item(1).Enabled = False
Toolbar1.Buttons.Item(2).Enabled = False
Toolbar1.Buttons.Item(3).Enabled = False
End Sub
В событии выгрузки формы ставим запрос на подтверждение окончания работы.
Private Sub Form_Unload(Cancel As Integer)
If MsgBox("Закончить ?",vbYesNo Or vbQuestion,App.EXEName)=vbNo Then
Cancel = True
Exit Sub
End If
End Sub
В событии щелчок по объекту Image1 загружаем графический файл с использованием диалога открытия файла.
Private Sub Image1_Click()
Call LoadGrFile(Image1, CommonDialog1)
End Sub
В событии Resize изменяем размеры компонента Image1 для соответствия форме.
Private Sub Form_Resize()
Image1.Width = Form1.Width
Image1.Height = Form1.Height - Toolbar1.Height
End Sub
В событии Timer1_Timer переключаем картинки.
Private Sub Timer1_Timer()
If (k < ImageList1.ListImages.Count) Then
k = k + 1
Else
k = 1
End If
Image1.Picture = ImageList1.ListImages(k).Picture
End Sub
Согласно заданию команды меню связываем с кнопками панели инструментов.
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComCtlLib.Button)
Select Case Button.Key
Case "FromStart"
FromStart_Click
Case "Pause"
Pause_Click
Case "Play"
Play_Click
End Select
End Sub
Опишем действие при нажатии на каждую из кнопок. При нажатии на кнопку «Сначала», нужно присвоить переменной k значение 0. При нажатии на кнопку «Пауза» нужно остановить таймер, сделать кнопку «Пауза» неактивной, и сделать активной кнопку «Продолжить». При нажатии на кнопку «Продолжить» нужно все сделать наоборот.
Private Sub FromStart_Click()
k = 1
Image1.Picture = ImageList1.ListImages(k).Picture
End Sub
Private Sub Pause_Click()
Timer1.Enabled = False
Toolbar1.Buttons.Item(3).Enabled = False
Toolbar1.Buttons.Item(2).Enabled = True
End Sub
Private Sub Play_Click()
Timer1.Enabled = True
Toolbar1.Buttons.Item(3).Enabled = True
Toolbar1.Buttons.Item(2).Enabled = False
End Sub
При запуске программы, пользователь щелчком по компоненту Image1 добавляет файлы, которые необходимо показывать. После добавления первого файла, он отображается в программе, и становится активна кнопка «Продолжить». При нажатии на эту кнопку начинается циклический показ фотографий, который можно остановить кнопкой «Остановить». При нажатии на кнопку «Сначала» фотографии начинают показываться с самой первой.
Блок-схема алгоритма выбора файла из списка
Да Нет
k
= k +1 k
= 1
Вывод
изобржаения