Программный код проекта
Опишем закрытую переменную типа Integer модуля формы k. Переменная k используется для индексации компонента ImageList при добавлении изображений, и указывает на место в списке, куда будет добавлено новое изображение, а так же для просмотра изображений ImageList в цикле, и указывает место в списке отображаемого в данный момент изображения.
Dim k As Integer
Опишем функцию, возвращающую полное имя файла, указанного в окне открытия файла.
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 k = 0 Then
‘Активируем кнопку «Сначала»
Toolbar1.Buttons.Item(2).Enabled = True
‘Активируем кнопку «Продолжить»
Toolbar1.Buttons.Item(3).Enabled = True
End If
‘Увеличиваем k на единицу
k = k + 1
‘Добавляем картинку в ImageList
Call ImageList1.ListImages.Add(k, "",
LoadPicture(CmdFileName))
‘Масштабируем картинку под размер PictureBox
Picture1.PaintPicture ImageList1.ListImages.Item(k).Picture, 0, 0, Picture1.Width, Picture1.Height
End If
End Sub
В событии загрузки формы устанавливаются начальные значения переменных k и j, а так же активность таймера и кнопок «Сначала», «Остановить» и «Продолжить», т.к. еще нет ни одного изображения.
Private Sub Form_Load()
‘Начальное значение переменной k
k = 1
‘Отключаем таймер
Timer1.Enabled = False
‘Отключаем кнопку «Сначала»
Toolbar1.Buttons.Item(2).Enabled = False
‘Отключаем кнопку «Продолжить»
Toolbar1.Buttons.Item(3).Enabled = False
‘Отключаем кнопку «Остановить»
Toolbar1.Buttons.Item(4).Enabled = False
End Sub
В событии выгрузки формы ставим запрос на подтверждение окончания работы.
Private Sub Form_Unload(Cancel As Integer)
‘Если во диалоговом окне пользователь нажмет на «No»
If MsgBox("Закончить ?",vbYesNo Or vbQuestion,App.EXEName)=vbNo Then
‘Тогда отменяем закрытие программы
Cancel = True
Exit Sub
End If
End Sub
В событии Resize изменяем размеры компонента Image1 для соответствия форме.
Private Sub Form_Resize()
‘Устанавливаем ширину PictureBox1 равной ширине формы
PictureBox1.Width = Form1.Width
‘Устанавливаем высоту PictureBo1 равной высоте формы за
‘вычетом высоты Toolbar1
PictureBox1.Height = Form1.Height - Toolbar1.Height
‘Если при этом мы уже загрузили хотя бы один рисунок
If k > 0 Then
‘Масштабируем его согласно изменившемуся размеру
Picture1.PaintPicture ImageList1.ListImages.Item(k).Picture,
0, 0, Picture1.Width, Picture1.Height
End If
End Sub
В событии Timer1_Timer переключаем картинки.
Private Sub Timer1_Timer()
‘Если номер текущей картинки меньше, чем всего картинок в
‘ImageList
If (k < ImageList1.ListImages.Count) Then
‘То переключаемся на следующую
k = k + 1
Else
‘Иначе, переключаемся на первую
k = 1
End If
‘И масштабируем рисунок
Picture1.PaintPicture ImageList1.ListImages.Item(k).Picture, 0, 0, Picture1.Width, Picture1.Height
End Sub
Согласно заданию команды меню связываем с кнопками панели инструментов. Опишем действие при нажатии на каждую из кнопок. При нажатии на кнопку «Открыть» вызывается диаологовое окно открытия файлов. При нажатии на кнопку «Сначала», нужно присвоить переменной k значение 0. При нажатии на кнопку «Пауза» нужно остановить таймер, сделать кнопку «Пауза» неактивной, и сделать активной кнопку «Продолжить». При нажатии на кнопку «Продолжить» нужно все сделать наоборот.
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComCtlLib.Button)
‘В зависимости от того, на какую кнопку щелкнули
Select Case Button.Key
‘Если нажать на кнопку «Открыть»
Case "Open"
‘Открыть диаологовое окно открытия файла
Call LoadGrFile(CommonDialog1)
‘Если нажать на кнопку «Сначала»
Case "FromStart"
‘Зануляем k = 0
k = 0
‘И отображаем рисунок
Picture1.PaintPicture ImageList1.ListImages.Item(k).Picture,
0, 0, Picture1.Width, Picture1.Height
‘Если нажать на кнопку «Остановить»
Case "Pause"
‘Выключить таймер
Timer1.Enabled = False
‘Отключить кнопку «Остановить»
Toolbar1.Buttons.Item(4).Enabled = False
‘Включить кнопку «Продолжить»
Toolbar1.Buttons.Item(3).Enabled = True
‘Если нажать на кнопку «Продолжить»
Case "Play"
‘Включить таймер
Timer1.Enabled = True
‘Включить кнопку «Остановить»
Toolbar1.Buttons.Item(4).Enabled = True
‘Выключить кнопку «Продолжить»
Toolbar1.Buttons.Item(3).Enabled = False
End Select
End Sub
При запуске программы, пользователь щелчком по кнопке PictureBox1 добавляет файлы, которые необходимо показывать. После добавления первого файла, он отображается в программе, и становится активными кнопки «Продолжить» и «Сначала» . При нажатии на кнопку «Продолжить» начинается циклический показ фотографий, который можно остановить кнопкой «Остановить». При нажатии на кнопку «Сначала» фотографии начинают показываться с самой первой.
Блок-схема алгоритма выбора файла из списка
Да Нет
k
= k +1 k
= 1
Вывод
изобржаения