Практическая работа № 1

Компоненты Delphi

Цель: познакомиться с основными событиями, методами и свойствами стандартных компонентов Delphi ; приобрести навыки написания обработчиков событий для компонентов.

ЗАДАНИЕ И ВЫПОЛНЕНИЕ РАБОТЫ:

    Запустите среду программирования Delphi.

    Расположите на форме компоненты, приведённые на рисунке.

2.1 Панель Panel (вкладка Standard ).

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

компоненты вдоль одной из сторон окна независимо от изменения размеров этого окна. Компонент имеет развитые средства создания различных эффектов трёхмерности за счёт использующихся в нём двух кромок - внешней и внутренней (свойства BevelOuter и Bevellnner).

      Объект Shape (вкладка Additional).

С помощью компонента Shape возможно нарисовать одну из простейших геометрических фигур: stRectangle - прямоугольник; stSquare - квадрат;

stRoundRect - скруглённый прямоугольник; stRoundScuare - скруглённый квадрат; stEllipse - эллипс; stCircle - круг. Вид геометрической фигуры определяется свойством Shape. Цвет объекта задаётся свойством Brush.Color.

      Две кнопки Button (вкладка Standard).

Кнопки TButton широко используются для управления программами. Для этого, как правило, используется обработчик события onClick данного компонента.

      Таймер Timer (вкладка System).

      наступления события onlimer. Таймер включается при установке значения Тrue в его свойство Enabled. Раз включённый таймер всё время будет генерировать события onTimer, пока его свойство Enabled не примет значение False.

      Комбинированный список ComboBox (вкладка Standard ).

      Существуют 5 модификаций компонента, определяемые его свойством Style: csSimple, csDropDown, csDropDownList, csOwnerDrawFixed и csOwnerDrawVariable. В первом случае список всегда раскрыт, в остальных он раскрывается после нажатия кнопки справа от редактора. В модификации csDropDownList редактор работает в режиме отображения выбора и его нельзя использовать для ввода новой строки (в других модификациях это возможно). Свойство DropDownCount определяет количество элементов списка, появление которых ещё не приводит к необходимости прокрутки списка. Свойство DroppedDown определяет, раскрыт ли в данный момент список, что позволяет программно управлять состоянием списка. Событие onDropDown происходит при изменении состояния списка.

      Редактор Edit (вкладка Standard).

      Контейнер для размещения зависимых переключателей RadioGroup (вкладка Standard ).

    переключателей. Свойство Itemlndex содержит индекс выбранного переключателя. Индекс первого элемента: 0.

    1. Три метки Label (вкладка Standard ).

    Создаваемый вами проект должен реализовывать следующие функции:

    1. Автоматическое перемещение объекта Shape в границах объекта-контейнера Panel с отражением от его сторон.

      Выбор формы объекта Shape из списка компонента ComboBox.

      Указание скорости перемещения объекта Shape в компоненте Edit

      Выбор цвета компонента Shape с помощью компонента RadioGroup.

      Отображение текущих координат объекта Shape с помощью двух меток Label.

    Задание начальных свойств для компонента Shape :

    1. Установите для компонента Shape ширину=45 и высоту=35.

    ComboBox :

    1. Установите необходимые надписи на форме, кнопках, панели и метках. (С помощью первой кнопки движение объекта Shape будет начинаться, а с помощью второй - прекращаться).

      С помощью свойства Items компонента ComboBox определите перечень форм (но русском языке!), которые может принимать объект Shape. (Последовательность форм на английском языке: stRectangle, stSquare, stRoundRect, stRoundSquare, stEllipse, stCircle).

      Выберите подходящее событие для компонента ComboBox и напишите его обработчик, с помощью которого будет меняться форма объекта Shape. Это можно сделать как минимум двумя способам:

      1. Первый способ: Для этого достаточно выполнить следующее присвоение:

    Shapel.Shape:=TShapeType(HOMep выбранного элемента),

    где TShapeType - уже существующий в Delphi массив, следующего вида:

    TShapeType = (stRectangle, stSquare, stRoundRect, stRoundSquare, stEllipse, stCircle);

        Второй способ : Использовать оператор выбора CASE для проверки того, какая

    строка из ComboBox была выбрана, и в зависимости от этого устанавливать свойство Shape компонента Shape, например:

  1. Case ComboBoxl.Itemlndex of

    1: Shape1. Shape:= stRectangle; {it m.d.)

      Запустите проект на выполнение и проверьте, меняется ли форма объекта Shape при выборе соответствующей строки из ComboBox. Если да, то можете переходить к следующему шагу.

    Задание начальных свойств и обработчиков для компонента RadioGroup :

    1. Задайте подходящий заголовок для компонента.

      Определите, с помощью свойства Items укажите цвета, который сможет принимать объект Shape.

      Задайте количество столбцов для расположения списка.

      Напишите обработчик события onClick для компонента RadioGroup, в котором бы изменялся цвет объекта Shape на тот, который выбрал пользователь (см. описание объекта Shape- и RadioGroup для того чтобы определить какими свойствами компонента необходимо воспользоваться). При написании обработчика рекомендуется использовать оператор выбора CASE.

      Запустите проект на выполнение и проверьте, меняется ли цвет объекта Shape при выборе соответствующей строки из RadioGroup. Если да, то можете переходить к следующему шагу.

    Задание начальных свойств и обработчиков для компонента Timer :

    1. Установите свойство Enabled в состояние False, а свойство Interval = 10.

      Перейдите в окно инспектора кода, найдите вверху текста строку:

  1. Добавьте после этой строки описание двух переменных DX и DY типа integer. Это будут глобальные переменные, хранящие шаг, с которым объект Shape будет перемещаться внутри контейнера Panel.

      Внесите в обработчик события компонента Timer следующий код:

    with Shapel do begin

    if (Leftor (Left+Width=Panell. Width) then dx:=-dx;

  1. if (Topor (Top+Height=Panell.Height) then dy:=-dy;

  2. end :

    Самостоятельно разберитесь в назначении этих команд.

    Задание начальных свойств н обработчиков для формы Form :

    1. Задайте для формы подходящие размеры.

      При создании формы, глобальным переменным DX и DY должны присваиваться начальные значения, равные 5. Создайте необходимый обработчик события, реализующий эти действия.

    Задание начальных свойств и обработчиков для кнопок Button :

    1. Введите необходимые надписи и тип шрифта для кнопок.

      При щелчке по первой кнопке компонент Timer должен активизироваться, при щелчке на второй - деактивироваться. Создайте соответствующие обработчики событий для кнопок, (см. описание компонента Timer).

      Запустите проект на выполнение и попробуйте запустить и остановить движение объекта Shape с помощью кнопок. Если это удалось, то можете переходить к следующему шагу.

    Задание начальных свойств и обработчиков для компонента Edit :

    1. Удалите текст из компонента, чтобы при запуске программы строка с именем объекта не отображалась на экране.

      Создайте обработчик события onKeyPress для этого компонента. В обработчике должны выполняться следующие действия: если нажата клавиша Enter (код клавиши: #13), то присвоить переменным DX и DY значение, введённое пользователем в компонент Edit. (Рекомендуется вводить значения в диапазоне от 1 до 20).

      Запустите проект на выполнение и попробуйте изменить скорость перемещения объекта Shape с помощью значений, вводимых в поле компонента Edit. Если это удалось, то можете переходить к следующему шагу.

    Отображение координат объекта Shape с помощью меток Label :

    1. В обработчик события onTimer компонента Timer добавьте код, позволяющий отображать текущие координаты объекта Shape.

      Запустите проект на выполнение и попробуйте выполнить все реализованные вами функции.

    Дополнительное задание:

    1. Объект Shape должен автоматически менять цвет при «ударе» о границу панели.

      0бъект Shape пропадает и появляется на экране по желанию пользователя.

      В контейнере перемещаются 2 объекта Shape.

  1. Контрольные вопросы:

    Расскажите о компонентах Delphi, использованных вами при выполнении данной практической работы.

    В чём отличие визуальных от невизуальных компонентов? Использовались ли невизуальные компоненты при выполнении данной практической работы (если да, то какие)?

    Как определить, какую строку по счёту выбрал пользователь из компонента ComboBox? А как определить содержимое этой строки?

    Каким компонентом нужно воспользоваться, чтобы каждые 5 секунд выдавать на экран какое- либо сообщение? Какое событие этого компонента необходимо использовать и что нужно написать в обработчике?

    В чём отличие локальных переменных от глобальных?

    Что нужно сделать, чтобы строки в компоненте RadioGroup отображались на экране в 3 столбика?

    С помощью какого свойство можно программно изменить цвет компонента TShape? Какие значения можно передавать этому свойству?

    Расскажите, по какому принципу осуществляется перемещение объекта TShape по экрану?

    Какое свойство компонента ComboBox и как нужно изменить, чтобы запретить пользователю вводить свои варианты?

    Для чего используются следующие свойства компонентов: Enabled, Visible?

Практическая работа 1. Элементы интерфейса Delphi .

Общие положения

Delphi - интегрированная среда разработки.

Delphi дает возможность создавать программы в стиле визуального конструирования формы, разместив на ней какие-либо визуальные элементы.

В Delphi имеются 10 окон, но после загрузки появляются четыре окна (рис.1):

    главное окно Delphi * - имя проекта;

    окно формы для проектирования приложения Form 1

    окно инспектора объектов Object Inspector;

    окно редактора кода Unit 1. pas .








В главном окне реализуются основные функции управления проектом создаваемой программы.

Это окно содержит: строку заголовка; строку меню; панель инструментов; палитру компонентов.

Строка заголовка главного окна отображает имя открытого в данный момент проекта.

По заголовку главного окна можно определить, в каком режиме открыт проект:

Текст заголовка

Режим работы

Delphi*-Project1

Редактирование

Delphi* - Project1

выполнение

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

Панель инструментов предназначена для выполнения некоторых команд, реализуемых главным меню. На этой панели есть, в частности, кнопка сохранения проекта на диске, кнопка открытия проекта, кнопка запуска программы на выполнение.

Палитра компонентов устроена в виде наборов пиктограмм. Совокупность наборов составляет библиотеку визуальных компонентов (Visual Component Library - VCL ). Имеется несколько категорий компонентов, каждая из которых расположена на своей вкладке. С помощью палитры компонентов мы будем создавать объекты на форме.

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

Окно инспектора объектов отображает свойства активизированного щелчком мышью какого-либо компонента или самой формы. Имя активизированного компонента находится под заголовком окна.

Это окно имеет две вкладки - Properties (Свойства) и Events (События).

Свойство определяет атрибут компонента, например размер кнопки или шрифт метки.

Событие означает, например, такие действия, как щелчок мышью на кнопке или закрытие окна.

По ходу работы система формирует в окне редактора кода текст программы на языке Паскаль, связанной с формой. После загрузки Delphi это окно спрятано за окном формы, иего можно увидеть, щелкнув на кнопке Toggle Form / Unit на панели инструментов.

Пользователь может дополнять текст программы самостоятельно или по предложению системы в момент размещения объектов на форме.

Создание и сохранение проекта и файла модуля

Каждый пункт меню содержит набор команд. Рассмотрим некоторые команды меню File .

Команда New открывает окно New Items , при помощи которого можно создать новую форму, шаблон проекта или формы, которые затем могут быть использованы.

Команда New Form открывает окно новой формы и соответствующего ей модуля и добавляет их к активному проекту.

Команда New Application создает новый проект, состоящий из файла проекта project 1. dpr , файла модуля unit 1. pas и файла формы unit 1. dfm . При этом IDE отображает окно проектировщика формы и редактора кода. Окно проектировщика формы является активным. После этого рекомендуется сохранить новый проект, присвоив ему имя.

Команда Save Project As позволяет сохранить проект под другим именем и в случае необходимости в другом каталоге. После выбора этой команды появляется диалоговое окно для сохранения файла кода программы. По умолчанию файлу дается расширение pas , указанное в окне Тип файла. Далее следует ввести имя файла и щелкнуть на кнопке Ok . Появится следующее диалоговое окно для сохранения файла проекта (расширение dpr - Delphi Project ). Надо ввести имя проекта и щелкнуть на кнопке Ok .

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

Задание.

    Создайте новый проект. Для этого выполните команду File , New Application .

    Выполните "пустую" программу - щелкните мышью на кпопке Run . На экране исчезнут все вспомогательные окна, у формы пропадет координатная сетка.

    Для возвращения в среду Delphi нажмите Alt + F 4.

    Сохраните прект. Для этого выполните команду File , Save Project As , предварительно создав паку, в которую вы будете записывать свои проекты.

Примечание. Особое внимание обратите на п.4: самая распространенная ошибка - выполнение команды File , Save вместо File , Save Project As .

    Закройте Delphi .

    Загрузите Delphi .

    Загрузите свой проект, выполнив команду File , Open Project и указав правильно имя (см.п.4).

    Повторите п.2 и п.3.

Практическая работа 2. Разработка первого проекта.

Постановка задачи

После запуска программы по щелчку мышью на кнопке "Приветствие" появляется сообщение "Первые успехи!". Для выхода из программы необходимо щелкнуть мышью на кнопке "Выход".

Пояснение. Новым в этой работе является использование компонентов Label и Button палитры компонентов Standard и обработка события OnClick - нажатия кнопки.

План разработки программы

    Открыть новый проект.

    Label и две кнопки Button .

    Выделить кнопку Button 2 , перейти в Object Inspertor на вкладку Properties , найти Caption (заголовок) и изменить заголовок Button 2 на заголовок "Выход".

    Перейти на вкладку Events окна Object Inspector , найти событие OnClick , справа от него дважды щелкнуть мышью. Ввести лишь одну команду: Close ; (Обязательно поставить точку с запятой в конце команды).

    Сохранить код программы и проект под именами pr 1. pas и pr 2. dpr .

    Выделить форму, в свойстве Caption окна Object Inspertor заменить имя формы Form 1 на "Проект -1". Это будет заголовком основного окна программы.

    Выделить кнопку Button 1 в свойстве Caption окна Object Inspertor заменить имя кнопки Button 1 на "Приветствие". При необходимости увеличить длина кнопки.

    Перейти на вкладку Events окна Object Inspertor и найти событие OnClick , справа от него дважды щелкнуть мышью. Ввести следующий код:

Label 1. Caption :="Первые успехи!";

Краткое описание плана разработки программы

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

    Открыть новый проект.

    Разместить на форме экземпляры компонентов: метку Label и две кнопки Button .

    Object Inspertor

    Имя свойства/

    имя события

    Действие

    Button2

    Properties

    Caption

    Установка имени кнопки "Выход"

    Events

    OnClick

    Close

    Сохранить код программы и проект под именем pr 1. pas и pr 2. dpr .

    Запустить программу, затем закрыть окно проекта, щелкнув на кнопке "Выход".

    Выполнить следующие действия:

  1. Выделенный объект

    Вкладка окна

    Object Inspertor

    Имя свойства/

    имя события

    Действие

    Form1

    Properties

    Caption

    Установка имени формы: "Проект-1"

    Button1

    Properties

    Caption

    Установка имени кнопки: "Приветствие"

    Events

    OnClick

    Label 1. Caption :="Первые успехи!";

Задание для самостоятельного выполнения

    Сделать шрифт выводимой реплики "Первые успехи" отличным от стандартного по виду, цвету и размеру. (Подсказка. В Object Inspertor дважды щелкнуть справа от названия свойства Font )

    Заменить вид кнопки выход на более привлекательный. (Подсказка. Для замены кнопки надо удалить существующую, а другую найти в палитре компонентов на вкладке Additional . Она называется BitBtn . Затем изменить ее вид с помощью свойства Kind .)

    Сделать так, чтобы после нажатия кнопки "Приветствие" на экране появлялось сообщение "Первые и не последние!". (Подсказка. Изменить значение свойства Caption метки Label 1 при реакции кнопки Button 1 на событие OnClick .

    Сделать файл pr 1. exe . (Подсказка. В меню опция Project/ Compile Project1)

    Выйти из среды Delphi и запустить исполняемый файл в Windows .

Практическая работа. Разработка проекта "Диалог"

Программа предлагает решить задачи

Постановка задачи

Составить программу, выполняющую следующие действия.

После запуска программы пользователь вводит свое имя, например Иван, в Edit (прямоугольник с мигающим курсором) и нажимает клавишу Enter . Появляется вопрос: "Иван, ты любишь решать задачки?". Если пользователь щелкает на кнопке "Да", то появляется реплика "Молодец", если "Нет" - реплика: "Почему же? Это интересно. Давай, порешаем!". Для продолжения диалога необходимо щелкнуть на кнопке «Давай!!!»

Пояснение. Новым в этой работе является использование строки ввода Edit (вкладка палитры компонентов Standard ) и обработки события OnKeyPress - нажатия клавиши.

План разработки программы

    Открыть новый проект. Дать форме название "Диалог".

    Разместить на форме экземпляры компонентов в соответствии с рис.3

    Добавить Form 2: File -> New Form

    Выполнить следующие действия:

    Edit1

    Events

    OnKeyPress

    If key=#13 then begin

    Label2.Caption:=Edit1.Text+" , тылюбишьрешать задачки?";

    End;

    Button1

    Properties

    Caption

    Установка имени кнопки: "да"

    Events

    OnClick

    Label3.caption:="Молодец!";

    Button2

    Properties

    Caption

    Установка имени кнопки "Нет"

    Events

    OnClick

    Label 3.caption :="Почему же? Это интересно.";

    Button3

    Properties

    Caption

    Установка имени кнопки "Давай!!!"

    OnClick

    Form2.Show;

  1. Запустить программу, затем открыть окно второй формы, щелкнув на кнопке "Давай!!!". Система предложит включить в список подключаемых модулей новый модуль Unit 2. Yes .

Дополнительное задание

    Сделать кнопки "Да" и "Нет" доступными только после ввода имени и нажатия клавиши Enter . Подсказка. Значение свойства Enabled кнопок "Да" и "Нет" установить равным False , а в процедуру Edit 1KeyPress включить код

Button1.Enabled:=true;

Button2.Enabled:=true;

    Удалить имена объектов Edit 1, Label 2, Label 3 для обеспечения возможности повторить диалог. Подсказка. Разместить на форме еще одну кнопку BitBtn . Установить значение bkRetry свойства Kind и значение "Повторить" свойства Caption . Ввести программно по нажатию кнопки "Повторить" пустые строки вместо надписей и имен кнопок:

Label2.Caption:=" ";

Label3.Caption:=" ";

Edit1.Text:=" ";

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

Form1.ActiveControl:=Edit1

    На второй форме написать заголовок, задачу, предложение внести данные (Label ), Edit для ввода данных, Button «Ответ» и дополнительный объект Label для вывода ответа.

На щелчок по объекту Button «Ответ» запрограммировать решение задачи. Например,

procedure TForm2.Button1Click(Sender: TObject);

begin

r1:=strtoFloat(edit1.text);

r2:=strtoFloat(edit2.text);

r3:=strtoFloat(edit1.text);

r:=1/r1+1/r2+1/r3; r:=1/r;

Label5.Caption:=FloatToStr(r)+" Ом";

end;

Помни!

Все переменные нужно описать в разделе описания Var .

Практическая работа №4 Расчет оптимального веса человека

Постановка задачи. Пусть оптимальный вес человека определяется как рост минус 100 см. Если фактический вес человека меньше оптимального, то будем считать его худым, если больше, то полным.

Создать программу, выполняющую следующие действия.

Введя свой рост и фактический вес и нажав кнопку «Расчет», учащийся может определить, худой он или пол ный и на сколько надо поправиться или похудеть (рис. 12).

Пояснение. Новым в этой работе является:

    использование типов перемен ных - целочисленного и дей ствительного ( integer и real );

    преобразование строковых дан ных в числовые и числовых в строковые: с помощью функций StrToInt ; StrToFloat ; IntToStr FloatToStr ; Format ();

    обработка исключительных ситуаций с помощью оператора Try - except - end ;

    использование процедуры ShowMessage для вывода сообщения в отдель ном окне.

План разработки программы

    Открыть новый проект.

    понентов в соответствии с рис. 13. В поле Editl будем вводить вес в килограммах, а в Edit 2 - рост в сантиметрах.

    Сохранить код программы и проект под именами, например, unit 5. pas и pr 5. dpr .

    Ввести в раздел VAR переменные для сохранения значений:

    фактического веса ( faktW ), оптимального веса ( optW ),

    роста ( Rost ),

    разницы между оптимальным весом и фактическим ( Delta ). Вначале будем считать, что все данные у нас целые числа:

    var

    factW, optW, Rost, Delta: integer;

    Создать процедуру, реагирующую на щелчок на кнопке Buttonl , и за полнить ее следующим кодом:

Выделенный объект

Вкладка окна Object Inspector

Имя события

Действие

Buttonl

Events

OnClick

factW:= StrToInt (Editl. text) ;

Rost: = StrToInt (Edit2 . Text) ;

OptW:=Rost - 100;

Delta:= abs(factW - optW) ;

if optW = factW then

Label3 . caption:= " Ваш вес идеален !"

else

if optW > factW then

Label3 . caption:= " Вам надо попра -

виться на "+ IntToStr ( Delta ) +" кг."

else

Label3 . caption:= " Вам надо поху -

деть на "+ IntToStr ( Delta )+" кг."

Пояснение. Функция StrToInt преобразует строку в целое число, функция IntToStr выполняет обратное действие - целое число преобразует в строку,

Сохранить код программы и проект под именами, например, pr -5. pas и pr -5. dpr .

Усовершенствовать программу так, чтобы можно было вводить любые десятичные величины. Для этого необходимо использовать вещественный тип переменных Real :

var

factW , optW , Rost , Delta : real ;

Преобразование действительных чисел в строки и строк в действительные числа выполняется с помощью функций FloatToStr и StrToFloat . Внести со ответствующие изменения в обработку события OnClick компонента Buttonl .

8. Сохранить проект, запустить и протестировать его.

Практическая работа №5. Веселый калькулятор

Постановка задачи. Сделать простейший калькулятор по образцу, рис.1. В левой части формы находится графический объект Томагочи. Необходимо сделать так, чтобы Томагочи моргал при нажатии на кнопку «Ась?»

рис. 1

План разработки программы

    Открыть новый проект.

    Разместить на форме экземпляры ком понентов в соответствии с рис. 2.

begin

a:=strToInt(edit1.text);

b:=StrToInt(edit2.text);

c:=a+b;

Label4.Caption:=IntToStr(c);

Timer1.Enabled:=true;

end;

BitBtn3

Properties

Caption

-

Events

OnClick

Аналогично

BitBtn4

Properties

Caption

*

Events

OnClick

Аналогично

BitBtn5

Properties

Caption

/

Events

OnClick

Аналогично

Для создания графического объекта используйте Shape на панели компонентов Additional . В окне Object Inspector выберите свойство Shape и установите нужную фигуру в раскрывающемся списке. Цвет фигуры установите с помощью свойства Color . Для создания анимации нужен таймер времени. Таймер можно установить, выбрав на панели компонентов на вкладке System объект Timer .

    Выполнить следующие действия.

shape8.Height:= 20;

timer1.Enabled:=false;

end;

Button

Propertie

Caption «Ась?»

begin

shape7.Height:=45;

shape8.Height:= 45;

timer1.Enabled:=true;

end ;

Дополнительное задание.

Сделать калькулятор для вещественных чисел.

Практическая работа №6 Сказка про Ивана царевича

Постановка задачи. Составить программу выбора пути. Используйте образец.

Выполнить следующие действия.

begin

Label 1.Show ;// Видимый объект

Label 2.Hide ; //Невидимый объект

label3.hide;

label4.hide;

end;

RadioButton2

Propertie

Caption « Пойдунаправо»

Events «OnClick»

procedure TForm1.RadioButton2Click(Sender: TObject);

begin

Label2.Show;

Label1.Hide;

label3.hide;

label4.hide;

end;

Аналогично настраиваются кнопки RadioButton 3 и RadioButton 4. Добавьте в форму кнопку «Еще?», предусматривающую дополнительный вариант пути.

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

Создание графического редактора

в среде Delphi .

Постановка задачи. Создать собственный графический редактор. Редактор должен иметь строку меню (Standard / MainMenu ) и сохранять рисунки. Пользователь рисует с помощью мыши в рабочей области.

Алгоритм действия


Var r:Boolean;

T:Tcolor;

Procedure Tform1.Image1MouseDown;

Begin

Image1.Cavas.MoveTo(x,y);

R:=True;

End;

2) OnMouseMove

Begin

If r then Image1.Canvas.LineTo(x,y);

3) OnMouseUp

Begin

R:=True;

    Настроим палитру с помощью компонента ScrollBar (полоса прокрутки на вкладке Standard ) и стандартной функции RGB , позволяющей синтезировать код цвета по кодам базовых цветов: красного, зеленого и синего).

Установите событие для компонента ScrollBar 1:

procedure TForm1.ScrollBar1Change(Sender: TObject);

begin

Image1.Canvas.Pen.Color:=t;

Shape1.Brush.Color:=t;

t:=RGB(ScrollBar1.Position, ScrollBar2.Position, ScrollBar3.Position);

end;

Аналогично установите события для компонентов ScrollBar2 и ScrollBar3.

    Для отображения палитры используйте компонент Shape :

procedure TForm1.Shape1ContextPopup(Sender: TObject; MousePos: TPoint;

var Handled: Boolean);

begin

Shape1.Brush.Color;

end;

    Для очистки изображения используйте процедуру

procedure TForm1.Button3Click(Sender: TObject);

begin

Image1.Canvas.FillRect(ClientRect);

end;

    Чтобы сохранить рисунок воспользуйтесь двумя компонентами Button 1 и SaveDialog 1(на вкладке Dialog )

procedure TForm1.Button1Click(Sender: TObject);

begin

if SaveDialog1.Execute then

Image1.Picture.SaveToFile(SaveDialog1.FileName);

end;

    Отредактируйте программу и сохраните в папке Графика.

Практическая работа 7. Создание текстового редактора в среде Delphi .

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

Пояснение. Новым в этой работе является использование

Алгоритм действия

1. Открыть Delphi .

На строке меню Project/ Add New Project...

На вкладке Project окна New Item « кликните » на Application Wizard. Откроется мастер приложений. Первое окно предложит указать, какие меню нам нужны. Пометьте галочкой File menu и Edit menu, затем кликните Next . Следующее окно предложит выбрать расширения файлов, с которами будет работать Ваша программа. Кликните на Add .В поле Desction введите «Текстовый документ», а в поле Extension « txt » и на Ok , а потом Next . В следующем окне у Вас поинтересуются, какие стандартные кнопки Вы хотите добавить на панель инструментов будущего приложения. Разберитесь в интерфейсе этого окна самостоятельно. Добавьте на панель инструментов все доступные кнопки из меню File и Edit. Перед тем как добавлять кнопки из меню Edit один раз нажмите кнопку Space . Так Вы поставите между группами кнопок File и Edit разделительную черту. В следующем окне введите на английском языке название программы. С помощью кнопки Browse определите для своего проекта место на жестком диске и пометьте галочками пункты Creat a status line и Enable hints . Нажмите на Finish и Delphi создаст новый проект.

2. Переведите весь каркас на русский язык: заголовок окна программы, все пункты меню, подсказки к кнопкам (сами кнопки уже готовы).

Сперва по очереди выделяйте каждую кнопку на панели инструментов Вашего редактора, и в ОИ на первой вкладке найдите свойство Hint . Это свойство как раз олтвечает за всплывающую подсказку к кнопке. Переведите на русский язык значение этого свойства. Например, первую кнопку переведем так: «Новый документ/Нажмите эту кнопку для создания нового документа».

3. После того как Вы русифицировали кнопки, пора приниматься за пункты меню. На прямую работать с ними не получится. Дважды щелкните по кнопке Main menu , которая находится между панелью инструментов и статусной линией заготовки. На самом деле это вовсе не кнопка, а невизуальный компонент. Она символизирует меню программы. После запуска программы эта «кнопка» просто не будет видна. Откроется редактор меню. Вот тут уже можно выделять разные пункты меню, как отдельные объекты и изменять их свойства. Здесь надо перевести не только подсказки, но и сами названия пунктов меню. За названия любых объектов отвечает свойства Caption . Добавлять новые или удалять старые пункты можно через контексное меню. Обратите внимание, что перед некоторыми буквами в названиях пунктов меню стоит знак &. Это значит, что во время работы программы следующая за ним буква будет подчёркнута, а активировать этот пункт меню можно будет нажатием соответствующей кнопке на клавиатуре. Для полной русификации не хватает только одного – русского названия программы. Дайте название своему редактору.

4. Основой текстового редактора является поле, куда пользователь введет текст. На палитре Delphi есть компонент, который отвечает за подобное поле ввода, - RichEdit . Найдите этот компонент (размещается он на вкладке Win 32), кликните на него, а потом кликните на свободном месте на форме. Невзрачная кнопочка развернется в целое поле ввода. Отформатируем поле. Выделите RichEdit и в ОИ установите свойство Align в alClient . Поле ввода заняло всю свободную площадь на форме. Откройте свойство Line и удалите все содержимое поля. Запустите программу.

5. Опишем функцию сохранения и загрузки текстовых файлов. Внимательно посмотрите на свою форму. Видите невизуальные компоненты OpenDialog и SaveDialog они отвечают за стандартные окна сохранения и загрузки файлов Windows . Благодаря этому нет необходимости создавать соответствующие диалоги.

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

Begin

RichEdit1.Lines.SaveToFile(SaveDialog.FileName);

End ;

Процедура для кнопки «Открыть»:

Begin

RichEdit1.Lines.LoadFromFile(OpenDialog.FileName);

End ;

Кнопка «Новый документ»:

Begin

RichEdit1.Clear;

End ;

Кнопка «настройка печати»

Begin

RichEdit 1. Print (‘текстового редактора «Супер»’);//Отправит на печать все содержимое

End ;

Кнопка «Отмена»:

Begin

With RichEdit1 do if HandleAllocated then SendMessage(Handle, EM_UNDO,0,0);

End ;

Кнопка «Вырезать»:

Begin

RichEdit1.CutTOClipboard;

End ;

Кнопка «Копировать »:

Begin

RichEdit1.CopyTOClipboard;

End ;

Кнопка «Вставить»:

Begin

RichEdit1.PasteFrom С lipboard;

End ;

Поздравляю! Вы создали собственный текстовый редактор.

Листинг подпрограммы

procedure TForm1. RadioButton1Click (Sender: TObject);

var i: Integer;

ComboBox1.Clear;

ComboBox1.Tag:= (Sender as TRadioButton).Tag;

for i:= 0 to 5 do

ComboBox1.Items. Add (ListBox1.Items );

ComboBox1.ItemIndex:= 0;

Image1.Picture. LoadFromFile (ListBox2.Items );

procedure TForm1.FormCreate(Sender: TObject);

RadioButton1Click(RadioButton1);

procedure TForm1.ComboBox1Change (Sender: TObject);

Image1.Picture. LoadFromFile (ListBox2.Items );

Практическая работа № 17

«Вычисление процентов»

Цель работы - с оздать программу, выполняющую следующие действия:

После запуска программы в окне изображается три текстовых поля.
При нажатии кнопки «Очистить» очищаются значения полей. Далее вводятся новые значения в поля. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.

1. Открыть новый проект.

2. Разместить на форме экземпляры компонентов: командная кнопка Button , надпись Label , текстовое поле Edit .

Таблица 19.

Выделенный объект

Вкладка окна

Object Inspector

Имя свойства/

имя события

Действие

Установка имени формы «Вычисление процентов»

Введите название «Считаем проценты!»

Очистить значение свойства

Очистить значение свойства

Очистить значение свойства

Описать локальные Number, Procent, Prn


Продолжение таблицы 19.

Выделенный объект

Вкладка окна

Object Inspector

Имя свойства/

имя события

Действие

Введите название «Очистить»

Фрагмент программы

Number, Procent, Prn: Real;

procedure TForm1.Button1Click(Sender: TObject);

Number:=StrToFloat(Edit1.Text);

Procent:= StrToFloat(Edit2.Text);

PrN:=0.01*Procent*Number;

Edit3.Text:=FloatToStr(PrN);

procedure TForm1.Button2Click(Sender: TObject);

Практическая работа № 18

«Головоломка №1»

MsoTableGrid" width="657 " style="width:492.85pt;border-collapse:collapse;border:none">

Выделенный объект

Вкладка окна

Object Inspector

Имя свойства/

имя события

Действие

Установка имени формы «Головоломка»

Задайте значение bsSingle

CheckListBox1

(Вкладка Additional)

Задаем состав списка. Щелкнуть на кнопке построителя. Откроется окно String List editor (Редактор списка строк). Введите в список заданные числа через Enter. Нажмите кнопку OK.

Подобрать значение так, что все числа поместились в список (без полос прокруток).

Описать очистку списка. Проверить, установлен флажок или нет. После обновления списка необходимо подсчитать сумму выбранных чисел. Элементы списка выглядят как числа, но являются текстовыми строками (воспользоваться функцией StrToInt).


Продолжение таблицы 20.

Выделенный объект

Вкладка окна

Object Inspector

Имя свойства/

имя события

Действие

ListBox1

(Вкладка Standard)

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

(Вкладка Standard)

Введите текст: «Сумма: 0»

Задайте значение False

Задайте значение taCenter

4. Сохраните проект, запустите и протестируйте его.

Листинг подпрограммы

procedure TForm1.CheckListBox1ClickCheck (Sender: TObject);

var i, s: Integer;

for i: = 0 to CheckListBox1.Items. Count-1 do

if CheckListBox1.Checked[i] then

ListBox1.Items. Add (CheckListBox1.Items[i]);

for i:= 0 to ListBox1.Items. Count -1 do

s:= s + StrToInt(ListBox1.Items[i]);

Label1.Caption:= ‘Сумма: ’ + IntToStr(s);

if s = 50 then

Label1.Caption:= ‘Сумма:’ + IntToStr (s);

CheckListBox1.Enabled:= False;

ListBox1.Enabled:= False;

Практическая работа № 19

«Головоломка № 2»

Цель работы - создать компьютерную версию головоломки: из изображенных пяти сброшенных флажков установить все. Но при выборе одного флажка меняется состояние двух следующих.

Создать программу, выполняющую следующие действия:

После запуска программы в окне изображаются пять сброшенных флажков. Щелкать разрешено только на сброшенных флажках. Щелчок на установленном флажке не действует. При установке какого-то флажка меняется состояние двух следующих флажков. При этом сброшенные флажки устанавливаются, а установленные - сбрасываются. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.

Описание плана разработки программы

1. Открыть новый проект.

2. Разместить на форме экземпляры компонентов: список флажков CheckBox , надпись Label .

3. Выполнить следующие действия:

Таблица 21.

Выделенный объект

Вкладка окна

Object Inspector

Имя свойства/

имя события

Действие

Установка имени формы «Все пять»

Создать глобальную логическую переменную s. В то время, когда идет обработка события, переменная имеет значение True (да).

CheckBox1

(Вкладка Standard)

Задать значение «1».

Необходимо работать с флажками, как с массивом. Форма является контейнером для флажков. У объектов-контейнеров имеется свойство Controls (Элементы управления) – массив элементов управления, находящихся в данном контейнере: Controls [i] as TCheckBox.

Для создания еще пяти флажков можно использовать метод копирования через буфер обмена.

CheckBox2

Задать значение «2».

CheckBox3

Задать значение «3».

CheckBox4

Задать значение «4».

CheckBox5

Задать значение «5».


Продолжение таблицы 21.

Выделенный объект

Вкладка окна

Object Inspector

Имя свойства/

имя события

Действие

(Вкладка Standard)

Введите текст: «Сумма: 0»

Задайте значение False

Задайте значение taCenter

4. Сохраните проект, запустите и протестируйте его.

Листинг подпрограммы

procedure TForm1.FormCreate (Sender: TObject);

procedure TForm1.CheckBox1Click (Sender: TObject);

var Index, i, num: Integer;

if s then Exit; {Если программа снова вызовет процедуру обработки, будет выполнен оператор Exit – немедленный выход из процедуры}

for Index: = 0 to 4 do {Оператор break прерывает выполнение цикла}

if Sender = Controls[i] then break; {Определяется, какой флажок был переключен}

{Когда выполнение цикла завершается, значение переменной Index соответствует переключенному флажку}

{Если значение свойства Checked (Установлен) равно False (Нет), флажок сброшен, а если True (Да) – установлен. Номер флажка в массиве определяется переменной Index}

if not (Controls as TCheckBox).Checked

then (Controls as TCheckBox).Checked:= True {Условие выполнено, если флажок сейчас сброшен, т. е. до щелчка он был установлен}

else {Программирование изменения состояния «дополнительных флажков». Текущий флажок уже переключен}

num:= Index + 1; {Переключение двух следующих флажков}

if Index = 4 then num:= 0; {Изменение состояния нулевого флажка}

{Состояние флажка надо поменять на противоположное}

(Controls as TCheckBox).Checked:= not

{Выполнение проверки на выход за пределы массива}

num:= num + 1; if Index = 3 then num:= 0;

(Controls as TCheckBox).Checked:= not (Controls as CheckBox).Checked;

e:= True; {Головоломка решена, если установлены все пять флажков}

for i:= 0 to 4 do

e:= e and (Controls[i] as TCheckBox).Checked;

{После цикла значение останется равным True, если все флажки установлены}

if e then {Головоломка решена}

Задачи урока

  • Работа с компонентом SpeedButton
  • Назначение одного события нескольким компонентам.
  • Приведение типов.

Выполнение упражнения

В этом уроке мы напишем облегчённый вариант калькулятора, аналогичный тому, что есть в Windows (рисунок 1). Он будет проводить четыре арифметических действия с целыми числами. Обозначим функциональность нашего калькулятора:

  • отображает в однострочном редакторе число, которое вводится при помощи цифровых кнопок;
  • при нажатии на кнопку типа операции она запоминается;
  • при нажатии на кнопку «=» отображается результат операции над числами.

Рисунок 1. Окно приложения

1. Дизайн приложения

  1. Расположите компоненты согласно рисунку 2а и задайте значение их свойства согласно рисунку 2б. В сносках обозначены порядковые номера компонентов SpeedButton .

а) б)
Рисунок 2

