Смекни!
smekni.com

Информатика Базовый курс (стр. 185 из 188)

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

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

procedure TForml.ButtonlClick(Sender: TObject); begin end;

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

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

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

1.

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

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

3.

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

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

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

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


s: string;

begin

// если длина введенной строки не равна 6, II то закончить работу if length(Editl.Text) <> 6 then exit; // в локальную переменную s заносится строка,

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

Запуск программыDelphi 7abcdef,тически выполнится компиляция и тольствующие им цвета.Программа запускграмма запустится. Задавая различные стend;Shapelsfor i := 1 to 6 do// :=if числу/преобразованному 987654 и т. п.), можно наглядно ув —еон недопустивУстанавливаем значепровго pos "$00"+Editl.Text;это компилирующая система, сли очереднойе .Brush.Colorовим промежуто0123456789 (Uppercaseряетормальноется нажатием на клави я каждый с, и рабABCDEF";— (Editlсимвол не н := StrToIntв перную строие цве .Textтменнвол изтр ниак[i]ойта зкуебуевошу F стрроки (s).ачалдетьйдео по s )в9.н. а;ттоки в палведенносоответ-(, s) =. в стр автомаом про-FFOFFF,сяТак каквки пре оке s, знай строке 0 then exiкеременнойатитьуга равнРис 20.3. Пзакраски чtыsвр работеит,;мограмма


626 Глава 20. Основы программирования

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

Система Microsoft Visual Studio .NETво многом схожа с рассмотренной средой Delphi, но визуальные возможности построения пользовательского интерфейса реализованы в ней только для Бейсика и С#. Поддержка Си++ в этой системе унаследована от старых версий и не предоставляет разработчику столь удобного проектирования. Тем не менее мы рассмотрим простой пример ее использования для создания программы, рисующей график функции.
Постановка задачи

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

Принципы рисования в Visual Studio

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

Система Microsoft Visual Studio .NET не содержит визуальных средств создания программ на Си++, аналогичных возможностям Delphi. Она предлагает дизайнеры форм только для Бейсика и С#. Поэтому мы изучим несложный вариант использования графических примитивов Windows для демонстрации техники рисования графиков в пределах клиентского окна шаблонного приложения. Любое окно Windows характеризуется так называемым контекстом устройства, своеобразным объектом, содержащим различные методы графического вывода в пределах этого окна. Доступ к контексту нужного нам окна будет автоматически предоставлен Microsoft Visual Studio .NET при формировании обработчика OnDraw.

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

Так как система Microsoft Visual Studio .NET не дает возможности работать с формой напрямую, подготовка «пустого» приложения будет немного сложнее, чем в предыдущих примерах. После запуска системы надо дать команду File • New • Project (Файл • Создать • Проект), на панели Project Types (Типы проектов) выбрать раздел

Visual C++ Projects (Проекты Visual C++), а на панели Templates (Шаблоны) — значок MFC Application (Оконное приложение).

Название проекта (например, Grafiki) и его местонахождение задается в полях Name (Имя) и Location (Расположение). После нажатия на кнопку ОК запускается Мастер настройки вида будущего приложения. Изменять в нем ничего не надо, достаточно нажать кнопку Finish (Готово). Система сгенерирует заготовку пустого, но работоспособного проекта. Посмотреть его структуру можно с помощью средства Просмотра решения (Solution

Explorer), вызываемого командой View • Solution Explorer (Вид • Просмотр решения).

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

в нескольких операторах. Рис. 20.4. Структура
20.9. Пример на Си++. Рисование графиков

627

проекта Visual Studio Координату по оси Y нельзя взять непосредственно из .NET, сформированная переменной у, а надо вычислять по формуле Height-y, по- автоматически тому что в системе Windows считается, что точка с координатами (0,0) расположена в верхнем левом углу окна, а ось Y направлена вниз. Для удобства восприятия эту ось надо перевернуть.

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

Параметр pDC — это нужный нам указатель на контекст устройства. Его мы и будем использовать для вывода графиков. Обратите внимание, что по умолчанию он взят в скобки-комментарии и недоступен внутри функции. Поэтому его надо раскомментировать.