Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика Базовый курс_Симонович и др_2003 -6...doc
Скачиваний:
71
Добавлен:
20.08.2019
Размер:
8.44 Mб
Скачать

20.8. Пример на Паскале. Раскрашивание круга

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

В рабочем окне программы должны находиться: изображение круга, поле ввода с подписью, кнопки Закрасить и Закрыть. В поле ввода шестью символами (шестнад-цатеричными цифрами от 0 до F) задается новый цвет круга. Первые два символа определяют интенсивность синего цвета, третий и четвертый — интенсивность зеленого, пятый и шестой — интенсивность красного. Чистый синий опишется строкой ffOOOO, чистый зеленый — строкой OOffOO, чистый красный — строкой OOOOff, черный — строкой 000000, белый — строкой ffffff и т. д.

В самой программе надо дополнительно проверить, правильно ли введена эта строка. При нажатии на кнопку Закрасить цвет круга должен измениться.

Знакомство с Delphi

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

После ее запуска (например, Пуск > Программы > Borland Delphi 4) на экране появятся следующие окна (рис. 20.2).

Рис. 20.2. Рабочие окна программы Delphi 4

Главное окно Delphi 4. Здесь расположено основное меню, командные кнопки, а в правой части — палитра компонентов, состоящая из набора панелей, на которых компоненты сгруппированы по решаемым задачам: панель Standard (Стандартная) — стандартные элементы управления, панель Win32 — элементы версии Windows 95/98, панель Internet (Интернет) — компоненты для организации работы в Интернете и т. д.

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

Редактор исходных тестов. Предназначен для набора и редактирования текстов программы. Ключевые слова и различные идентификаторы выделяются в этом редакторе особыми цветами и разным шрифтом. Принцип его работы аналогичен принципам работы большинства редакторов Windows.

Инспектор объектов. Используется для визуальной (без программирования) настройки свойств различных объектов на этапе проектирования.

Заголовок окна