Здесь мы столкнёмся с новым компонентом - кнопкой SpeedButton (вкладка Additional ). Эта кнопка аналогична компоненту Button , но имеет некоторые особенности.

  1. Измените имена компонентов следующим образом:
Имя, которое Имя, на которое

необходимо изменить

Что это означает?
Edit1 EditOut Однострочный редактор для вывода результата
SpeedButton1 - SBtn1 - SBtn10 Цифровые кнопки
SpeedButton11 SBtnRavno Кнопка «равно»
SpeedButton12 SBtnС Кнопка сброса
SpeedButton13 SBtnPlus Кнопка «плюс» Определяют тип

операции над числами

SpeedButton14 SBtnMinus Кнопка «минус»
SpeedButton15 SBtnMult Кнопка «умножить»
SpeedButton16 SBtnDiv Кнопка «разделить»

Отметим, что имя компонента SpeedButton изменено на его аббревиатуру - SBtn , т. к. оно слишком длинное.

2. Цифровые кнопки калькулятора

  1. Для создания калькулятора прежде всего объявите глобальные переменные (обозначены жёлтым цветом):
var Form1: TForm1; A,B:Real; // Числа, с которыми будут выполняться арифметические действия Result:Real; // Результат математической операции: Result = A <мат.операция, определяемая переменной typ> B typ:Integer; // Тип операции над числами: * / - + implementation {$R *.dfm}

