Материал: Лабораторная работа №16 Стандартные компоненты

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

//вычисление скидки //скидка как постоянному покупателю 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;

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

{это событие происходит при создании формы, до того как форма будет показана}

procedure TfrmTovar.FormCreate(Sender: TObject); begin

//инициализация строк ввода при создании окна edtCount.Text:='0';

edtPrice.Text:='0';

lbResult.Caption:='';

end;

end.

Компонент TRadioButton

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

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

B отличие от компонента TCheckBox, компоненты TRadioButton представляют собой переключатели, предназначенные для выбора одного из нескольких взаимоисключающих решений. Такие переключатели называются зависимыми.

На форму (точнее, в компонент-контейнер) помещается по меньшей мере два таких компонента. Они могут иметь только два состояния, определяемых свойством Checked. Если в одном компоненте это свойство принимает значение True, во всех других компонентах, расположенных в том же контейнере, свойства Сhecked принимают значения False. В качестве контейнера можно использовать любой компонент потомок TWinControl. Обычно в качестве компонентов-контейнеров используют такие компоненты как TForm, TPanel, TGroupBox. В качестве компонента-контейнера можно использовать даже компонент TButton.

Помимо свойства Checked, компонент TRadioButton имеет еще одно специфичное свойство – Alignment, аналогичное такому же свойству компонента TCheckBox. Как и в случае с флажком, можно изменять размеры и цвет текста, указанного в свойстве Сaption, но нельзя изменять размеры и цвет самого переключателя.

В качестве примера рассмотрим программу из предыдущего примера. Тип скидки будем выбирать с помощью группы зависимых переключателей. Таким образом, покупатель может получить скидку или как постоянный покупатель или скидку на распродаже.

Удалите компоненты chbPermanent и chbAction с формы и добавьте на форму два компонента TRadioButton.

Разместите компоненты на форме как показано на рисунке 7.

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

Рисунок 7 – Вид формы после добавления компонентов

Установите свойства компонентов согласно таблице 3.

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

Свойство

Caption

Checked

 

 

 

rbPermament

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

True

rbAction

Распродажа

False

 

 

 

Исправьте порядок обхода компонентов клавишей <Tab> как было показано выше. Листинг программы приведен ниже.

Листинг 3

unit UTovar;

interface

uses

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

type

TfrmTovar = class(TForm) edtCount: TEdit; edtPrice: TEdit; btnCalc: TButton;

rbPermanent: TRadioButton; rbAction: TRadioButton; btnExit: TButton; lbResult: TLabel;

procedure btnCalcClick(Sender: TObject);

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

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 rbPermanent.Checked then Discount:=Discount*0.7; //скидка при распродаже 10%

if rbAction.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 btnCalc.SetFocus;

end; else

Key:=#0; end;{case}

end;

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

procedure TfrmTovar.btnExitClick(Sender: TObject); begin

Close;

end;

{это событие происходит при создании формы,

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

до того как форма будет показана}

procedure TfrmTovar.FormCreate(Sender: TObject); begin

//инициализация строк ввода при создании окна edtCount.Text:='0';

edtPrice.Text:='0';

lbResult.Caption:='';

end;

end.

Если необходимо создать несколько независимых групп переключателей, то нужно разместить каждую группу зависимых переключателей на отдельном компонентеконтейнере. В качестве таких компонентов обычно используется либо компонент

TGroupBox либо TPanel.

Компонент TGroupBox

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

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

Этот компонент служит контейнером для размещения дочерних компонентов и представляет собой прямоугольную рамку и текст в разрыве рамки. Обычно с его помощью выделяется группа управляющих элементов, объединенных по функциональному назначению. Свойства и методы этого класса целиком унаследованы им от TWinControl и описаны в предыдущей лабораторной работе.

Модифицируем программу из листинга 2. Добавьте на форму компонент TGroupBox. Измените свойство Name на gbDiscount, а свойство Caption на «Скидки».

Перетащите компоненты TRadioButton (rbPermanent, rbAction) на компонент TGroupBox (gbDiscount) в окне Object TreeView (рисунок 9) удерживая левую клавишу мыши.