Тема: Объекты Visual FoxPro. Свойства, события, методы
Часть 3).
Задание:Создать следующие фрагменты пользовательского интерфейса с использованием свойств, событий и методов всех вышеперечисленных объектов:
1. Включить в одну из таблиц Вашей базы данных поле General и разместить в нем рисунки типа .bmp для 3 записей.
2. Создать 2 объекта типа «ListBox». Реализовать выбор данных из одного списка и перенос его в другой поэлементно и все элементы вместе.
3. Создать объект типа «ListBox» и «PageFrame». Разместить на 2 страницах объекта «PageFrame» информацию одной из таблиц Вашей базы данных, включая рисунок из поля General. Включите в список значений объекта «ListBox» домен ключа выбранной таблицы. Разработайте взаимодействие объектов таким образом, чтобы выбор значения в «ListBox» отражался в «PageFrame».
4. Разработайте взаимодействие объектов «Timer» и «Image»
Выполнение:
1. Добавим в таблицу clients поле General, в котором будут храниться фотографии клиентов (см.рис.5.1). Затем откроем таблицу в режиме редактирования и добавим фотографии клиентов.
Рис.5.1. Добавление поля General в таблицу.
2. Организуем взаимодействие объектов класса Listbox. Добавим на предварительно созданную форму list-list два объекта Listbox, пять кнопок управления CommandButton, один объект Textbox и несколько надписей Label (см.рис.5.2). Первый список состоит из двух столбцов, второй – из одного (свойство ColumnCount). Источником данных первого списка List1.RowSource назначим поля таблицы Films: fname и price. Четыре кнопки запрограммируем таким образом, чтобы пользователь смог перемещать элементы из второго столбца первого списка во второй список и удалять их из второго списка по отдельности или все вместе (см.листинги 5.1-5.4). Событие Click пятой кнопки «Итого» содержит код, подсчитывающий сумму элементов второго списка и выводящий данное значение в объект Text1 (см.листинг 5.5). Взаимодействие элементов представлено на рис.5.3.
Рис.5.2. Создание формы list-list.
Листинг 5.1. Добавление элементов по отдельности.
FOR k=1 TO thisform.list1.ListCount
IF thisform.list1.Selected(k)then
thisform.list2.AddItem(thisform.list1.List(k,2))
ENDIF
ENDFOR
Листинг 5.2. Добавление всех элементов.
FOR k=1 TO thisform.list1.ListCount
thisform.list2.AddItem(thisform.list1.List(k,2))
ENDFOR
Листинг 5.3. Удаление элементов по отдельности.
FOR k=1 TO thisform.list2.ListCount
IF thisform.list2.Selected(k)then
thisform.list2.RemoveItem(k)
ENDIF
ENDFOR
Листинг 5.4. Удаление всех элементов.
thisform.list2.Clear
Листинг 5.5. Подсчет суммы элементов второго списка.
ssum = 0
FOR k=1 TO thisform.list2.ListCount
ssum = ssum + VAL(thisform.list2.List(k))
ENDFOR
thisform.text1.value = ssum
Рис.5.3. Взаимодействие объектов на форме list-list.
3. Организуем взаимодействие объектов Listbox и Pageframe, добавив их и кнопки управления на предварительно созданную форму editclients. Установим свойство MultiSelect объект List1 в значение True, а его событие InteractiveChange запрограммируем таким образом, чтобы пользователь мог выбирать, какие поля профиля клиента он хочет редактировать/просматривать, отмечая соответствующие пункты в списке (см.листинг 5.6). На страницу Page1 объекта PageFrame1 поместим несколько надписей Label и полей редактирования Text для работы с содержимым таблицы clients. Для отображения фотографий клиентов добавив объект класса OLEBoundControl. Результат взаимодействия объектов представлен на рис.5.4.
Рис.5.4. Взаимодействие объектов List и Pageframe.
Листинг 5.6. Событие InteractiveChange объекта List1.
IF thisform.list1.selected(1) then
thisform.pageframe1.page1.label14.Visible = .T.
thisform.pageframe1.page1.text1.Visible = .T.
ELSE
thisform.pageframe1.page1.label14.Visible = .F.
thisform.pageframe1.page1.text1.Visible = .F.
ENDIF
IF thisform.list1.selected(2) then
thisform.pageframe1.page1.label1.Visible = .T.
thisform.pageframe1.page1.text2.Visible = .T.
ELSE
thisform.pageframe1.page1.label1.Visible = .F.
thisform.pageframe1.page1.text2.Visible = .F.
ENDIF
IF thisform.list1.selected(3) then
thisform.pageframe1.page1.label2.Visible = .T.
thisform.pageframe1.page1.text3.Visible = .T.
ELSE
thisform.pageframe1.page1.label2.Visible = .F.
thisform.pageframe1.page1.text3.Visible = .F.
ENDIF
IF thisform.list1.selected(4) then
thisform.pageframe1.page1.label3.Visible = .T.
thisform.pageframe1.page1.text4.Visible = .T.
ELSE
thisform.pageframe1.page1.label3.Visible = .F.
thisform.pageframe1.page1.text4.Visible = .F.
ENDIF
IF thisform.list1.selected(5) then
thisform.pageframe1.page1.label4.Visible = .T.
thisform.pageframe1.page1.text5.Visible = .T.
ELSE
thisform.pageframe1.page1.label4.Visible = .F.
thisform.pageframe1.page1.text5.Visible = .F.
ENDIF
IF thisform.list1.selected(6) then
thisform.pageframe1.page1.label5.Visible = .T.
thisform.pageframe1.page1.text6.Visible = .T.
ELSE
thisform.pageframe1.page1.label5.Visible = .F.
thisform.pageframe1.page1.text6.Visible = .F.
ENDIF
IF thisform.list1.selected(7) then
thisform.pageframe1.page1.label6.Visible = .T.
thisform.pageframe1.page1.text7.Visible = .T.
ELSE
thisform.pageframe1.page1.label6.Visible = .F.
thisform.pageframe1.page1.text7.Visible = .F.
ENDIF
IF thisform.list1.selected(8) then
thisform.pageframe1.page1.label7.Visible = .T.
thisform.pageframe1.page1.Oleboundcontrol1.Visible = .T.
ELSE
thisform.pageframe1.page1.label7.Visible = .F.
thisform.pageframe1.page1.Oleboundcontrol1.Visible = .F.
ENDIF
4. Организуем взаимодействие объектов Timer и Image, добавив их на предварительно созданную форму, а также – объекты Spinner, CommandButton, Label. Чтобы картинки не отображались растянутыми, а сохраняли пропорции, свойство Stretch объекта Image установим в «1 - Isometric». Запрограммируем кнопку таким образом, чтобы по ее нажатии таймер останавливался или запускался (см.листинг 5.7). Чтобы пользователь мог управлять периодом смены картинок, отредактируем событие InteractiveChange объекта Spinner (см.листинг 5.8). Событие Timer объекта Timer также запрограммируем (см.листинг 5.9), именно оно будет отвечать за смену картинок. Результат взаимодействия объектов представлен на рис.5.5.
Рис.5.5. Взаимодействие объектов Image и Timer.
Листинг 5.7. Событие Click CommandButton.
IF thisform.timer1.Enabled == .T.
thisform.timer1.Enabled = .F.
thisform.command1.caption = 'Начать показ'
ELSE
thisform.timer1.Enabled = .T.
thisform.command1.Caption = 'Остановить показ'
ENDIF
Листинг 5.8. Событие InteractiveChange объекта Spinner.
thisform.timer1.Interval = this.Value
Листинг 5.9. Событие Timer объекта Timer.
m = 6*RAND() && в папке Pictures 5 картинок
m = m-m%1
DO case
CASE m == 1 OR m ==0
thisform.image2.Picture = CURDIR() + "\Pictures\IronMan.jpg"
CASE m==2
thisform.image2.Picture = CURDIR() + "\Pictures\lord-of-the-rings-1.jpg"
CASE m==3
thisform.image2.Picture = CURDIR() + "\Pictures\lord-of-the-rings-2.jpg"
CASE m==4
thisform.image2.Picture = CURDIR() + "\Pictures\lord-of-the-rings-3.jpg"
CASE m==5
thisform.image2.Picture = CURDIR() + "\Pictures\spiderman.jpg"
&& картинка по умолчанию
OTHERWISE thisform.image2.Picture = CURDIR() + "\Pictures\spiderman.jpg"
endcase
ЛАБОРАТОРНАЯ РАБОТА №6