Тема: Объекты 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