Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
//вычисление скидки //скидка как постоянному покупателю 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
находится на вкладке 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
находится на вкладке Standart палитры компонентов (рисунок 8).
Рисунок 8 – Расположение компонента TRadioButton в палитре компонентов
Этот компонент служит контейнером для размещения дочерних компонентов и представляет собой прямоугольную рамку и текст в разрыве рамки. Обычно с его помощью выделяется группа управляющих элементов, объединенных по функциональному назначению. Свойства и методы этого класса целиком унаследованы им от TWinControl и описаны в предыдущей лабораторной работе.
Модифицируем программу из листинга 2. Добавьте на форму компонент TGroupBox. Измените свойство Name на gbDiscount, а свойство Caption на «Скидки».
Перетащите компоненты TRadioButton (rbPermanent, rbAction) на компонент TGroupBox (gbDiscount) в окне Object TreeView (рисунок 9) удерживая левую клавишу мыши.