Листинг 1

Для чего нужна каждая переменная, понятно из комментариев.

  1. Напишите обработку события кнопки с заголовком «1 » таким образом, чтобы при её нажатии в однострочном редакторе отображалась соответствующая цифра. Для этого обработайте событие OnClick от кнопки SBtn1 следующим образом:
procedure TForm1.SBtn1Click(Sender: TObject); begin EditOut.Text:=EditOut.Text + SBtn1.Caption; end;

Листинг 2

Эта запись означает, что в компонент EditOut к его существующему содержимому будет добавлен заголовок первой кнопки (т. е. «1 »).

  1. Запустите программу и нажмите несколько раз на кнопку «1 ». В компоненте EditOut происходит отображение заголовка кнопки (рисунок 3).


Рисунок 3

  1. Чтобы при нажатии на другие цифровые кнопки происходило отображение их заголовка, необходимо обработать событие OnClick для каждой кнопки. Но… это практически один и тот же код (отличие только в названии кнопки)!!! Поэтому такие действия непрактичны. Намного проще запрограммировать один обработчик события для всех кнопок, и в нём определять, на кнопку с каким заголовком нажал пользователь. Но как это сделать?

Прежде всего, всем цифровым кнопкам (кроме кнопки «1 ») назначьте обработчик события OnClick кнопки SBtn1 . Для этого выделите все цифровые кнопки (через клавишу Shift ), кроме первой (рисунок 4а), перейдите в окно Инспектор объектов на вкладку Events и раскройте выпадающий список напротив события OnClick (рисунок 4б). Появится список всех созданных событий для компонентов формы, которые имеют такой же формат процедуры, как и у выбранного компонента (либо компонентов). В нашем случае здесь находится всего одна процедура обработки события OnClick первой кнопки. Выберите её.

