- •Введение
- •Общие указания к выполнению практических работ
- •Практическая работа №1
- •Теоретическая часть
- •Пример выполнения задания
- •Задание:
- •Спецификация программы:
- •Постановка задачи:
- •Блок-схема алгоритма программы
- •Варианты заданий
- •Контрольные вопросы
- •Практическая работа №2
- •Теоретическая часть
- •Методы стратегии ‘белого ящика’
- •Метод покрытия операторов
- •Метод покрытия решений (покрытия переходов)
- •1.3 Метод покрытия условий
- •1.4 Критерий решений (условий)
- •1.5 Метод комбинаторного покрытия условий
- •Порядок выполнения практической работы
- •Контрольные вопросы
- •Практическая работа №3
- •Теоретические часть
- •Задание 1
- •Задание 2
- •Контрольные вопросы
- •Практическая работа №6
- •Описание практической работы Теоретические сведения
- •Операторы обнаружения и обработки исключений
- •Задание 1
- •Задание 2
- •Задание 2
- •Контрольные вопросы
- •Практическая работа №8
- •Описание лабораторной работы Задание 1
- •Задание 2
- •Методы компонента tMemo
- •Задание 1
- •Задание 2
- •Задание 3
- •Контрольные вопросы
- •Практическая работа №10
- •Теоретическая часть
- •Класс Tstrings
- •Задание 1
- •Задание 2
- •Задание 3
- •Основные свойства компонента StringGrid
- •Описание лабораторной работы Задани 1
- •Задание 2
- •Задание 1
- •Контрольные вопросы
- •Практическая работа №13
- •Теоретическая часть
- •Описание лабораторной работы
- •Контрольные вопросы
- •Практическая работа №14
- •Теоретическая часть RadioGroup, RadioButton и GroupBox - группы радиокнопок
- •Свойства компонента CheckBox
- •Свойства компонента RadioButton
- •Button и BitBtn - управляющие кнопки
- •Свойства компонента BitBtn
- •Задание 1
- •Свойства компонента SpeedButton
- •Компонент UpDown
- •Описание лабораторной работы Задание 1
- •Задание 2
- •Задание 3
- •TrackBar и ScrollBar - ползунки и полосы прокрутки
- •Контрольные вопросы
- •Практическая работа №15
- •Теоретические сведения
- •Описание лабораторной работы Задание 1
- •Задание 2
- •Задание 3
- •Задание 4
- •Панели общего назначения — компоненты Panel, GroupBox, Bevel, Splitter
- •Задание 1
- •Задание 2
- •Компонент PageControl
- •Задание 3
- •Задание 4
- •Контрольные вопросы
- •Практическая работа №17
- •Теоретические сведения
- •Описание практическая работы Задание 1
- •Контрольные вопросы
- •Практическая работа №18
- •Теоретические сведения Компонент MainMenu - главное меню
- •Описание лабораторной работы Задание 1
- •Контрольные вопросы
- •Практическая работа №19
- •Теоретические сведения Стандартные диалоги и их фрагменты
- •Задание 1
- •Задание 2
- •Задание 3
- •Контрольные вопросы
- •Практическая работа №20
- •Теоретические сведения
- •I способ
- •II способ
- •Свойства компонента TreeViewl
- •Задание
- •Контрольные вопросы
- •Практическая работа №21
- •Теоретические сведения Компонент tImage
- •Задание 1
- •Ход выполнения
- •Задание 2
- •Ход выполнения
- •Задание 3
- •Задание 4
- •Задание 1
- •Задание 3
- •Задание 4
- •Контрольные вопросы
- •Практическая работа №23
- •Теоретические сведения
- •Практическая работа №24
- •Теоретические сведения Компонент построения графиков и диаграмм Chart
- •Свойства компонента Chart
- •Задание 1
- •Задание 2
- •Контрольные вопросы
- •Практическая работа №25
- •Прием перетаскиваемых объектов
- •Задание 1
- •Контрольные вопросы
Задание 1
На пользовательской форме должны быть расположены 3 списка. Один из списков содержит названия напитков. Пользователь может переносить элементы из этого списка в списки «Любимые» и «Нелюбимые» и обратно. При этом перемещаемый элемент должен удалятся из списка-источника. То есть, например, перенос элемента «Чай» из общего списка в список «Любимые» происходит в следующем порядке: он добавляется в список «Любимые» и удаляется из общего списка. Таким образом общее количество элементов всех трех списков остается постоянным. Перенос элементов между списками должен осуществляться по нажатию на соответствующие кнопки, либо мышью (система Drag and Drop).
Списки «Любимые» и «Нелюбимые» должны сохраняться в текстовые файлы.
Для создания формы использовать компоненты:
Label – для подписей
ListBox – для вывода списков
Button – для инициирования действий
Рекомендуемая компоновка формы программы представлена на рисунке 1.
Рис. 1 Рекомендуемая компоновка формы
На панели компонентов выбрать вкладку Standard, расположить на форме компоненты Label , Button и ListBox в требуемом количестве (см. рис.1).
Изменить подписи объектов Label и пользовательской формы Form1. Для этого необходимо у перечисленных объектов отредактировать свойство Caption в соответствии с рисунком 1.
Для заполнения ListBox2 названиями напитков необходимо выделить этот список, щелкнув по нему левой кнопкой мыши, и в окне Object Inspector найти поле свойства Items. При нажатии в этом поле на кнопку с тремя точками появится окно String List Editor, в котором следует перечислить названия всех напитков (см. рис. 2).
Рис. 2. Редактирование свойства Items в окне String List Editor
Перенос элементов между списками с помощью мыши можно организовать следующим образом.
a. Для каждого списка задать свойству DragMode значение dmAutomatic.
b. Для списка ListBox3 назначить обработчик событие OnDragOver. Для этого нужно выбрать список ListBox3 и в окне Object Inspector на вкладке Events найти событие OnDragOver и дважды щелкнуть по его полю.
При этом автоматически будет создана заготовка для функции-обработчика. В тело этой функции следует записать следующий код:
void __fastcall Tform1::ListBox3DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState state, bool &Accept)
}
/*функция-обработчик события OnDragOver. Если данная функция у объекта не задана, то такой объект не способен воспринимать перетаскиваемые в него объекты.
Создаем указатель на объект-источник Source, который будет восприниматься как ListBox. Например при перетаскивании из списка ListBox2 в список ListBox1, источником являеься список ListBox2 */
TListBox *Sour=(TListBox *) Source;
/*если у объекта-источника общее количество элементов (строк) больше 0 и выбран элемент, то его перенос разрешается. Иначе запрещается*/
if(Source−>Coumt > 0 && Source−>ItemIndex > -1)
accept=true;
else
accept=false;
}
c. Для этого же списка ListBox3 назначить обработчик событие OnDragDrop. Для этого нужно создать заготовку функции-обработчика события OnDragDrop и в нее записать ниже приведенный код:
void __fastcall TForm:: ListBox3DragDrop(TObject *Sender, TObject *Source, int X, int Y)
{
/*Функция-обработчик события OnDragDrop описывает действия при подтверждении (в момент, когда отпускается кнопка мыши) перетаскивания элемента из одного списка в другой создаем указатель на объект-источник Source, который будет восприниматься как listBox. Например, при перетаскивании из списка ListBox2 в список ListBox1, источником является список ListBox2*/
TListBox *Sour=(TListBox *)Source;
/*Создаем указатель на объет-приемник Sender, который будет воспиниматься как ListBox. Например, при перетаскивании из списка ListBox2 в список ListBox1, приемником является список ListBox1*/
TListBox *Send=(TListBox *)Sender;
/* Объявляем переменную для определения координат мыши*/
TPoint p;
/* Объявляем переменную для определения элемента списка, на который указывает курсор мыши */
int I;
/* Определяем положение курсора мыши*/
p=Point(X,Y);
/* Определяем индекс в списке-приемника, на который указывает курсор мыши*/
I=Send−>ItemAPos(p,true);
/* Вставляем элемент в список-приемник, перетащенный из списка-источника. Положение перетащенного элемента будет определено положением курсора мыши*/
Send−>Items−>Delete(Sour−>ItemIndex);
/* Удаляем из списка-источника перетащенный элемент*/
}
d. Для списков ListBox2 и ListBox1 в обработчиках событий OnDragOver и OnDragDrop выбрать из выпадающих списков уже готовые функции ListBox3DragOver и ListBox3DragDrop:
Сохранить проект.
Провести отладку и тестирование программы.
