Вывод графических файлов на компонент Picture. Действия Visual Basic по умолчанию. Создание графического интерфейса пользователя. Циклический показ фотографий. Формирование списка изображений и их циклический вывод на экран с определенным интервалом.
Аннотация к работе
Таким образом, событийно-управляемая модель программирования предполагает наличиев компиляторе (или в процессоре системы программирования) некоего блока, реагирующего на события по схеме: If Событие THEN Действие. Посылка сообщений естественным образом решает вопрос обработки сообщений объектами, присвоенными полиморфным переменным - независимо от того, как объявляется переменная, сообщение обрабатывает код класса, к которому относится присвоенный переменной объект. Чтобы добавить компонент COMMONDIALOG на панель инструментов General нужно открыть окно Components командой меню Project, Components, вкладку Controls и выбрать компонент Microsoft Common Dialog Control 6.0. Чтобы добавить компоненты Toolbar и IMAGELIST на панель инструментов General нужно открыть окно Components командой меню Project, Components, вкладку Controls и выбрать компонент Microsoft Windows Common Controls 6.0 (SP6). Компонент Toolbar используется для размещения на нем кнопок, управляющих процессом вывода картинок (сначала, продолжить, остановить).
План
Содержание
Задание на курсовую работу
Отчет по курсовой работе
Введение
Компоненты, используемые в проекте
Создание графического интерфейса пользователя
Программный код проекта
Выводы по работе
Список литературы
Введение
Visual Basic - один из первых языков, поддерживающих событийно-управляемое программирование (event-driven programming). Основная идея событийно-управляемого программирования заключается в том, что в программе необходимо указать, как реагировать на различные события (действия пользователя): выбор команды меню, щелчок или перемещение мыши, нажатие клавиш и др.
В обычной традиционной процедурной модели программирования приложение управляет определенной последовательностью команд. Именно в четко указанной последовательности выполняются разработанные части программного кода. Выполнение придложения начинается с первой строки программы и обычным путем строго в указанной последовательности вызываются по мере необходимости разработанные части кода или процедуры.
Visual Basic берет свое начало из языка структурного программирования BASIC. В нем реализована событийно-управляемая модель программирования. В событийно-управляемом приложении выполнение программы не следует заранее предопределенным путем. Вместо этого программа обрабатывает различные разделы кода в ответ на на события.
События могут быть вызваны действиями пользователя, сообщениями от системы или другого приложения или самим приложением. Поэтому последовательность выполнения кода программы определяется последовательностью событий. Таким образом, поток выполнения кода программы каждый раз в каждом сеансе будет другим.
Существенная часть событийно-управляемого программирования состоит в написании кода, призванного отвечать на возможные события, которые могут происходить в приложении. Visual Basic предоставляет все необходимые средства для реализвации событийно-управляемой модели. На все действия, генерирующие события, нужно отвечать, написав и связав с ними соответствующий программный код. Эти события могут происходить в любом порядке. Таким образом, событийно-управляемая модель программирования предполагает наличиев компиляторе (или в процессоре системы программирования) некоего блока, реагирующего на события по схеме:
If Событие THEN Действие.
Здесь Действие - это программная процедура, определенная разработчиком, либо действие Visual Basic по умолчанию.
В центре объектно-ориентированного программирования (ООП) находится понятие объекта. Объект - это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Объект - это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.
Наличие инкапсуляции достаточно для объектности языка программирования, но еще не означает его объектной ориентированности - для этого требуется наличие наследования.
Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм; то есть возможность объектов с одинаковой спецификацией иметь различную реализацию.
Появление в ООП отдельного понятия класса закономерно вытекает из желания иметь множество объектов со сходным поведением. Класс в ООП - это в чистом виде абстрактный тип данных, создаваемый программистом. С этой точки зрения объекты являются значениями данного абстрактного типа, а определение класса задает внутреннюю структуру значений и набор операций, которые над этими значениями могут быть выполнены. Желательность иерархии классов (а значит, наследования) вытекает из требований к повторному использованию кода - если несколько классов имеют сходное поведение, нет смысла дублировать их описание, лучше выделить общую часть в общий родительский класс, а в описании самих этих классов оставить только различающиеся элементы.
Необходимость совместного использования объектов разных классов, способных обрабатывать однотипные сообщения, требует поддержки полиморфизма - возможности записывать разные объекты в переменные одного и того же типа. В таких условиях объект, отправляя сообщение, может не знать в точности, к какому классу относится адресат, и одни и те же сообщения, отправленные переменным одного типа, содержащим объекты разных классов, вызовут различную реакцию.
Отдельного пояснения требует понятие обмена сообщениями. Первоначально (например, в том же Smalltalk) взаимодействие объектов представлялось как «настоящий» обмен сообщениями, то есть пересылка от одного объекта другому специального объекта-сообщения. Такая модель является чрезвычайно общей. Она прекрасно подходит, например, для описания параллельных вычислений с помощью активных объектов, каждый из которых имеет собственный поток исполнения и работает одновременно с прочими. Такие объекты могут вести себя как отдельные, абсолютно автономные вычислительные единицы. Посылка сообщений естественным образом решает вопрос обработки сообщений объектами, присвоенными полиморфным переменным - независимо от того, как объявляется переменная, сообщение обрабатывает код класса, к которому относится присвоенный переменной объект.
Однако общность механизма обмена сообщениями имеет и другую сторону - «полноценная» передача сообщений требует дополнительных накладных расходов, что не всегда приемлемо. Поэтому в большинстве ныне существующих объектно-ориентированных языков программирования используется концепция «отправка сообщения как вызов метода» - объекты имеют доступные извне методы, вызовами которых и обеспечивается взаимодействие объектов. Данный подход реализован в огромном количестве языков программирования, в том числе C , Object Pascal, Java, Oberon-2. В настоящий момент именно он является наиболее распространенным в объектно-ориентированных языках.
Концепция виртуальных методов, поддерживаемая этими и другими современными языками, появилась как средство обеспечить выполнение нужных методов при использовании полиморфных переменных, то есть, по сути, как попытка расширить возможности вызова методов для реализации части функциональности, обеспечиваемой механизмом обработки сообщений.
Компоненты, используемые в проекте
В проекте используются следующие компоненты: 1. Toolbar (Панель инструментов)
2. IMAGELIST (Список изображений)
3. COMMONDIALOG (Общий диалог)
4. Timer (Таймер)
5. PICTUREBOX (Изображение)
Чтобы добавить компонент COMMONDIALOG на панель инструментов General нужно открыть окно Components командой меню Project, Components, вкладку Controls и выбрать компонент Microsoft Common Dialog Control 6.0.
Чтобы добавить компоненты Toolbar и IMAGELIST на панель инструментов General нужно открыть окно Components командой меню Project, Components, вкладку Controls и выбрать компонент Microsoft Windows Common Controls 6.0 (SP6).
Компонент Toolbar используется для размещения на нем кнопок, управляющих процессом вывода картинок (сначала, продолжить, остановить). Мы будем использовать событие BUTTONCLICK, возникающее, когда пользователь щелкает по компоненту.
Компонент IMAGELIST используется для хранения списка изображений, которые будут выводиться на экран. Основное свойство, которое мы будем использоваться - LISTIMAGES, непосредственно список, в котором хранятся изображения, а метод - LISTIMAGES.Add(), позволяющий добавить новое изображение в список.
Компонент COMMONDIALOG используется для диалога открытия файла (добавления его в IMAGELIST). Основное используемое свойство - CMDFILENAME, в котором хранится путь к открываемому пользователем файлу.
Компонент Timer используется для отсчета интервалов времени между сменами картинки. Основные используемые свойства - Enabled, определяющее, активен таймер или нет, а так же Interval - время в миллисекундах между срабатываниями таймера. При срабатывании таймера происходит событие Timer.
Компонент Picture используется для отображения изображения. Он позволяет растягивать изображение до своих размеров. Основные используемые свойства - Width и Height, ширина и высота компонента, изменение которых необходимо, чтобы компонент занимал всю форму целиком.
Так же мы будем использовать события Load и Resize класса Form. Событие Load возникает при загрузке формы, а Resize - при изменении ее размеров.
Создание графического интерфейса пользователя
Выполняется команда главного меню Пуск, Программы, Microsoft Visual Basic 6.0, Microsoft Visual Basic 6.0 и открывается пиктограмма Standard EXE для создания стандартного проекта приложения.
В окне конструктора проекта зададим свойство Caption формы на «Просмотр изображений».
Размещаются на форме компоненты, как показано на Рис.1.
Рис1. Размещение компонентов на форме.
Необходимо установить свойства Width и Height компонента PICTUREBOX1 так, чтобы этот компонент занимал форму целиком (не считая Toolbar).
Установим свойство Interval компонента Timer1 равным 2000. Это означает двухсекундную задержку между сменой картинок.
Наполним компонент Toolbar кнопками. Для этого щелкнем правой кнопкой мыши по компоненту и выберем окно Property. Перейдем на вкладку Buttons. Кнопки добавляются нажатием на Insert Button. У добавляемых кнопок надо заполнять поля поля Caption (текст кнопки) и Key (идентификатор кнопки, по которому можно обращаться к ней в программе). Добавим три кнопки для управления показом рисунков, с соответственно, полями Caption «Открыть», «Сначала», «Продолжить», «Остановить» и с полями Key соответственно «Open», «FROMSTART», «Play», «Stop».
Рис. 4. Задание свойств компонента Toolbar1.
Программный код проекта
Опишем закрытую переменную типа 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: ‘Если произошедшая ошибка - не нажатие на «Отмену»
В событии загрузки формы устанавливаются начальные значения переменных 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 равной высоте формы за
Согласно заданию команды меню связываем с кнопками панели инструментов. Опишем действие при нажатии на каждую из кнопок. При нажатии на кнопку «Открыть» вызывается диаологовое окно открытия файлов. При нажатии на кнопку «Сначала», нужно присвоить переменной k значение 0. При нажатии на кнопку «Пауза» нужно остановить таймер, сделать кнопку «Пауза» неактивной, и сделать активной кнопку «Продолжить». При нажатии на кнопку «Продолжить» нужно все сделать наоборот.
Private Sub Toolbar1_BUTTONCLICK(BYVAL Button As MSCOMCTLLIB.Button)
При запуске программы, пользователь щелчком по кнопке PICTUREBOX1 добавляет файлы, которые необходимо показывать. После добавления первого файла, он отображается в программе, и становится активными кнопки «Продолжить» и «Сначала» . При нажатии на кнопку «Продолжить» начинается циклический показ фотографий, который можно остановить кнопкой «Остановить». При нажатии на кнопку «Сначала» фотографии начинают показываться с самой первой.
Блок-схема алгоритма выбора файла из списка
Тестирование программы
При открытии программы, пользователь увидит следующее окно:
При нажатии на кнопку «Открыть», он может добавить изображение, которое отобразится в программе:
При добавлении последующих картинок, они будут отображаться в программе:
При нажатии на кнопку «Сначала» отобразится первая картинка:
При нажатии на кнопку «Продолжить» картинки будут циклически меняться, а так же станет активной кнопка «Остановить» и неактивной «Продолжить»:
При нажатии на «крестик» выводится диалоговое окно с просьбой подтвердить выход из программы:
При изменении размеров окна изображение соответствующим образом масштабируется:
Таким образом, программа полностью удовлетворяет поставленным требованиям.
Список литературы
графический изображение интерфейс циклический
Мной была написана программа, удовлетворяющая поставленной задаче. Она позволяет формировать список изображений и циклически их выводить на экран с определенным интервалом, а так же управлять этим процессом с помощью кнопок «Сначала», «Остановить» и «Продолжить».
Для решения поставленной задачи были использованы стандартные компоненты Image, Toolbar, COMMONDIALOG, IMAGELIST, Timer, методы FCMDFILENAME и LOADGRFILE а так же события Form_Load, Form_Unload, Form_Resize, Timer1_Timer, Toolbar1_BUTTONCLICK.
Я получила опыт написания событийно-управляемой программы.
Список литературы
1. М. Хальворсон «MS Visual Basic 6.0. Шаг за шагом»