Перейдите к окну конструктора формы и выполните двойной щелчок на каждой цифровой кнопке. При этом убедитесь, что всё время происходит обращение к одной и той же процедуре SBtn1Click .

а) б)
Рисунок 4

  1. Запустите программу и пощёлкайте на цифровых кнопках. Они работают все, но в компоненте EditOut выводится «1 » в любом случае.

3. Но цифры-то разные?

  1. Итак, первый шаг мы сделали. Теперь нажатие на любую цифровую клавишу обрабатывается одной и той же процедурой. Осталось выяснить, от какой именно кнопки пришло событие.

Ранее мы говорили, что в любой обработчик события передаётся обязательный параметр Sender , типа TObject . Этот параметр как раз и содержит информацию о компоненте, от которого пришло событие. Для выполнения каких-либо операций с этим параметром необходимо привести его к типу того компонента, для которого выполняются операции. Выглядит это следующим образом:

<Тип> (Sender)

Например, приведенные ниже две записи события OnClick кнопки SBtn1 типа TSpeedButton будут функционально аналогичны (приведение типов выделено жёлтым цветом):

EditOut.Text:=editOut.Text + SBtn1.Caption; editOut.Text:=editOut.Text + TSpeedButton(Sender).Caption;

Листинг 2

Воспользуемся этим чудесным параметром и перепишем обработчик события SBtn1Click следующим образом:

