Знакомство с компонентами RadioGroup и CheckBox обработка строк типа String в среде Delphi

СОДЕРЖАНИЕ: Лабораторная работа На тему: «Знакомство с компонентами RadioGroup и CheckBox, обработка строк типа String в среде Delphi» Задание 1. (Калькулятор). Создайте приложение, обеспечивающее ввод двух целых чисел и выполнение над ними арифметических операций сложения, умножения и вещественного деления.

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

На тему: «Знакомство с компонентами RadioGroup и CheckBox, обработка строк типа String в среде Delphi»


Задание 1. (Калькулятор). Создайте приложение, обеспечивающее ввод двух целых чисел и выполнение над ними арифметических операций сложения, умножения и вещественного деления. Для выбора операций используйте переключатели, вывод сообщения об ошибке при вводе делителя, равного нулю, выполните в отдельном окне сообщений.

Решение:

1. Сохраните проект в отдельной папке «Калькулятор». Проект назовите Calculator, а файл модуля – mainCalc.pas.

2. Задайте для свойства Form1. Caption значение «Калькулятор». Разместите на форме компоненты (см. рис. 3.1) Edit1,2,3 и Label1,2,3. Задайте свойства Caption для компонентов Label – «операнд1», «операнд2», «Результат». Удалите текст Edit1,2,3 в соответствующих компонентах (используйте свойство Text). Разместите на форме компонент Button1. Кнопку назовите «Вычислить».

3. Разместите на форме компонент RadioGroup 1 из палитры Standard. Задайте для свойства Caption значение «Операция». Затем выберите свойство Items (это свойство задает количество переключателей в группе и надписи около них). В окне String List Editor введите список элементов – символов арифметических операций в столбик: +, -, *, /. Щелкните мышкой по кнопке ОК, завершите формирование списка арифметических операций.

4. В окне Инспектора объектов задайте для свойства RadioGroup . ItemIndex значение 0, чтобы сделать первую кнопку (сложение) выбранной по умолчанию. Задайте размер символов этого компонента, установив значение 14 пунктов.

Примечание: определить во время выполнения, какая кнопка выбрана в данный момент, можно по индексу ItemIndex (0 означает первую кнопку, -1 – ни одна кнопка не выбрана).

Форма будет иметь следующий вид:


Рис. 3.1 Пример формы приложения «Калькулятор»

1. Создайте код обработки события щелчка на кнопке с надписью «Вычислить». Для решения задачи вычисления арифметических операций введите в текст процедуры TForm1. Button1Click следующее описание:

Var a, b: integer; c: real;

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

В основном теле процедуры обработки события введите текст остальных операторов следующим образом:

Begin

A:=StrToInt (Edit1. Text);

B:=StrToInt (Edit2. Text);

Edit3. Text :=’ ‘; {очистить от результата предыдущих вычислений}

Case RadioGroup1. ItemIndex of

0: c:= a + b;

1: c:= a – b;

2: c:= a * b;

3: if b=0 then ShowMessage (‘ На ноль делить нельзя !’)

Else c:= a / b;

End;

If RadioGroup. ItemIndex 3 then Edit3. Text:= FloatToStrF (c, ffGeneral, 10, 4)

Else if b 0 then Edit3. Text:= FloatToStrF (c, ffGeneral, 10, 4);

End;

6. Сохраните и запустите приложение на выполнение.

7*. Самостоятельно исправьте код программы модуля, используя другой вариант оператора Case (составной оператор) и сохраните проект Calculator 2, а модуль – mainCalc 2.

Задание 2. Отредактируйте текст модуля приложения Calculator таким образом, чтобы перед выполнением вычислений выполнялась проверка: а) заданы ли значения операндов, если значения операндов не заданы, то следует вывести сообщения об этом в отдельном окне; б) запретить ввод любых символов, кроме цифр от 0 до 9 и знаков «–», «+».

Решение (а):

Поместите перед оператором присваивания A:=StrToInt (Edit1. Text); строку:

If (Edit1. Text ‘’) and (Edit2. Text ‘’) then begin

которая проверяет значения свойств Edit1.textи Edit2.text. Если эти значения не пусты, то выполняется вычисление арифметической операции, в противном случае управление передается на следующий фрагмент программы, который нужно вставить перед последним оператором end;

Else ShowMessage (‘Не заданы значения’);

Решение (б): Для реализации второй части задания необходимо создать обработчики событий OnKeyPress для компонентов Edit1, Edit2.

Примечание: параметр Key в обработчике этого события соответствует символу нажатой клавиши. При этом различаются символы в верхнем и нижнем регистрах и символы кириллицы латиницы. Клавиши, не имеющие соответствующих им кодов ASCII (Shift, Alt, Ctrl и функциональные клавиши), не вызывают этого события. Поэтому нажатие таких комбинаций клавиш, как, например, Shift+A, генерирует только одно событие OnKeyPress , при котором параметр Key равен «А». Для того чтобы распознавать подобные комбинации клавиш, следует использовать обработчики событий OnKeyDown, OnKeyUp.

1. Выделите на форме объект Edit1 и выберите в окне Инспектора объектов на странице Events (События) событие OnKeyPress . Дважды щелкните левой кнопкой мыши на пустом поле списка этого события. После этого курсор переместиться в окно Редактора кода и в разделе interface появится запись процедуры обработчика события:

Procedure Edit1KeyPress (Sender: TObject; var Key: Char);

2. Вставьте в тело процедуры следующий оператор:

If not (Key in [‘0’.’9’, ‘+’, ‘– ‘]) then Key:= #0;

