Добавил:
ikot.chulakov@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по Delphi с готовыми программами / Лабораторная работа №16 Стандартные компоненты.pdf
Скачиваний:
17
Добавлен:
12.07.2020
Размер:
433.45 Кб
Скачать

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Лабораторная работа № 16

Стандартные компоненты. TCheckBox. TRadioGroup. TRadioButton. TPanel. TGroupBox.

Введение

В лабораторной работе рассмотрены некоторые стандартные компоненты с вкладки

Standart. Рассмотрены компоненты TCheckBox, TRadioButton, TPanel, TGroupBox, TRadioGroup. Приведены примеры программ использующие рассмотренные компоненты.

Компонент TCheckBox

Компонент TCheckBox находится на вкладке Standart палитры компонентов (рисунок 1).

Рисунок 1 – Расположение компонента TCheckBox в палитре компонентов

Компонент TCheckBox предназначен для того, чтобы пользователь мог указать свое решение типа да/нет или да/нет/не уверен (в последнем случае флажок устанавливается, выглядит блеклым, см. рисунок 2). Это решение отражается в свойстве State компонента, доступном как для чтения, так и для записи. В составе диалогового окна может быть несколько компонентов TCheckBох причем состояние любого из них никак не зависит от состояния остальных, поэтому такие переключатели называются независимыми.

Рисунок 2 – Различные состояния независимого переключателя

Наиболее важные свойства компонента TCheckBox представлены в таблице 1.

Таблица 1 – Свойства компонента TCheckBox

Свойство

Описание

 

 

type TLeftRight = (taLeftJustify,

Определяет положение текста: taLeftJustify с

taRightJustify);

левой стороны компонента; taRightJustify с правой

property Alignment: TLeftRight;

стороны

 

property AllowGrayed: Boolean;

Разрешает/запрещает использование состояния

 

cbGrayed (не уверен)

property Caption: String;

Содержит связанный с компонентом текст

 

 

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Свойство

Описание

 

 

property Checked: Boolean;

Содержит значение, соответствующее выбору

 

пользователя. Состоянию cbChecked

 

соответствует значение True. Состояния

 

cbUnChecked и cbGrayed отражаются как False.

type TCheckBoxState = (cbUnChecked,

Содержит состояние компонента:

cbChecked, cbGrayed);

cbUnchecked – нет;

property State: TCheckBoxState;

cbChecked – да;

cbGrayed – не уверен

 

 

 

 

Как и для компонента TButton, свойство Color компонента фактически игнорируется, а свойства Height и Width определяют размеры прямоугольника, в котором выводится связанный с флажком текст, и никак не влияют на размеры самого флажка. Текст указывается в свойстве Caption.

Во время прогона программы при щелчке на компоненте он циклически изменяет свое состояние.

Для этого компонента обычно используется только обработчик события OnClick. В этом обработчике анализируется текущее состояние переключателя и выполняются некоторые действия. Типичное тело обработчика OnClick для компонента TCheckBox имеет следующий вид:

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

if CheckBoxl.Checked then ...

else ...

end;

или для трехпозиционного переключателя (свойство AllowGrayed=true)

procedure TForm1.CheckBox1Click(Sender: TObject); begin

case CheckBoxl.State of cbChecked : ...; cbUnСhecked: ...; cbGrayed : ...;

end;

end;

В качестве примера рассмотрим программу расчета стоимости покупки с учетом скидки на сумму покупки. Будем считать что покупатель может получить две скидки, а именно скидку 10% если идет распродажа и скидку 30% как постоянный покупатель. Одна скидка не зависит от другой и дается на всю сумму.

Создайте новую форму и поместите на нее два компонента TEdit, два TCheckBox, два TButton и один компонент TLabel. Расположите компоненты как показано на рисунке 3.

Установите значения свойств компонентов как указано в таблице 2.

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Рисунок 3 – Вид главной формы программы «Сумма покупки» Таблица 2 – Свойства компонентов

Свойство

Caption

AutoSize

WordWrap

 

 

 

 

edtCount

edtPrice

btnCalc

Вычислить

btnExit

Выход

chbPermament

Постоянный покупатель

chbAction

Распродажа

frmTovar

Сумма покупки

lbResult

False

True

 

 

 

 

Создайте обработчик события OnClick для кнопки btnCalc (листинг 1). В этом обработчике осуществляется расчет суммы покупки с учетом скидок и вывод результатов расчета в компонент lbResult.

Листинг 1 – Процедура обработки события OnClick компонента btnCalc

procedure TfrmTovar.btnCalcClick(Sender: TObject); var Price, //цена единицы товара

Count, //количество товара