Procedure TForm1.SBtn1Click(Sender: TObject); begin editOut.Text:= editOut.Text + TSpeedButton(Sender).Caption; end;

Листинг 3

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

  1. Запустите программу и пощёлкайте по цифровым кнопкам. Теперь они работают правильно!

4. Функциональные клавиши калькулятора

  1. Следующая задача - это выполнение операций над введенными числами. Порядок работы с калькулятором должен быть следующий:
  • ввод первого числа «A »;
  • нажатие на кнопку типа операции;
  • ввод второго числа «B »;
  • нажатие на кнопку «= » для получения результата.

Ввод чисел мы уже реализовали. Теперь необходимо запомнить тип операции после нажатия пользователем на соответствующую кнопку (+ – * /). Но как мы определим, на какой из типов операций мы нажали?

Здесь просмотр заголовков функциональных кнопок, как было в случае с цифровыми кнопками калькулятора, нецелесообразен. Причины рассматриваются ниже. Лучше использовать какой-то другой параметр компонента. Идеальным вариантом в этом случае будет свойство, которое есть абсолютно у всех компонентов - Tag , типа Integer . Оно изначально никаких действий над компонентом не производит, и было введено разработчиками среды Delphi для нужд программистов. Присвойте значения для свойства Tag кнопкам операций, как показано на рисунке 5.


