методичка с++. Лабораторные работы по программированию в среде С Builder 0
Скачать 1.64 Mb.
|
ЛАБОРАТОРНАЯ РАБОТА №7 ПРОГРАММИРОВАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА. ОПЕРАТОРЫ ВЕТВЛЕНИЯ, ЦИКЛА. КОМПОНЕНТЫ CHECKBOX, RADIOBUTTON, RADIOBUTTON, PANEL, GROUPBOX, BEVEL, SPINEDIT, STRINGGRID. ДАТЧИК СЛУЧАЙНЫХ ЧИСЕЛ. РАБОТА С МАССИВАМИ. Цель работы: освоение визуальных компонентов, необходимых для реализаций алгоритмов ветвления и циклических алгоритмов. Закрепление навыков программирования ветвящихся и циклических структур, использо- вания датчика случайных чисел. Краткие теоретические сведения: I. Компонент CheckBox (флажок) Используется для включения/выключения опций. Основные свойст- ва компонента приведены в табл. 12. Таблица 12 Название Смысл Checked Определяет, установлен флажок или нет. Возможные значения: True Флажок установлен False Флажок снят State Регулирует состояние флажка, если разрешено ис- пользование трех его состояний. Возможные значе- ния: cbChecked Флажок установлен («отмечено) cbUnChecked Флажок снят («не отмечено) cbGrayed Состояние флажка не определено Связь между Checked и State Значение State Значение Checked cbChecked True cbUnChecked False cbGrayed False AllowGrayed Разрешает/запрещает третье состояние флажка Возможные значения True Разрешена установка третьего состояния флажка False Запрещена установка третьего состояния флажка Color Цвет фона флажка 57 Важнейшим событием компонента является событие OnClick, кото- рое возникает при изменении состояния флажка (из установленного в снятый или из снятого в установленный). II. Компонент RadioButton (радиокнопка, переключатель) Этот компонент должен использоваться в группе, где существует не менее двух экземпляров RadioButton. В любое время можно вы- брать только один RadioButton данной группы. Выбор переключателя в группе снимает выделение с выбранного в данный момент переклю- чателя в этой группе. Под группой понимается несколько компонент RadioButton, нахо- дящихся в одном контейнере (панель Panel, GroupBox или форма) Используются для выбора пользователем одной из нескольких взаи- моисключающих альтернатив. Свойства компонента представлены в табл. 13. Таблица 13 Название Смысл Checked Определяет, выбрана радиокнопка или нет. Возможные значения: True Выбрана False Не выбрана Color Цвет фона радиокнопки Важнейшим событием является событие OnClick, полностью иден- тичное одноименному событию компонента CheckBox. Упражнение 1. Обзоp CheckBox и RadioButton 1. Создать новый проект. Имя файла формы – FrmCheckBox, имя файла проекта – PrCheckBox. 2. Разместить на форме компоненты, как показано на рис. 11. Рис. 11. Вид формы для проекта PrCheckBox. 58 3. Самостоятельно написать программный код для кнопки «Расчет». Учесть, что аргумент функции может быть дробным, а результат работы нужно со- хранить в переменной res. 4. Проверить работоспособность программы. 5. Добавить на форму компонент CheckBox. Свойство Caption установить в «Модуль», свойство Name – в «cbxModul». 6. Изменить обработчик нажатия кнопки «Расчет» следующим образом: …//код, набранный в п. 3, но без вывода результат} if (cbxModul.Checked) {res = abs(res);} … //вывод результата 7. Сделать так, чтобы при смене состояния флажка вместо «Функция: у = 1 – х 2 » отображалось бы «Функция: у = |1 – х 2 |» или «Функция: у = 1 – х 2 » в за- висимости от состояния флажка. Один из вариантов решения: a. Добавить на форму два компонента label, свойства Caption кото- рых установить в «|». Имена компонентов – lbl1 и lbl2 соответственно. Тип шрифта – Times New Roman; эффекты – те же, что и у компонента, в котором выводится функция, но без эффекта курсива. b. Установить для метки Label2 свойство Transparent в True c. Разместить компоненты lbl1 и lbl2 так, как показано на рис. 12. Рис. 12. Места lbl1 и lbl2. d. Установить свойства компонентов lbl1 и lbl2 так, чтобы при за- пуске они бы не отображались в окне, а флажок cbxModul находился бы в снятом неустановленном) состоянии. lbl 1 Lb l2 59 e. Перейти в обработчик события Click для компонента cbxModul и самостоятельно написать код, по которому при установке флажка ком- поненты lbl1 и lbl2 становились бы видимыми, а при снятии – не види- мыми. 8. Запустить проект, проверить правильность работы программы. 9. Сохранить проект. 10. Разместить на форме две радиокнопки с подписями «Дневная», «Вечер- няя». 11. Запустить проект. Убедиться, что лишь одна из них может находиться в установленном (выбранном) состоянии. 12. Добавить три новые радиокнопки с подписями «ФРТ», «ФКТИ», «ФИБС». 13. Запустить, убедиться, что по-прежнему лишь одна из всех добавленных на форму радиокнопок может находиться в установленном состоянии. 14. Закрыть проект без сохранения изменений Краткие теоретические сведения: III. Компонент Panel (панель) Используется для группирования управляющих элементов (кнопок, радиокнопок, флажков и т. д.), функционально связанных друг с другом. Не имеет заголовка, позволяет регулировать оформление границ. Важнейшие свойства представлены в табл. 14 Таблица 14 Название свойства Смысл 1 2 BevelInner Задает вид внутренней фаски панели Возможные значения: bvNo e Внутренней фаски нет. Значение по умолчанию bvLowered фаска выглядит утопленной в элемент управления bvRaised Фаска выглядит приподнятой над эле- ментом управления bvSpace Фаска заменяется отступом BevelOuter Задает вид внешней фаски панели Возможные значения, такие же, как и у свойства BevelInner BevelWidth Определяет ширину внешней части панели 60 Таблица 14 (продолжение) 1 2 BorderStyle Определяет стиль бордюра Возможные значения: bsNone нет рамки bsSingle компонент по периметру обводится ли- нией толщиной в 1 пиксель BorderWidth Определяет ширину бордюра FullRepaint Разрешает/запрещает перерисовку панели и всех ее дочерних элементов при изменении ее размеров Возможные значения: True Перерисовка разрешена False Перерисовка запрещена IV. Компонент GroupBox (групповая панель, групповое окно) Используется для группирования управляющих элементов (кнопок, радиокнопок, флажков и т. д.), функционально связанных друг с другом. Имеет заголовок, но не позволяет регулировать оформле- ние границ. V. Компонент RadioGroup (панель группы радиокнопок) Используется для отображения регулярно расположенных (столбца- ми и столбиками) радиокнопок, подписи которых имеют близкую длину. Важнейшие свойства компонента представлены в табл 15. Таблица 15 Название свойства Смысл 1 2 Items Определяет количество радиокнопок и их надписи. Для редактирования списка радиокнопок следует на- жать на кнопку справа от названия свойства в окне ObjectInspector. Для программного получения надписей радиокнопок следует использовать конструкцию вида: <ИмяКомпонентаRadioGroup>->Items->Strings[<ИндексНужнойРадиокнопки>] Columns Определяет количество столбцов, в которых будут располагаться кнопки (не более 17). ItemIndex Содержит индекс (номер) выбранной (выделенной) ра- диокнопки. Нумерация начинается с 0!!!! Если ItemIndex= -1 (значение по умолчанию), то ни одна радиокнопка не выбрана. 61 Упражнение 2. Компоновка компонентов CheckBox и RadioButton 1. Создать новый проект, имя файла формы FrmGroup, имя файла проекта – PrGroup. 2. Добавить на форму компонент RadioGroup 3. Установить для компонента: подпись в «Факультет», имя – rgrpF, добавить радиокнопки с подписями «ФИБС», «ФКТИ», «ФЭА», «ФРТ», «ФЭЛ», «ФЭМ», «ГФ», «ОФ». 4. Последовательно установить количество столбцов радиокнопок в 2, 3, 4, 5. Просмотреть получающийся эффект. 5. Изменить подписи радиокнопок, как показано в табл. 16. Таблица 16 Старая подпись Новая подпись ФРТ Факультет радиотехники и телекоммуникаций ФЭЛ Факультет электроники ОФ Открытый факультет 6. Вновь последовательно установить количество столбцов радиокнопок в значения 2, 3, 4. Просмотреть получающийся эффект. 7. Добавить на форму компонент Panel. Свойство Caption очистить. 8. Меняя свойства BevelInner, BevelOuter, BevelWidth, BorderStyle, BorderWidth самостоятельно просмотреть варианты оформления панели. 9. Разместить на Panel три компонента RadioButton. Подписи компонентов: «y = ax + b», «y = sin x», «y = log x» 10. Изменить количество и подписи радиокнопок на панели, как показано на рис. 13. 11. Запустить проект, убедиться, что ни одна из радиокнопок автоматически не выбрана. 12. Закрыть проект и сделать так, чтобы автома- тически при запуске выбиралась бы радиокнопки с подписью «y = sin x» и «х = 100». 13. Запустить проект и убедиться в независимо- сти радиокнопок на панелях аргумента функции и типа функции. Рис. 13. Вид панели 62 14. Добавить на панель Panel по два компонента Label и Edit. Подпись перво- го компонента Label – «а =», подпись второго – «b =». Написать соответст- вующие обработчики событий, чтобы при выборе варианта «y = ax + b» до- бавленные компоненты Label и Edit становились доступны, а при выборе других видов функций – недоступными. Убедиться, что при запуске прило- жения добавленные компоненты также недоступны. 15. Добавить на форму кнопку с подписью «Вычислить», компонент Label. 16. Запрограммировать обработчик события Click для кнопки «Вычислить» так, чтобы при нажатии на кнопку в компоненте Label выводился бы резуль- тат вычисления функции в заданной точке. 17. Разместить на форме компонент GroupBox и перенести на него все ком- поненты, располагающиеся в Panel. Подпись GroupBox установить в «Вид функции». 18. Запустить проект и проверить правильность его работы. I. Компонент StringGrid Вкладка на палитре компонент – Additional. Предназначен для вво- да/вывода текстовых табличных данных. Важнейшие свойства компо- нента представлены в табл. 17. Таблица 17 Название Смысл 1 2 BorderStyle Определяет стиль границ таблицы. Возможные зна- чения: bsNone Границы нет. Применяется в том слу- чае, когда таблица размещается внутри какого-либо другого компонента, внеш- ние границы которого являются также внешними границами компонента StringGrid. В этом случае таблица бо- лее гармонично вписывается в этот компонент. bsSingle Граница – линия, очерчивающая таблицу по периметру ColCount Количество столбцов в таблице Color Цвет «не заголовочных» ячеек таблицы Ctrl3D Управляет объемным/плоским видом компоненты. Возможные значения: 63 Таблица 17 (продолжение) 1 2 Ctrl3D (про- должениие) True Компонент объемный False Компонент плоский Default- ColWidth Автоматически устанавливаемая ширина столбцов таблицы Default- RowHeight Автоматически устанавливаемая высота строк таб- лицы FixedCols Определяет количество «фиксированных» столбцов, не участвующих в горизонтальной прокрутке. «Фиксированные» столбцы применяются для разме- щения заголовков столбцов таблицы FixedRows Определяет количество «фиксированных» строк, не участвующих в вертикальной прокрутке. «Фиксиро- ванные» строки применяются для размещения заго- ловков строк таблицы FixedColor Цвет фона фиксированных строки и столбцов таб- лицы GridLineWidth Ширина линии-разделителя между ячейками таблицы Options позволяет дополнительно настроить внешний вид и поведение компонента StringGrid. Свойство содер- жит 15 элементов, которые в Object Inspector мо- гут принимать значение True либо False: goFixedVertLine Есть/нет вертикальные разделительные линии меж- ду ячейками фиксированной зоны goFixedHorzLine Есть/нет горизонтальные разделительные линии меж- ду ячейками фиксированной зоны goVertLine Есть/нет вертикальные разделительные линии меж- ду обычными ячейками goHorzLine Есть/нет горизонтальные разделительные линии меж- ду обычными ячейками goRangeSelect Разрешение/запрет выделе- ния региона ячеек мышкой goDrawFocusSelected Выделять/не выделять цве- том ячейку, имеющую фокус 64 Таблица 12 (продолжение) 1 2 Options (про- должение) goRowSizing Разрешение/запрет на изменение мышкой высоты строки таблицы goColSizing Разрешение/запрет на изменение мышкой ширины столбца таблицы goRowMoving Разрешение/запрет передвижения строки таблицы мышкой (изменять её индекс) goColMoving Разрешение/запрет передвижения столбца таблицы мышкой (изменять её индекс) goEditing Разрешение/запрет на редактирова- ние ячеек goTabs определяет поведение фокуса при нажатии клавиши Tab: True фокус перемещается на со- седнюю ячейку таблицы False фокус перемещается на компонент, следующий в списке TabOrder goRowSelect Выделять/не выделять цветом всю строку, содержащая ячейку с фокусом goAlways- ShowEditor Разрешить/запретить доступность редактирования ячейки без допол- нительных действий при перемеще- нии в ячейку фокуса goThumb- Tracking Определяет поведение таблицы при протягивании пользователем пол- зунка скроллинга мышкой: True скроллинг происходит од- новременно с движением ползунка False скроллинг происходит только после того как пользователь отпустит ползунок RowCount Число строк в таблице ScrollBars Управляет наличием/отсутствием полосы прокрутки в таблице, если если количество строк или столб- цов не помещается в окне компонента. 65 Таблица 12 (окончание) 1 2 ScrollBars (продолже- ние) Возможные значения: ssBoth при необходимости появляются как вертикальная, так и горизонталь- ная полосы прокрутки ssHorizontal при необходимости появляются только горизонтальная полоса про- крутки ssVertical при необходимости появляются только вертикальная полоса про- крутки ssNone ни горизонтальная, ни вертикаль- ная полосы прокрутки появиться не могу в любом случае Row Свойства доступны только в режиме выполнения. Определяют номер строки выделенной в таблице ячейки. Внимание! Нумерация строк и столбцов начинается с нуля!!!! Col Свойства доступны только в режиме выполнения. Определяют номер столбца выделенной в таблице ячейки. Внимание! Нумерация строк и столбцов начинается с нуля!!!! Cells Свойство доступно только в режиме выполнения. Позволяет получить доступ к каждой отдельной ячейке таблицы по заданным номерам столбца и строки. Принцип доступа: <ИмяКомпонента> -> Cells[<НомерСтолбца>][<НомерСтроки>] Внимание! Нумерация строк и столбцов начинается с нуля!!!! Тип данных – хранящихся в Cells – AnsiString. Упражнение 3. Ввод значений элементов массива с помощью компонента StringGrid. 1. Создать новый проект. Сохранить его в папке «InpTableCol». Имя проекта – InpTable, имя файла модуля – frmTable. 2. Добавить на форму: компонент Label; 66 компонент SpinEdit; компонент StringGrid; два компонента Button. Компонент StringGrid должен быть невидим при запуске, число строк – 2, число фиксированных строк и столбцов – 1. Таблица должна иметь макси- мально возможный размер по горизонтали и возможность редактирования данных в ячейке. Имя таблицы – StrGr. Подпись для компонента Label установить в «Число столбцов таблицы». У компонента SpinEdit свойства MinValue и MaxValue установить в 1 и 100, соответственно. Имя – speCount. Первый компонент Button: подпись – «Вывести таблицу», имя – btnOutTable. Второй компонент Button: подпись – «Что ввели?», имя – btnRes. 3. Перейти в обработчик события Click для компонента btnOutТable. На- брать в нем следующий код: unsigned char ColCount; ColCount = speCount->Value+1; StrGr->ColCount= ColCount; StrGr ->Cells[0][0]="Столбец"; StrGr ->Cells[0][1]="Данные"; for (int i=1;i { StrGr ->Cells[i][0]=IntToStr(i); } StrGr ->Visible = True; 4. Не запуская программу, постараться понять действия, выполняемые в вышеприведенном коде. 5. Проверить свои размышления: запустить программу, задавая различные значения для числа столбцов таблицы в компоненте SpinEdit. 6. Проверить возможность ручного ввода в ячейки таблицы. 7. Добавить на форму два компонента Label, расположить их рядом друг с другом. В первом компоненте установить подпись «Результат ввода», во вто- ром компоненте подпись очистить. Имя второго компонента – lblRes. 8. Перейти в обработчик события Click для компонента btnRes и набрать в нем следующий код: 67 lblRes->Caption=""; for (int i = 1;i { lblRes->Caption=lblRes->Caption+StrGr->Cells[i][1]+", "; } 9. Не запуская программу, постараться понять действия, выполняемые в вышеприведенном коде. 10. Проверить свои размышления: запустить программу, задать желаемое число столбцов для таблицы (не более 10), заполнить ячейки таблицы целы- ми числами с различными знаками; нажать на кнопку «Что ввели?» 11. Сохранить проект и форму в новой папке с именем «InpTableRow». Име- на файлов не менять. C помощью файлового менеджера убедиться, что в папке InpTableRow появилось 6 файлов. 12. Самостоятельно изменить тексты функций для обеих кнопок так, чтобы заполнение таблицы велось не как вектор-строки, а как вектор-столбца. 13. Добавить на форму компонент Label, расположить под компонентом lblRes; подпись очистить, имя установить в lblRes_1. 14. Добавить на форму третью кнопку, подпись – «Записать таблицу в мас- сив». Цель кнопки – переписать данные, введенные пользователем в табли- цу, в одномерный массив целых чисел с именем MyMas, изменить в массиве MyMas все отрицательные введенные числа на 0 и вывести результат в ком- понент lblRes_1. Код обработчика события Click для кнопки будет выглядеть следующим образом: int MyMas[100]; lblRes_1->Caption=""; for (int i = 1;i { MyMas[i-1]=StrToInt(StrGr->Cells[i][1]); if (MyMas[i-1]<0) {MyMas[i-1]=0;} } for (int i = 0;i { lblRes_1->Caption=lblRes_1->Caption+IntToStr(MyMas[i])+", "; } |