Понять, как работает Инспектор объектов, лучше всего на примере. Пока что автоматически создана только одна пустая форма (называющаяся Form"!), но она обладает множеством различных свойств. Заголовок формы (будущего окна программы) задается в свойстве Caption (Заголовок). Чтобы его изменить, надо в Инспекторе объектов найти строку, в левой части которой написано Caption, и в правой части этой строки, небольшом поле ввода, указать новое название, например Раскрашивание. Тут же изменится и заголовок формы в визуальном проектировщике.

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

Свойства могут быть многосоставными, например, свойство Font (Шрифт) — слева от названия такого свойства ставится символ «+». Двойным щелчком мыши на его названии оно раскрывается и показывает все свои вложенные подсвойства.

Размещение компонентов на форме

Прежде всего разместим на форме поле ввода. Для этого на палитре компонентов с помощью закладки выбирается панель Standard (Стандартная) и нажимается кнопка с всплывающей подсказкой Edit (выбран компонент «поле ввода»). Затем надо щелкнуть мышкой на форме, и в месте щелчка появится элемент управления Editl. Его можно перетаскивать по форме и менять размеры.

В свойстве Text (Содержимое) этого объекта исходно надо задать пустую строку, чтобы при запуске программы в данном поле ничего не показывалось.

Рядом с полем ввода надо разместить свободное поле с комментарием. Для этого на панели компонентов выбирается компонент, называющийся Label (Подпись), и помещается на форме так, как это было сделано с полем ввода. Новый объект автоматически получит название Label 1. Чтобы указать в нем текст «Цвет», его надо ввести в свойство Caption.

Изменить название любого объекта на форме можно, изменив его свойство Name в Инспекторе объектов.

В нижней части форма надо разместить кнопку — компонент Button (Кнопка) на панели Standard (Стандартная). Название этой кнопки (Закрасить) задается в свойстве Caption.

На панели Additional (Дополнительно) имеется компонент Shape (Фигура). Этот компонент помещается в центр формы. Он получит название Shape"! и исходно примет форму квадрата, закрашенного белым цветом. Чтобы превратить его в круг, надо значение свойства Shape изменить на stCircle.

Теперь осталось только добавить кнопку, закрывающую форму. Это действие стандартное, поэтому в Delphi 4 имеется специальный компонент BitBtn (Кнопка с картинкой) на панели Additional (Дополнительно), позволяющий автоматизировать такие действия, не прибегая к программированию.

После размещения такой кнопки на форме (она получит название BitBtn 1) значение ее свойства Kind (Вид выполняемого действия) надо установить в bkClose (Закрыть окно). При этом на кнопке появится изображение стандартной картинки, символизирующей действие закрытия.

В завершение надо изменить заголовок этой кнопки (свойство Caption) с английского слова Close на русское слово Закрыть, и на этом процесс проектирования приложения можно считать законченным.

Сохранение проекта

Перед тем как приступить к программированию, проект надо сохранить. Это действие выполняется командой File > Save All (Файл > Сохранить все), после чего сначала выбирается каталог и указывается имя файла, в котором хранится программное описание (на Паскале) структуры и работы спроектированной формы. Имя файла будет иметь расширение PAS по умолчанию. Далее Delphi 4 спросит, куда и под каким именем сохранить файл проекта, содержащий всю информацию об используемых формах и модулях (их может быть в одном проекте сколько угодно, но одна форма всегда будет главной) и всевозможные настройки. Название файла проекта не должно совпадать с названием файла с исходным текстом программы.

Обработка нажатия кнопки

В создаваемой программе вручную придется запрограммировать фактически только одно событие — нажатие на кнопку Закрасить. Чтобы создать первоначально пустую подпрограмму, вызываемую при нажатии на эту кнопку, надо просто дважды щелкнуть на ней мышкой. При этом Delphi 4 вызовет редактор, автоматически сгенерирует нужный текст и разместит курсор именно в том месте, где можно начать описание нужного алгоритма.

procedure TForml.ButtonlClick(Sender: TObject);

begin

end;

Обработчик события Нажатие на кнопку Button 1 — это обычная подпрограмма, метод класса TForm 1 (этот класс описывает главную форму Form 1). Единственный параметр Sender характеризует источник сообщения о случившемся событии. Его практически всегда можно игнорировать.

Алгоритм работы данного метода будет следующим. Первоначально надо убедиться, что длина введенной в поле Editl строки равна б символам и каждый из этих символов — шестнадцатеричная цифра. Если это не так, то выполнение обработчика надо сразу завершить (для этого предназначена стандартная процедура Паскаля Exit, мгновенно завершающая работу текущей подпрограммы).

Если же введенные данные корректны, их надо:

  1. Преобразовать в промежуточную строку в формате $00хххххх, где хххххх — шесть введенных цифр.

  2. Эту строку преобразовать в число, которое будет рассматриваться как цвет.

  3. Установить новый цвет круга на основании полученного значения.

Содержимое поля ввода Editl хранится в виде строки в его свойстве Text. Доступ к этому свойству осуществляется с помощью конструкции Editl Text.

Длина строки определяется стандартной функцией length() со строкой в качестве параметра.

Стандартная функция Pos(), получая две строки как аргументы, проверяет, не содержится ли первая строка во второй, и если содержится, то возвращает номер начальной позиции. В противном случае Pos() возвращает ноль. Эта функция потребуется для определения, все ли символы во введенной строке допустимы.

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

Преобразование строки в число выполняет стандартная функция StrTolnt().

Объект Shape"! имеет свойство Brush (Кисть для фона), которое, в свою очередь, имеет вложенное свойство Color (Цвет заливки). Его и надо в конечном счете изменить. Как только это произойдет, цвет круга в окне автоматически изменится на новый.

procedure TForml.ButtonlClick(Sender: TObject);

var i: integer;

s: string;

begin

// если длина введено строки не равна 6,

// то закончить работу

if length(Editl.Text)<> 6 then exit;

// в локальную переменную s заносится строка,

// содержащая допустимые символы

s := "0123456789ABCDEF";

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

for i := 1 to 6 do

// если очередной символ не найден в строке s, значит,

// он недопустим, и работу требуется прекратить

if pos(Uppercase(Editl.Text[i]), s) = 0 then exit;

// все нормально — в переменной s

// готовим промежуточную строку

s := "$00"+Editl.Text;

// Устанавливаем значение цвета заливки круга равным

// числу, преобразованному из строки в переменной s

Shapel.Brush.Color := StrToInt (s);

end;

Запуск программы

Программа запускается нажатием на клавишу F9. Так как Delphi 4 — это компилирующая система, сначала автоматически выполнится компиляция и только потом программа запустится. Задавая различные строки (FFOFFF, abcdef, 987654 и т. п.), можно наглядно увидеть соответствующие им цвета (рис. 20.3).

Рис 20.3. Программа закраски в работе

20.9. Пример на Си++. Рисование графиков

Система C++Builder по своей структуре практически ничем не отличается от системы Delphi, только программа в ней составляется на языке Си++. Поэтому с принципами визуального проектирования можно познакомиться в предыдущем разделе.

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

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

Принципы рисования в C++Builder

Перерисовывать экран в Windows приходится по самым разным причинам. Например, окно было закрыто другими приложениями, свернуто или оказалось временно заслоненным своими вспомогательными окнами. При этом перерисовывать приходится или все содержимое, или только часть. Программа, созданная с помощью C++Builder, сама определяет, что и когда ей надо перерисовать, и все элементы управления тоже это «понимают». Особое требование к организации перерисовки возникает, только когда программист напрямую использует функции рисования. Все эти функции в таком случае надо размещать в обработчике события OnPaint, которое вызывается автоматически.

Технология рисования

Каждая форма в C++Builder имеет свойство Canvas (Холст), представляющее собой достаточно сложный класс с набором методов, позволяющих рисовать точки, линии, фигуры, заполнять их цветом и т. д. Для создания графика потребуются два метода этого класса — метод MoveTo(x,y), устанавливающий новое начальное положение — точку (х,у) для следующих операций рисования, и метод LineTo(x,y), проводящий линию из предыдущей точки в новую.

Метод отрисовки

После того как программа C++Builder запущена, она автоматически открывает новый проект. Дополнительные компоненты на форме размещать не надо — требуется только переопределить метод, ответственный за перерисовку изображения на форме.

Для этого в Инспекторе объектов надо выбрать закладку Events (События), на ней найти строку с названием OnPaint и дважды щелкнуть на ней мышкой. C++Builder автоматически сгенерирует соответствующий программный код обработки события перерисовки:

void fastcall TForml::FormPaint(TObject *Sender)

{

}

Алгоритм отображения графика несложен. Он умещается в нескольких операторах.

Переменные Width (Ширина) и Height (Высота) — свойства формы, определяющие ее текущую ширину и длину в пикселах. Координату по оси Y нельзя взять непосредственно из переменной у, а надо вычислять по формуле Height-y, потому что в C++Builder считается, что точка с координатами (0,0) расположена в верхнем левом углу окна, а ось Y направлена вниз. Для удобства восприятия эту ось надо перевернуть.

void fastcall TForml::FormPaint(TObject *Sender)

{

int x,y;

// начальные координаты

х = 0; у = 0;

// начальная точка графика

Canvas->MoveTo(0,Height);

// цикл, пока каждая координата очередной точки

// укладывается в размер экрана

while ( х < Width && у < Height )

{

// следующая точка по оси X

х = х + 1;

// соответствующее значение по оси Y

У = f (x) ;

// в новую точку (x,Height-y) рисуется линия

Canvas->LineTo(x,Height-y);

}

}

Чуть выше метода Form Paint надо определить функцию f(), не привязанную ни к какому классу. В ней происходит вычисление значения анализируемой математической функции по заданному аргументу. Для примера она может выглядеть так:

int f(int x)

{

int у;

у = floor(50*log(x));

return у;

}

Стандартная функция log() вычисляет значение логарифма. Коэффициент 50 нужен, чтобы кривая пропорционально размещалась в окне. Функция floor() вычисляет целую часть аргумента (преобразовывает его в целое число), потому что в методах рисования надо указывать координаты только в целых числах (пикселах).

Исходно функции log(), floor() и ряд других не подключены к текущему проекту. Чтобы они стали доступными, библиотеку, в которой они хранятся, необходимо явно указать компилятору. Делается это с помощью командной строки

#include "Math.h"

которую можно поместить в самое начало текущего файла.

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