Рисунок 5

Таким образом, каждой операции будет присвоен личный номер.

  1. Как и в предыдущем случае, реализуем одну обработку события OnClick для всех арифметических операций. Для этого создайте обработчик OnClick для кнопки SBtnPlus и напишите в нём следующий код:
procedure TForm1.SBtnPlusClick(Sender: TObject); begin A:= strtofloat(EditOut.text); Typ:= TSpeedButton(Sender).Tag; EditOut.Clear; end;

Листинг 4

Поясним код:

  • запоминаем число, введенное в однострочный редактор в переменной A ;
  • запоминаем операцию в переменной Typ ;
  • очищаем однострочный редактор для ввода второго числа.
  1. Выделите кнопки – * / и через Инспектор объектов присвойте их события OnClick событию SBtnPlusClick .
  2. Теперь обработайте событие кнопки «=» следующим образом:
procedure TForm1.SBtnRavnoClick(Sender: TObject); begin B:= strtofloat(EditOut.text); Case typ of 0: Result:= A + B; 1: Result:= A - B; 2: Result:= A * B; 3: Result:= A / B; end; A:= Result; EditOut.Text:= floattostr(Result); end;

Листинг 5

Поясним код:

  • запоминаем второе число в переменную B ;
  • вычисляем результат, исходя из типа операции с помощью оператора выбора Case of (выделено жёлтым). Обратите внимание на то, что если бы мы считывали тип операции с названий кнопок, то данная процедура была бы куда более громоздкой, т. к. мы не смогли бы воспользоваться оператором выбора (он не работает с типом String ). Для каждого типа операций пришлось бы записывать оператор If . Результат операции заносится в переменную Result ;
  • переменной A присваиваем значение результата для дальнейших арифметических действий;
  • отображаем результат в однострочном редакторе EditOut .
  1. Обработайте событие кнопки «C » следующим образом:
