Разберем еще один пример, который будет связан с новым для нас элементом управления «Изображение», позволяющим отображать содержание графических файлов. Пиктограмму этого элемента легко найти среди других элементов управления. Кроме обычных свойств у элемента управления «Изображение» есть свойство Picture. Когда вы в окне свойств попытаетесь подобрать для него значение, то автоматически на экране открывается диалоговое окно для выбора файла. В этом случае следует указать один из файлов с графическим изображением (например, файл с расширением bmp или jpg). На рис. 1.34 объект подобного типа размещен на рабочем листе, а в качестве значения его свойства Picture указано имя одного из графических файлов.
Перейдем теперь к практической задаче, связанной с рассматриваемым элементом управления. Необходимо сделать так, чтобы при перемещении курсора мыши менялось изображение данного элемента, а именно: при нахождении курсора мыши в левой части элемента отображалась одна картинка, а при перемещении мыши в правую половину элемента — другая. Для решения подобной задачи необходимо написать процедуру для обработки перемещения курсора мыши (MouseMove).
Перейдем в редактор Visual Basic и в списке объектов выберем Image1 (это имя нашего элемента управления по умолчанию, и здесь мы его менять не будем), а в правом списке определим действие, которое нас сейчас интересует, MouseMove (рис. 1.35).
Таким образом, в окне редактора программного кода мы выбрали заготовку для процедуры, и нам осталось написать ее содержание. В листинге 1.14 приведена процедура, выполняемая при наведении курсора мыши на область изображения.
1 2 3 4 5 6 7 8 9 10 | ' Листинг 1.14. Обработка перемещения мыши в области изображения Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If X < Image1.Width / 2 Then Image1.Picture = LoadPicture("С:Рис1.jpg") Else Image1.Picture = LoadPicture("С:Рис2.jpg") End If End Sub |
Здесь появились новые конструкции, которые требуют комментария. Во-первых, X и Y — это координаты курсора мыши, которые автоматически передаются системой в процедуру Image1_MouseMove. Эти переменные располагаются в списке входных параметров, и в тексте процедуры значение одной из этих переменных (X) мы используем.
У элемента управления «Изображение» имеется стандартное свойство Width, которое определяет его ширину. В тексте листинга используется условие If X < Image1.Width / 2 Then
, в котором проверяется — находится курсор мыши левее середины окна рисунка или нет? Если да, то в элемент Image1 выводится изображение из файла 1.jpg, а если нет — то из файла 2.jpg.
В листинге 1.14 используется функция VBA LoadPicture, входным параметром которой является имя графического файла с указанием полного пути, где он располагается. В нашем случае графические файлы с указанными именами располагаются на диске С: (если на вашем компьютере другие имена каталога и файлов, то следует входные параметры при вызовах функции LoadPicture изменить).
Таким образом, сформулированное задание требует написания только одной процедуры, что мы уже сделали. Теперь, если выйти из режима конструктора и перейти в Microsoft Excel, вы увидите, что картинка в окне меняется в зависимости от того, где располагается курсор мыши.
Рассмотрим теперь другую, более интересную в практическом плане задачу, связанную с элементом управления «Изображение». А именно: на листе создадим некий вариант базы данных фотографий сотрудников. Интерфейс готовой разработки показан на рис. 1.36. С помощью кнопки Заполнить список в поле со списком (расположено ниже только что размещенной кнопки) вносятся фамилии сотрудников. Будем считать, что на диске С: в каталоге Рис располагаются графические файлы с фотографиями сотрудников. Названия файлов будут совпадать с фамилиями сотрудников (разумеется, со стандартным расширением, отражающим тип графического файла).
В листинге 1.15 приведена процедура, позволяющая заполнить список фамилиями сотрудников, а в листинге 1.16 — процедура, позволяющая после этого с помощью щелчка на списке выбрать фотографию определенного сотрудника. Как видно из текста процедур, для свойства Name кнопки использовано CommandButton1, для изображения — Image1, а для поля со списком — Sp1.
1 2 3 4 5 6 7 | ' Листинг 1.15. Процедура заполнения поля со списком по щелчку на кнопке Private Sub CommandButton1_Click() Sp1.Clear Sp1.AddItem "Комарова Ю." Sp1.AddItem "Логинова H." Sp1.AddItem "Хайретдинова Э." End Sub |
1 2 3 4 | ' Листинг 1.16. Процедура для выбора фотографии Private Sub Sp1_Click() Image1.Picture = LoadPicture("С:/Рис/" + Sp1.Text + ".jpg") End Sub |
Таким образом, данный пример позволяет вам сформировать свою информационную базу с фотографиями сотрудников.