Summa, //cумма Discount:real; //размер скидки

begin

Discount:=1.0;//нет скидок

{получение данных из строк ввода} Price:=StrToFloat(edtPrice.Text); Count:=StrToFloat(edtCount.Text);

//вычисление скидки //скидка как постоянному покупателю 30%

if chbPermanent.Checked then Discount:=Discount*0.7; //скидка при распродаже 10%

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

if chbAction.Checked then Discount:=Discount*0.9;

//вычисление суммы покупки

Summa:=Price*Count*Discount;

//вывод результата lbResult.Caption:='Сумма покупки '+

FloatToStrF(Summa, ffFixed, 6, 2) + ' руб.';

//передать фокус ввода следующему компоненту btnExit.SetFocus;

end;

Последняя строка btnExit.SetFocus в обработчике события необходима для передачи фокуса ввода следующему компоненту, кнопке «Выход».

Обратите внимание, что обход компонентов с помощью клавиши <Tab> может происходить в неправильном порядке. Для изменения порядка обхода компонентов вызовите из контекстного меню диалоговое окно «Edit Tab Order» (рисунок 4).

Рисунок 4 – Вызов диалогового окна "Edit Tab Order"

В диалоговом окне «Edit Tab Order» с помощью кнопок и установите требуемый порядок обхода компонентов (рисунок 5).

Рисунок 5 – Диалоговое окно "Edit Tab Order"

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Установите порядок обхода компонентов с помощью клавиши <Tab> как показано на рисунке 5, если это необходимо.

Кроме указанной процедуры обработки события нажатия на клавишу «Вычислить» необходимо также создать обработчики событий для фильтрации ввода чисел в компоненты TEdit, а также не которые другие. Полный листинг программы приведен ниже.

Листинг 2

unit UTovar;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TfrmTovar = class(TForm) edtCount: TEdit; edtPrice: TEdit; btnCalc: TButton; chbPermanent: TCheckBox; chbAction: TCheckBox; btnExit: TButton; lbResult: TLabel;

procedure btnCalcClick(Sender: TObject);

procedure edtCountKeyPress(Sender: TObject; var Key: Char); procedure btnExitClick(Sender: TObject);

procedure chbPermanentKeyPress(Sender: TObject;

var Key: Char); procedure chbActionKeyPress(Sender: TObject; var Key: Char); procedure FormCreate(Sender: TObject);

private

{Private declarations } public

{Public declarations } end;

var

frmTovar: TfrmTovar;

implementation

{$R *.dfm}

//нажатие кнопки "Вычислить"

procedure TfrmTovar.btnCalcClick(Sender: TObject); var Price, //цена единицы товара

Count, //количество товара

Summa, //cумма Discount:real; //размер скидки

begin

Discount:=1.0;//нет скидок

{получение данных из строк ввода} Price:=StrToFloat(edtPrice.Text); Count:=StrToFloat(edtCount.Text);

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

//вычисление скидки //скидка как постоянному покупателю 30%

if chbPermanent.Checked then Discount:=Discount*0.7; //скидка при распродаже 10%

if chbAction.Checked then Discount:=Discount*0.9;

//вычисление суммы покупки

Summa:=Price*Count*Discount;

//вывод результата lbResult.Caption:='Сумма покупки '

+ FloatToStrF(Summa, ffFixed, 6, 2)+ ' руб.';

//передать фокус ввода следующему компоненту btnExit.SetFocus;

end;

procedure TfrmTovar.edtCountKeyPress(Sender: TObject; var Key: Char);

begin

case Key of '0'..'9',#8:;

'.', ',': if pos(DecimalSeparator, (Sender as TEdit).Text)<>0 then Key:=#0

else Key:=DecimalSeparator; #13://передать фокус ввода следующему компоненту begin

if Sender=edtCount then edtPrice.SetFocus;

if Sender=edtPrice then chbPermanent.SetFocus; end;

else Key:=#0;

end;{case} end;

//нажатие кнопки "Выход"

procedure TfrmTovar.btnExitClick(Sender: TObject); begin

Close;

end;

//нажатие "Enter" для переключателя "Постоянный покупатель" procedure TfrmTovar.chbPermanentKeyPress(Sender: TObject; var Key: Char);

begin

//если нажата клавиша Enter, то передаем фокус ввода следующему компоненту

if Key=#13 then chbAction.SetFocus; end;

//нажатие "Enter" для переключателя "Распродажа"

procedure TfrmTovar.chbActionKeyPress(Sender: TObject; var Key: Char);

begin

//если нажата клавиша Enter, то передаем фокус ввода следующему компоненту

if Key=#13 then btnCalc.SetFocus; end;