procedure TForm1.SBtnCClick(Sender: TObject); begin EditOut.Clear; end;

Листинг 6

Эта кнопка выполняет очистку компонента EditOut .

  1. Запустите приложение. Введите 10 и нажмите на кнопку «+», введите 5 и нажмите на кнопку «=». Получите на экране 15. Проверьте остальные арифметические операции. Как видите, калькулятор - это просто!

5. Коротко о главном

Если имя компонента слишком длинное, то лучше его сократить.

Глобальные переменные объявляются перед разделом Implementation . Они видны во всём модуле.

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

Параметр Sender содержит информацию о типе компонента, от которого пришло событие.

Для выполнения с этим параметром Sender каких-либо операций, необходимо привести его к типу того компонента, для которого выполняются эти операции.

Свойство Tag типа Integer есть у всех компонентов. Оно было введено разработчиками среды Delphi для нужд программистов.

6. Выполнение заданий

Задания I уровня сложности

1. Модифицируйте созданный калькулятор так, чтобы он вычислял обратное значение числа (кнопка «1/x ») и корень (кнопка «sqrt »). Если вычисление невозможно, то вывести в однострочном редакторе текст «Ошибка ».

2. Модифицируйте созданный калькулятор для ввода дробных чисел (кнопка « , »). Причём так, чтобы запятую можно было ввести один раз. Если запятая присутствует и была нажата кнопка « , » в другой части числа, то запятая должна «перескочить» в новое место.

