Главная страница
Навигация по странице:

  • Краткие теоретические сведения

  • II. Компонент RadioButton (радиокнопка, переключатель)

  • Обзоp CheckBox и RadioButton

  • IV. Компонент GroupBox (групповая панель, групповое окно)

  • V. Компонент RadioGroup (панель группы радиокнопок)

  • ->Items->Strings[ ]

  • Компоновка компонентов CheckBox и RadioButton

  • I. Компонент StringGrid

  • Внимание! Нумерация строк и столбцов начинается

  • -> Cells[ ][ ]

  • Ввод значений элементов массива с помощью компонента StringGrid.

  • методичка с++. Лабораторные работы по программированию в среде С Builder 0


    Скачать 1.64 Mb.
    НазваниеЛабораторные работы по программированию в среде С Builder 0
    Дата09.11.2020
    Размер1.64 Mb.
    Формат файлаpdf
    Имя файламетодичка с++.pdf
    ТипМетодическое пособие
    #149239
    страница6 из 7
    1   2   3   4   5   6   7
    ЛАБОРАТОРНАЯ РАБОТА №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;iValue+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;iValue+1;i++)
    {
    MyMas[i-1]=StrToInt(StrGr->Cells[i][1]);
    if (MyMas[i-1]<0) {MyMas[i-1]=0;}
    }
    for (int i = 0;iValue;i++)
    {
    lblRes_1->Caption=lblRes_1->Caption+IntToStr(MyMas[i])+", ";
    }

    68 15. Разобраться в набранном коде, запустить проект, убедиться в его работо- способности.
    Упражнение 2.
    1   2   3   4   5   6   7


    написать администратору сайта