Действие оператора сводится к сравнению значения переменной Keyс множеством значений от 0 до 9 и символов «+» и «–». Если символ нажатой клавиши не входит во множество, то Key присваивается значение нулевого символа (#0). Таким образом, в окне Edit1 будет отображаться текст, состоящий из цифр и знаков «+, -».

3. Аналогичным образом создайте процедуру обработки события компонента Edit2.

4. Сохраните приложение и запустите его на выполнение. Проверьте результат работы программы.

Текст модуля приложения имеет следующий вид:

unit mainCalc;

interface

uses

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

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Edit3: TEdit;

Label3: TLabel;

RadioGroup1: TRadioGroup;

procedure Button1Click (Sender: TObject);

procedure Edit1KeyPress (Sender: TObject; var Key: Char);

procedure Edit2KeyPress (Sender: TObject; var Key: Char);

private {Private declarations}

public {Public declarations}

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1. Button1Click (Sender: TObject);

var a, b: integer; c: real;

begin

if (Edit1. Text) and (Edit2. Text) then begin

a:=StrToInt (Edit1. Text);

b:=StrToInt (Edit2. Text);

Edit3. Text:=;

case RadioGroup1. ItemIndex of

0: c:=a+b;

1: c:=a-b;

2: c:=a*b;

3: if b=0 then ShowMessage (Нанольделитьнельзя) else c:=a/b;

end;

if RadioGroup1. ItemIndex 3 then

Edit3. Text:=FloatToStrF (c, ffGeneral, 10,4) else if b0 then

Edit3. Text:=FloatToStrF (c, ffGeneral, 10,4); end

elseShowMessage (Не заданы значения);

end;

procedure TForm1. Edit1KeyPress (Sender: TObject; var Key: Char);

begin

if not (Key in [0..9, +, -]) then Key:=#0;

end;

procedure TForm1. Edit2KeyPress (Sender: TObject; var Key: Char);

begin

if not (Key in [0..9, +, -]) then Key:=#0;

end; end.

Задание 3. Создайте приложение, предлагающее пользователю ввести строку, определяющее количество символов в ней и выводящее результат, согласуя окончание слова «символов» с числом символов.

Решение:

1. Создайте папку «Количество символов» и сохраните в ней проект «simvol».

2. Разместите на форме компоненты: Edit1, Label1,2, Button1, как показано на рис. 3.2. Задайте значения свойств Label1. Caption – «Введите текст», Label2. Caption – «В тексте», Button1. Caption – «Вычислить». Удалите текст Edit1 из соответствующего компонента.


Рис. 3.2 Пример формы проекта «Количество символов»

3. Для вычисления количества символов во введенной строке и вывода результата создайте процедуру обработчика события щелчка мышью на кнопке «Вычислить».

4. Введите в текст процедуры следующее описание переменных:

Var

N: integer;

S: string;

5. Введите текст тела процедуры обработки события:

Begin

N := Length ( Edit 1. Text ); {определить число символов}

Label 2. Caption := ‘В тексте’;

If N 20 then N := N mod 10; {выделить последнюю цифру}

Case N of

1: S:= ‘ символ ’;

2..4: S := ‘символа’;

0, 5..20: S := ‘символов’;

End ;

Label2. Caption:= Label2. Caption + IntToStr (Length(Edit1. Text )) + S ;

End ;

Примечание: функция Length – это функция обработки String переменных, определяет количество символов вводимой строки (см. раздел 1).

6. Сохраните проект и запустите программу на выполнение. Просмотрите результат программы, задавая текст с разным количеством символов и проверяя правильность вывода результатов работы.

Задание 4. Создайте приложение, которое предлагает ввести текст, а затем заменить символы «а» на «б» в тексте и подсчитать количество замен.

Решение:

1. Создайте папку «Замена символов» и сохраните в ней проект под названием «zamena», файл модуля сохраните как zmain.pas.

2. Форму приложения назовите «Подсчет и замена символов». На форме расположите три компонента Edit, три компонента Label, один компонент Button и два компонента CheckBox , как показано на рис. 3.3.

3. Задайте значения свойств: Label1. Caption – «Исходный текст на русском языке», Label2. Caption – «Измененный текст», Label3. Caption – «Число замен», Button1. Caption – «Выполнить», CheckBox1. Caption – «Подсчитать число замен», CheckBox2. Caption – «Заменить «а» на «б»». Удалите текст Edit1,2,3 из соответствующих компонентов.

Рис. 3.3 Пример формы проекта «Замена символов»

4. Для замены и подсчета символов запишите процедуру обработки события OnClick для кнопки «Выполнить». Введите следующее описание переменных:

Var

S : string ;

N : byte ;

Примечание: для поиска символа в строке используйте функцию Pos . Для программирования варианта замены символов используйте значение свойства Checked компонента CheckBox.

5. Тело процедуры может быть записано следующим образом:

Begin

N:= 0;

Edit3. Text:= ‘’;

Edit2. Text:= ‘’;

S:= Edit1. Text;

If CheckBox2. Checked then {есливключенфлажок}

While Pos (‘ a ’, S ) 0 do {если в строке найдена буква «а»}

Begin

N := N + 1;

S [ Pos (‘ a ’, S )]:= ‘б’; {заменить букву «а» на букву «б»}

End;

If CheckBox1. Checked then Edit3. Text:= IntToStr(N);

{выводчислазамен}

Edit 2. Text := S ; {вывод измененного текста}

End ;

6. Сохраните проект и запустите на выполнение.

Скачать архив с текстом документа