3. Модифицируйте созданный калькулятор для возможности изменения знака числа на обратный (кнопка « +/– »).

4. Модифицируйте созданный калькулятор так, чтобы можно было удалять последний символ (кнопка «Del »), вводить два нуля (кнопка «00 ») и вводить число Pi (Кнопка «Pi »).

5. Модифицируйте созданный калькулятор так, чтобы была возможность разделения групп разрядов с сохранением всей функциональности калькулятора. Например, чтобы вместо 3456190 было 3 456 190.

6. Модифицируйте созданный калькулятор так, чтобы в нём была возможность запоминать введенное число (кнопка «W») и отображать его (кнопка «R»). Причём на форме должна находиться метка, где будет отображено сохраненное число.

7. Модифицируйте созданный калькулятор так, чтобы он возводил число в квадрат (кнопка «x^2») в куб (кнопка «x^3») и в любую степень (кнопка «x^y»).

8. Модифицируйте созданный калькулятор так, чтобы он вычислял sin x , cos x , tan x и cotan x . Причём на форме должны быть два компонента RadioButton , в которых бы происходило переключение между размерностью вычисления (радианы либо градусы).

9. Модифицируйте созданный калькулятор так, чтобы числа можно было вводить прямо в окне однострочного редактора, а также с помощью клавиш + – * / выполнять соответствующие операции. Кнопка «= » должна соответствовать клавише Enter.

Задания II уровня сложности

1. Модифицируйте созданное приложение для работы с двоичными числами (перевод из двоичной системы счисления в десятичную систему и, наоборот, сложение двоичных чисел, операции Not , And , Or , Xor ). Переключение между десятичной и двоичной системами счисления осуществляется через компоненты RadioButton .

2. Модифицируйте созданное приложение для работы со статистическими вычислениями. Для этого на форме должна быть кнопка «Data », при нажатии на которую в массив запоминалось бы введенное число. И кнопки для выполнения над этим массивом следующих операций:

  • вывод количества символов в массиве;
  • вычисление среднего арифметического;
  • вычисление суммы всех чисел;
  • нахождение максимального элемента массива;
  • нахождение минимального элемента массива.