Практикум по Delphi для решения прикладных задач учебное пособие для студентов специальности «Прикладная информатика (в экономике)»

  • pdf
  • 18.02.2022
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала практикум делфи .pdf

Практикум по Delphi для решения прикладных задач

учебное пособие для студентов специальности «Прикладная информатика (в экономике)» Учебное пособие представляет собой сборник программ и задач для самостоятельного решения в среде разработки Delphi. Рассмотренные решения задач различной степени сложности демонстрируют возможности среды разработки Delphi7.

Учебное пособие будет полезно студентам вузов технических специальностей, а также школьникам старших классов, учащимся колледжей, студентам техникумов.

2

Введение

Язык формирует наш способ мышления и определяет, чем мы можем мыслить. Б.Л. Ворф

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

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

Эти события вызываются либо действиями пользователя, либо сообщениями от системы. Таким образом, последовательность выполнения запущенной программы определяется последовательностью событий. При последующем запуске программы последовательность может быть иной.

В мире существует несколько различных сред визуальной разработки: Visual Basic, Delphi, Borland С++ Builder и другие. Каждая рассчитана на свой язык программирования, от которого зависят правила записи программ. Готовая программа состоит из операторов этого языка, причем часть этих операторов записывают вручную, а часть операторов система программирования подставляют автоматически.

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

Мы будем использовать одну из самых мощных систем визуальной разработки программ — среду Delphi. Язык программирования, который использован в ней, называется 0bj ect Pascal (Объектный Паскаль).

З

1. Идеология объектно-ориентированного программирования

Объектно-ориентированное программирование (object-oriented programming) или событийно-управляемое программирование (event-driven programming) — программирование, направленное на объекты. Объект (object) — это все то, что нас окружает, и с чем мы можем взаимодействовать. Объекты могут быть информационными и материальными.

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

В каждый момент времени объект характеризуется присущим именно ему набором свойств (properties) и методов (methods) — операций, совершаемых над другими объектами или данным объектом, а также реагирует на события (events)

Если взять набор объектов, как правило, одного и того же типа, хотя и не обязательно, то мы получим семейство или коллекцию (collection), которая в свою очередь, тоже является объектом. Чтобы обращаться к элементам коллекции, каждому объекту присваивается уникальное имя или номер.

Способность реагировать на определенные события — это разновидность свойства. При возникновении события производится его обработка. Объекты, используемые в компьютерных программах, реагируют на события. При возникновении события происходит автоматический запуск специального метода — обработчика данного события. С помощью событий обеспечивается взаимодействие программы с пользователем. События, связанные с действиями пользователя, называются пользовательскими. Кроме пользовательских событий в программах происходят программные события.

Объединение в объекте его свойств и методов называют инкапсуляцией (encapsulation). Инкапсуляция означает, что объект инкапсулирует (содержит) в себе свойства и методы, но описывать мы ничего не должны. Под термином «инкапсуляция» подразумевается то, что мы работаем (взаимодействуем) с объектом, совершенно не зная об его устройстве. Синонимом инкапсуляции может служить термин «сокрытие информации» (information hiding) о конструкции объекта. Итак, объект можно определить как продукт инкапсуляции данных вместе с кодом, предназначенным для их обработки.

1.1. Элементы интерфейса программы

Delphi — интегрированная среда разработки (Integrated Development Environment

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

В Delphi имеются 10 окон, но после загрузки появляются четыре окна:  главное окно Delphi - <имя проекта>•  окно с формой для проектирования приложения Forml (окно проектировщика формы);  окно инспектора объектов 0bj ect Inspector•  окно редактора кода Unitl .pas.

В главном окне реализуется основные функции управления проектом создаваемой программы. Главное управляющее окно системы Delphi обычно располагается в верхней части экрана. Оно содержит средства управления созданием программы и выглядит наиболее загруженным из всех окон Это окно содержит:  строку заголовка;  строку меню;  панель инструментов•

4


 палитру компонентов

Строка  главлого охла отображает гкмя открытого в данги.1П мометгт проекта . Под СЈТОКО;Й заголовка окна системы располагаејся строка мен ю» содержащая команды системы 0elphj.

ГЕЛЯ

 

 

, : пуск

Рис. 1

Строко мето содержит комак.ды, необходимые для разработки тестмровакия (јрјтложений„ так как любое меню Wi:jd0ws. — эго очень важный элемент управления „любой программы или скстемьг. Кроме стропт меню программы обычло содержат другке элемелти управлелия: комакдпые :ккопкщ хлопот инсзтумењтов и Кнопками удобно лолн.зонатьс.я для исполнения операнмйг но не для всякой олеращш есть КНОГКщ а только детя тех, которые встречаются особенно ЧЕТСТО- Зато с помощь•о строки метио мотто кайтм -лаэбуаэ коматду, па. которую система слособка

Под строкой меню располагаются мнептругчеитое с кнопками. Во многих программах  только одна такая панель, но е системе Delphi их несколько. Панели инструментов (јредна:значены для вылолнения некоторых команд  славным мемо. Кно панелей инструментов обеспечивают доступ к наиболее часто встречаюг.лщмся командам. Чтобы узлатъ, как лазывается та млн иная кнопка, кадо ладестл да нее указатель пока рядом с НТТМ (ЈОЯНИ'Ј“СЯ всплывающая подсказка. ! Та этой панел•т есщ в частностщ кнопка сохранения проекта На диске, кнопка открытия проекта, топка запуска ка выполнелме

Одна из панелей инструментов, ИмС1ОЩ1ХСЯ в главном окне системы Delphi, заметно отлмчается от остальных- Это на.•нтро компонентов- Палитра компонентов устроена в влде набора  Палијра компонентов  множество вкладок. Каждая 33 содержит свой набор комгонентов. Общее число комгонентов достигает нескольких сотен. Совокупность наборов составляет библиотеку визуальных комполетпов •(Visual Сотропеп$ [ЈЬтаз•у - УСТ.). Инееј“СЯ несколько  компонентовг каждая 33, которых расположена на своей вкладке. С ПОМОЩЬю палитры компонентов создаются экземпляры компоке•лтод (ооъектьђ ла форме

РТС. 2

Окно объектное Irqspt.№tex} отображж•т свойства какого-либо компонента, актмвлзировалкого щелчком мьшлъаэ, самой формы. Имя актмтгзировамлого комлонелта  под заголонк0*.г Окна Именно С инспектора  настраивают объекты, используемые в программах. Это же окно кслользуется для выбора и настроим сся5ыткй, на которые будут реагкровать объекты нашей программы. С его помощью создаются или выблраются нужные процедуры обработки,

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

Форма — окна будущей просраммы. Каждая программа содержит хотя бы одно окно следовательно. одну форму. Поэтому при работе над программой окно формы мы вгкдмм ла экране всегда. Заготовка первого окна назьтетея FormJ. Если в про:рамме будет дна окнаг то заготовка будет называться ГО(1јј2 'гдк далее. Возможна замена стандартного названия более подходящим для программы.

Последнее из открытых ОКОН содержит коб проррсимы. Часть программы скстема Delphi формирует автоматнчесхн. Дакке, «лустая» программа для W'indows собирается из нескольких тысяч операторов языка Pascal. Добавлттъ нужные операторы смстема De]phi начинает еще до того, как программист лр•стулил к созданию своей программы.

Unit2.pas

Ur,t2

 

interfaoe

uses

, Зу; ГЈЂ113 ,                 С,е-арП1к , сопи:с. ,

ty№e

TF 0rraZ 0Xass (TF orm) privat.e

епа;

Епп-т2 :                   ;

ЈлпрЛ_e1nent оп

епа .

11 57       М odified         lasert            

Рис. 4

Добавляются операторы именно в этом окне. Некоторые операторы система Delphi добавит сама, другие мы введем вручную. Именно поэтому окно кода никогда не бывает пустым.

Для системы Delphi каждая незавершенная программа — это проект. Проект включает в себя множество файлов. Наиболее важными являются три файла: файл формы, файл кода и файл проекта.

Проект, состоит из:

   файла проекта Projectl .dpf,

   файла параметров проекта Projectl .dof,

   файла ресурсов проекта Project.res,

   файла настроек проекта Projectl .cfg,

   файла описания формы Unitl .dfm

   файла модуля формы Unitl .pas.

Файл модуля формы доступен для редактирования, именно он отображается в Редакторе Кода. Остальные файлы создаются Delphi автоматически. В процессе компиляции программы файлы преобразуются в исполняемый ехе-файл, который, по умолчанию, создается в той же папке, в которой расположен файл проекта.

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

Для сохранения проекта нужно воспользоваться пунктом главного меню Save Proj ect

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

Когда программа сохранена, можно начать написание новой программы. Для этого выберается пункт главного меню File New Application.

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

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

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

Визуальные компоненты являются элементами управления, которые добавляются на форму: это кнопки, поля ввода, картинки, панели и т.д. Те из них, что предназначены для ввода данных, могут принимать фокус ввода, обеспечивая управление с клавиатуры.

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

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

Часть свойств отвечает за положение на форме: отступ слева, отступ сверху, высота, ширина, выравнивание.


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

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

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

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

Некоторые конкретные компоненты и их предназначение.

*                     Для вывода надписей предназначен компонент Label

*                     Для ввода текста пользователем используется компонент Edit.

*                     Для работы с несколькими строками используют Мето. Строки хранятся в свойстве Lines.

*                     Кнопка реализуется компонентом Button.

*                     Для работы с пунктами используется CheckBox.

*                     Для выбора текста из нескольких альтернатив предназначен компонент СотЬоВох. Альтернативы хранятся в свойстве Items, аналогичном свойству Lines у компонента Мето.

*                     Для множественного выбора используется RadioGroup. Чтобы добавить в него пункты, щелкните на кнопку свойства Items и введите названия пунктов. Номер выделенного пункта соответствует свойству ItemIndex, нумерация с нуля.

*                     Простейшим контейнером компонентов может служить компонент Panel. На него можно поместить другой компонент, например, кнопку. При перемещении контейнера передвигаются все находящиеся в нем компоненты.

*                     Для работы с картинкой используется компонент Image. Картинку можно загрузить, щелкнув на кнопку свойства Picture и выбрав сохраненную картинку. Если загруженная картинка не совпадает по размерам с размерами компонента, ее можно масштабировать, установив свойство Stretch либо изменить размеры компонента, установив свойство AutoSize. Задний фон картинки можно убрать, используя свойство Transparent

*                     Для графического оформления используется компонент Bevel. Его вид можно настроить с помощью свойства Shape

*                     Ввод целых чисел с помощью мыши можно обеспечить с помощью компонента TrackBar. Его основное свойство — Position.

*                     А для отображения процесса длительных расчетов можно использовать компонент ProgressBar. Его свойство Position отображает процент выполненной работы.

1.2. Инспектор объектов

Каждый элемент управления, как и сама форма, обязательно имеет название. Название по умолчанию формирует сама система. Кроме того, практически все элементы управления также характеризуются текстовой информационной строкой надписью, которая первоначально совпадает с названием элемента. Например, кнопка на форме получает название и надпись Button1, а поле-надпись - название и надпись Label 1 . Эти надписи можно изменять.

Инспектор - одно из важнейших окон при работе в дизайнере. С его помощью настраиваются всевозможные свойства объектов, используемых в программе, а также возможные реакции программы на различные действия пользователя с этими элементами управления. Многие составляющие части программы (прежде всего элементы управления) представляют собой объекты. Они характеризуются наборами свойств и методами, вызываемыми в различных ситуациях. У каждого элемента управления есть обязательно свойство Name, с помощью которого можно определить название этого объекта (на самом деле это название будет названием переменной в тексте программы, по которому к нему можно обращаться!). А текстовая надпись элемента задается с помощью свойства Caption. Некоторые свойства существуют практически у всех элементов управления, а некоторые специфичны, так как предназначаются для определения конкретных особенностей работы определенного элемента управления.

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

2. Три основных принципа ООН: наследование, инкапсуляция, полиморфизм

В объектно-ориентированном программировании объекты объединены в классы. Класс — это проект, план строения конкретных объектов. Класс определяет, какие у данных объектов будут переменные состояния, и как они будут изменяться, какие будут методы и как они будут реализовываться. Класс нематериален, он не соответствует каким-то данным. В классе описано, какие переменные и с какими значениями могут быть у объекта. Могут быть, а не есть в данный момент. Ведь у разных объектов, относящихся к этому классу, значения этих переменных в данный момент, возможно, различны.

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

Для этого служит механизм наследования один из трех основных принципов объектно-ориентированного программирования.

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

Некоторые свойства и методы доступны внешним объектам, а некоторые целесообразно спрятать для внутреннего пользования.

Этот принцип сокрытия второй принцип объектно-ориентированного программирования, называемый инкапсуляцией.

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

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

Замещать можно и переменные. В подобном разноликом поведении и заключается третий принцип объектно-ориентированного программирования — Полиморфизм.

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

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

В Delphi все классы наследуются от одного предка — базового класса TObject. Этот класс не только дает всем своим потомкам ряд нужных всем им методов, например, методы создания и уничтожения экземпляров класса, но и обеспечивает базовую совместимость любых объектов. Все компоненты в Delphi — объекты. Можно создавать новые компоненты в Delphi.

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

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

Программа Delphi не является сплошным последовательным выполнением кода, как в Turbo Pascal. Здесь программа реализует некоторый код только как реакцию на события какие-то действия пользователя (нажатие кнопок, движение мыши, закрытие окон и т.п.) Когда код, описанный в обработчике, заканчивается, программа не завершается. Для завершения требуется, чтобы пользователь обычным в Windows способом закрыл главное окно приложения либо, к примеру, нажал на сделанную кнопку, в обработчике нажатия которой предусмотрен вызов процедуры Close.


3.  cnpaBRH

Button,

 

Visual Component Library Reference Help                          

Dañn npaatca BatcnaAK.3 napžMETpbl Cnpaaxa

cng.3EKL.i

 

n eqaTb

 

 

 

VCL Reference

TButton

                                          Propetties               Methods                  Events                     Lisinq Tauton       See Elsa

Tautton is a push button control.

Unit

StdCtrls

Description

Use TBIJttan to put a standard push button on a form. TBIJtton introduces several properties to control its behavior in a dialog box setting. Users choose button controls ta initiate actions.

To use a button that displays a bitmap instead of a label, use TBitatn. To use a button that can remain in a depressed position, use TSpeedautton.

Note: Since the TButton caption is always centered, changing the Eli0i alignment has na effect

PliC. 5-

 

e Visual Component Library Reference Help

                 npaat;a Bar.naatca                               Cnpaetca

cruaBKLd

H asa.a

neqaTb

 

 

 

VCL Reference

TButton

                                     Pra ertias           Methads              Events                Uang--l-auttgn Sea also

Hierarchy TObject

TPersistent

TCarnpanent

TControl

TVVinContral

TButtonContral

Tautton

antral

dard push button an a form. Tauttan introduces several properties ta control its tting. Users choose button controls to initiate actions a bitmap instead of a label, use TBitatn. To use a button that can remain in a Speedauttan.

aptian is always centered, changing the BiDi alignment has no effect.

 

PHC. 6.

IIP'I u.te:vtxe no CCbUIKe «Properties» crrtçpaercs OKHO, B

K0Mnonen-ra. B Hncnewrope Oöa,eK'T0ß ceoÖ'CTt*a.

П *isual Component Library R

 

 

VCL Reference

TButton properties

ТВ|Лоп                             .glphabetic:allv

Цеяеп<

ln ТВиноп а C.arc:el а Def2Lllt

ModalResult

Deriued Тот TWinContol AlignDisabled

.arlJE.h

ClientOrigirl

C..lientRect

C..orltrEilCnurlt

C..ontrals

DuckC.lientCuunt

Пря щелчке по какому-нубуд» свойству получаем его опксанле. Чтобы вернуться к олисаллтаэ комгокеита, да;ккмалот на. ссылку.

Visual Component Library Reference Неф

Файл Прввкв Звклвдкв Пврвметры Справка

Вызов справки

Цвзац

Печать

 

 

 

VCL Reference

MinControl.AlignDisabled

See also

lndicates child control realignment disabled property AlignDisala led; Вап1еап;

Description

AhgnD:sahled returns True if chlld corltrol reahgnment has Ьееп ternporardy d:sahled бу а сан to DisableAlign.

Рис. S

Аналогкчно МоЖНО получкть информацттн:т о методах и событл•ях компонента, щелкнув по соответствующей ссылке.

Если нужно получить справку по какому-то ключевому словуе типу, процедуре, классу т.п., необходимо поставить текстовый курсор посреднне интересующего слова в коде 1 .

Дл; функции дается кратное описание, указывается модулье в котором она объявлена, даются             непользоваштя, часто можно посмотреть пример Ехаллр[е

Таконец, (ЈОМО(ИЬ в написанитт лрограммы мо>к€г оказать комбинаијтя

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

Пря выборе из списка и нажатия E13tev текст автоматически вводится-

44 Структура программы

               Модуль хода (№nit) делится ла две части            нитерфейе (interface)        реализацию

Раздел interfaee•  uses: подключаемые модули, в которых содержатся используемые лроцедуры, фунюлјти. классы “(“. (Ј .  Ормттруејся ан:гоматичес.ки в зависимости от добавленных в форму компонентов type• олиса•лтя типов. Атоматкчески в этом разделе описал класс вашей формы.

 var: описание глобальных переменных. Автоматически тут описана переменная типа описанного класса формы. В этой переменной во время работы программы хранится указатель на экземпляр формы.

 const: описание констант. Этот раздел автоматически не создается, однако может быть легко добавлен. Раздел implementation:

 Здесь также можно добавить uses.

 С помощью {$R} подключаются файлы ресурсов. Автоматически подключен файл dfm, имеющий то же имя, что и файл модуля и потому подключаемый как *.dfm. В этом файле хранится информация о форме — расположение и настройки компонентов, помещенных в форму, и т.п.

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

Все то, что касается объявления доступных из других модулей переменных, констант, процедур, типов, классов и т.п., должно быть описано в разделе interface. В этой части программы, которая создается автоматически, в разделе uses перечисляются используемые модули, в разделе type описывается класс формы — потомок класса TForm, а в разделе var описывается глобальная переменная, в которой будет храниться указатель на объектэкземпляр формы. Соответственно, если надо подключить какой-то свой модуль, то необходимо добавить его в раздел uses. При описани нового типа его добавляют в раздел type до или после класса формы. Если нужно описать глобальную переменную, то ее добавляют в раздел var, а если нужна константа — создается дополнительно раздел const. В свою очередь, в разделе implementation сначала указывается ссылка на файлы ресурсов, а затем описываются реализации процедур и функций как создаваемых автоматически обработчиков событий, так и добавляемых по необходимости. Вначале эта часть пуста, но она будет заполняться во время написания программы.

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

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

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

Если изменить имя компонента, то изменятся имена и обработчиков событий, которые с ним связаны.

Если необходимо изменить название обработчика, то надо воспользоваться Инспектором Объектов. Переименовывая здесь имя процедуры обработчика, корректно автоматически изменяются также и ссылки на эту процедуру .

Если необходимо удалить какой-то обработчик, то удалите весь код внутри процедуры. При следующем запуске программы все пустые процедуры автоматически корректно удаляются. Компилятор автоматически удаляет пустые процедуры при запуске. При удалении всей процедуры описание и ссылки на нее останутся, а удаление их всех требует времени и аккуратности.

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

13

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

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

Раздел implementation предназначен не только для обработчиков событий. В этот раздел добавлять в него свои собственные функции и процедуры. Необходимо помнить, что они должны идти раньше процедур и обработчиков, из которых вызываются, или объявить их в разделе interface. В последнем случае эти функции и процедуры будут доступны для вызова из других модулей.

Существует также важная тонкость использования собственных функций: все обработчики событий имеют в своем названии имя формы: procedure TForm1 .FormCreate(Sender: TObject);

Это указывает на то, что работают с классом формы TForml и описывают методы для нее. Из обработчика просто обращаются к компонентам формы (класс формы «знает» о наличии компонентов на ней и имеет к ним непосредственный доступ), например:

MyGrid.RowCount := Num,

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

5. Методы отладки и борьбы с ошибками

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

Частой ошибкой начинающих является пропуск конструкции begin — end в цикле. При этом имеется в виду, что в цикле должны выполняться, например, обе команды, но на самомто деле в цикле, конечно, будет выполняться только первая, а вторая выполнится только один раз — потом, когда программа выйдет из цикла. При попытке запуска появляется сообщение. Но это не ошибка, а предупреждение. В нем обращается внимание на то, что параметр цикла после выполнения цикла может быть неопределенным (он присутствует во второй команде).

Однако, несмотря на предупреждение, программа может запуститься. Если вводятся дкакие-либо данные, то появляется сообщение об исключительной ситуации — exception. При этом программа приостанавливается, переходя из режима исполнения в режим отладки. Чтобы перейти к обычному редактированию кода, лучше остановить программу. Это можно сделать с помощью команды Program Reset. Затем можно поправить ошибку и вновь запустить программу .

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

По мере знакомства с языком и средой программист проходит несколько этапов. На первом этапе он, по незнанию, путает типы, забывает ставить знаки препинания (например, точку с запятой в конце строки), некорректно использует операторы и т.п. В результате написанный им код в принципе невозможно исполнить. И это хорошо поскольку допущенные им ошибки оказываются автоматически выявленными на этапе компиляции, более того, часто среда программирования сама подсказывает, какая ошибка допущена, и, что важно, указывает строку, которую нужно поправить. По мере изучения языка и борьбы с синтаксическими ошибками программист плавно переходит к следующему этапу. Теперь он уже не делает таких простейших ошибок, но, поскольку сложность его программ возрастает, возрастает и вероятность совершения им ошибки, при которой программа все равно запустится. Поскольку, с точки зрения компилятора, явной ошибки нет, а некоторые странности кода, по-видимому, являются замыслом программиста. Однако компилятор все-таки сообщает об этих странностях с помощью предупреждений (Warning) Советуем всегда обращать на них внимание, проверять при их появлении, нет ли ошибки, и вообще стараться писать код так, чтобы не было предупреждений. Опасность таких скрытых ошибок состоит:

1)      в том, что они таятся в той части кода, которую программист написал и уверен, что она правильная (программа запустилась), а значит, и не очень внимательно будет искать ошибку;

2)      в том, что проявляется эта ошибка совсем в другом месте кода — не в том, в котором допущена. А это приводит к долгим поискам ее по всей программе.

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

При возникновении исключительной ситуации можно проигнорировать ее и запустить исполнение программы дальше, нажав F9. В этом случае программа выдает сообщение об ошибке. Необходимо найти ошибку — понять, в какой строке и почему происходит сбой. Для этого можно воспользоваться трассировкой. Для того чтобы определить первую строчку, начиная с которой будет проводиться трассировка, нужно поставить Breakpoint— точку останова.

Когда исполняемый код доходит до точки останова, исполнение программы приостанавливается, и надо перейти в режим отладки. В режиме отладки можно исполнять последовательно программу по шагам, контролировать и изменять значения переменных и т.п. Этот режим служит для обнаружения и ликвидации ошибок. В этом случае появляется возможность просмотреть или изменить текущие значения переменных, однако изменение кода во время отладки невозможно. Измененный текст заработает только после перезапуска программы.

Чтобы выполнить текущую строку, на которой стоит курсор отладки, нажмите F7 или F8. Строка выполнилась, и курсор сместился. Если необходимо перейти к следующей строке, то можно нажать F8, если нужно зайти в какую-либо функцию, то нажимают клавишу F7 и продолжают трассировку .

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

Это, однако, работает не со всеми переменными, а только с доступными в данный момент. Если нужно постоянно контролировать значение переменной, то еще проще добавить ее в список Watch. Для более основательного слежения за значениями можете воспользоваться Списком Наблюдения (Watch List, Ctrl+F5).

Таким образом, при программировании среда Delphi может находиться в различных режимах:

Режим редактирования режим, в котором редактируется код проекта, модифицируется форма, добавляя на нее компоненты и настраивая их свойства. Это основной режим.

Режим исполнения программы — режим, в который среда переходит, как только нажата клавиша F9 и был построен ехе-файл. Фактически, в этом режиме происходит

15


как раз исполнение получившегося ехе-файла проекта. Программа исполняется так, как если бы ее вызвали не из Delphi, а просто из Windows

*          Режим отладки — в этот режим можно перейти из режима исполнения программы.

При этом программа будет приостановлена (но не остановлена совсем)

Чтобы продолжить трассировку (последовательный переход от команды к команде) можете воспользоваться клавишами:

*          F9 (Кип) — продолжить программу, не трассируя ее.

*          F8 (Step over) — выполняется текущая строка кода, и переходят к следующей строке.

*          F7 (Тисе Into) то же, что и F8, с тем отличием, что если в текущей строчке содержится вызов какой-либо функции или процедуры, то попадают внутрь этой процедуры и трассируют ее до конца, затем из нее возвращаетс и переходят к следующей строке (на которую перешли бы сразу, если бы нажали F8)

*          F4 (Run to Cursor) переход в режим исполнения программы до тех пор, пока не должна будет выполнена строка, на которой стоит текстовый курсор (аналогично тому, как если бы была установлена точка останова)

*          Shift+F8 (Run Until Return) — процедура выполняется до конца.

*          Ctrl+F2 (Program Reset) — остановка трассировки и переход в режим редактирования кода. (Иногда целесообразнее, если это не грозит ошибками, продолжить исполнение программы (F9) и выйти из нее нормальным образом, закрыв главную форму).

При работе в Delphi сообщение об ошибке фактически появляется дважды: сначала выводится окно об исключительной ситуации и программа приостанавливается, а потом, если нажать F9 (F8, F7 и т.п.) возникает стандартное сообщение об ошибке Windows. Итак.

1 Произошла ошибка.

2.      Программа приостанавливается.

3.      Выводится сообщение об exception. Это сообщение для программиста. Среда Delphi сообщает, что программа не в состоянии выполнить какую-то свою команду. Программист не предусмотрел возможность исключительной ситуации. Среда Delphi приостанавливает программу, чтобы программист разобрался, где и в чем ошибка Отключить приостановку (2)—(3) можно, сняв флажок Мепи Tools => Debugger

             0ptions => Language Exceptions       Stop оп Delphi Exceptions

4          Нажатие клавиши F9 (F8 F7 или др.)

5          Выводится сообщение об ошибке. Это сообщение для пользователя программы (ситуация запуска приложения не из Delphi, а через ехе-файл из Windows, т.е. не существовует пунктов 2, 3 4).

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

Механизм обработки исключительных ситуаций заключается в том, что если произошла ошибка (1) и не надо выводить (5), предпринимаются действия, чтобы (6) исполнялось корректно. Для этого «опасная» команда (или целый блок) помещается внутрь конструкции try. .except.. end или try. .finally. .end.

Блок try..finally..end используется аналогично try..except.., но с тем отличием, что блок команд между finally и end выполняется в любом случае, вне зависимости от того, было исключение между try и finally или нет.

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

«Моя первая программа»

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

 

Проект 1

Моя первая программа

Pwc. 9.

2. Для выхода яз программы необходимо щелкнуть мышью на кнопке «Закрыть». Описание плана разработки программы Т . НОнЫЙ проект.

2. Разместить на форме экземпляры комлонентое: метку Label и хнолк-у Bt'tton

З. Выполмтть следуощке действия:

Таблица 1

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

Действгте

F0rnt1

 

Properties

Caption надпись

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

Label1

S1at3ilardj

Prope11ies

Cap1i03j

Ввод текста надписи «Моя ле вая п амма»

AutoSize

Автолодбо

Ввод значен•л свойства: Тле

F011t C.olor

Выб ать дает: clPur [е

ButtonI

Propenies

Сарпол

Установка имени кнопки «Зак

Events

0nClick

C10se;

4. Сохранјтје проект. запустите (лројес:гируГтге его.

paóora 2 Cmaamte

1.1e.Nb paõ0Tb1 C03ÄflTb KOHCCE1bHYIO nporpaMMY.

I*tlaTb K0Ma11,ay rutarmoro Memo File > New                          Other (cbaii:l                    > Apyroe),

Allanor0BOM 0KHe va  New BblÕPaTb  Console Application (K0Hco:1bHoe

New Items

New

Proiectl I Forms I Dialogs I Proiacts

 

 

Application

DLL Wizard

T ext

 

Fila             Component

Frame

Clbiect           unit

 

 

Data

Module

Pro—. Group

Batch

Form

Thread

Inherit

Console

Application

Packaga

 

 

Help

Pvt. 10.

2. Ilocne

P"C. 11.

3

P"C. 12


4. Byeawe TCKCT nporpdMb1b1 KOZO.

P„c. 13

5 K0Mauay Run.  pe•3YJ1bTaT. HaxtTb Enter Koaa.

I'HC. 14.

З

«Приветствие»

Проект2

Первыеуспехи

 

Приветствие

 

Закрыть

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

Ряс. 15

2 для выхода яз программы необходимо щелктсуть мнимо па. хлопке «Закрыть.». Описание плана разработки программы

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

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

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

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

Выла.».

()hiett [11.qxc[or

Действие

Form1

Ргорсгйе€

Сароол

Установка имени формы «П оектЪ

Labe11

Properties

Сарпол

Ввод текста надписи «Пе вые спехи»

Вџ11оп 1

Properties

Caption

Установка имели «П кветствлеј}

Evejjls

OnClick

спехи“

Button2

Ргорегйе€

Capti011

Установка имени кнопки «Зах ЫТЬ>Ј

Events

0“Click

 

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

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

1. Сделать шрифт вывод•тмой реллгтхм «Первые усге:хк!» ОТЛИЧНЫМ ог стандартного по виду, цвету и размеру

Подсказки, В 0biect                                    щелкнуть справа от названл; свойства Font.

2. Замелить вгкд              «Выход» на. более пркв:текательвый.

пООС&'ОЗКО. Для замены кнопки удалтт•тн существующую. а другую BitB1n найти н палитре компонентов на вкладке Additional. Затем изменить ее вяд с помощью свойства kind«

3. Сделать таке чтобы после нажатия кногют «Приветствие» на экране лояжлялось сообщенне «Первые l• не

ПОГ}СКФП'О. Изменить. значение свойства Caption метки I.abell реакции кнопки B“ttonl на событие 0nClirk„

JIncTHHr nporpaMMb1

unit Unitl interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;

type

TForral = class(TForm) Labell: TLabel

Buttonl: TButton, BitBtnl: TBitBtn, procedure ButtonlClick(Sender: TObj ect);

private


{Private declarations }

public

{Public declarations } end;

var

Forml: TFonn1,

implementation {$R *.DFM)

procedure TForml.ButtonlClick(Sender: TObj ect); begin

Label I  H He nocneAHHe! end; end.

4

«Случайный выбор»

программу, выполняющую после запуска  появляется кадпись «Брось кубик».

Бросок кубика

 

 

Брось кубик

• Бросок кубика

Рис. Тб.

2. По (Иелчку на кнопке «Брс№ок кубика» (јоянляејся сообщение. выдаюитее числаочки в днагазоне О - б-

Бросок кубика

 

 

 

5

• Бросок кубика .


Рис 17

З. Для выхода 113 программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.

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

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

2        Разместить па форме экземпляры компонетпод: метку Lnbe1 кнопку Виноп З. Выполнить следующие действия:

Выделенный

 

Form1

Ргорсгйе€

Сароол

Установка имени формы

«Ь осок б ккл»

1.nbelI

Properties

Сарпол

Ввод текста надписи «Брось к бик»

Вџ11опЈ

Prope11ies

Cap1i03j

Установка имени

«Б осок бика»

Events

0„Click

           .Са              lntToSt л

 

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

ptoc«lure wnr п: 1nteger;

begin n .= random (6) + I

Label I Caption := IntToStr (n) end; end.

5.                       C03naTb cþYHKumo, 0T06pa)Karoruyro HHCJIOBb1e 3HaqeHH¶ rpaHeñ.

Function Kubic (Sides:lnteger): Integer;


Begin

If Sides              I then begin

Result       random (Sides) +1 end else begin Result end,

End;

5

Изменение заголовки формы

программу, выполняющую

1.      1“1осле запуска программы ввесттк текст д текстовом поле.

ПроектЗ

Введите новый заголовок

НПЗЫЙ прпект

Сменить ЗВГОЛПВПК окна

Рус.

2.      По (Иелчку МЫ!ЈЈНЈО на кнопке «Сменщть окна» изменяется окна

Новый проект            

Введите новый заголовок

Новый проект

 

Сменить ЗВГПЛПВОК окна

 

19.

З. Васстл новый текст в текстовом поле.

4.       Изменгтгь тдзвалие заголовка окка по лакатијо хладишл Елтег

5.       Для выхода из программы щелкнуть на закрывающей кнопке н строке заголовка.

Описание (1,113143  программы

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

2.      Разместлть на форме экземпляры компонентов: метку L*hel, кнопку Button текстовое поле F.di1

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

Таблттла 4.

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

В кладка окна

0ifect lns cct0T

Действие

Form1

Ргорегйе€

Сароол

Установка имени формы «П оект-3*Ј

LnbelI •(Вх,лад.ха S1at1dard)

Properties

Сарпол

Ввод текста надписи

«Внелттте новый 34t“OJtOHOk'3}

EditJ

Properties

Тем

ОЧИСТЛТЬ свойства

•Text

Button1 тВк.:кцхз S1:.nd31dJ

Cap1i01j

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

«Сменить заголовок окна»

Default

Выбрать в раскрывающемся

СIЛТТСКе значение Т

Eve1jTs

0,jC1ic14

готјпт са

 

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

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

Создать программу, выполкяаэщу•о следујощтке действия

1         . После запуска программы отображаются: две строки для ввода текущих курсов для евро и доллара; строка лая ввода денежной суммы в рублях; две строки вывода эквивалента н евро. долларах.

 

Пересчет денежной суммы

      Введите Т2К!ЩИЙ курс доллврв                Введите ТЕКУЩИЙ курс евро

Введите денежнчю сумму в рублях

        Сумма з долларах                                            Сумма в евро

ПОДСЧИТВТЬ З КВиВ.3Леет

Рис. 20

2         Ввести текущий курс для евро и доллара.

З. Ввести денежную сумму в рублях

4.       По щелчку на «ПОДСЧ}ЈТДТЪ эквивалент» ВЫВОДиТСЯ денежная сумма в евро и долларах.

5.       Ввести новый техущмП курс для евро доллара

      б.                  новую денежную сумму рублях.

7 По шелчку МЫШЬЮ на кнопке «Подсчлтать выводится новая денежная сумма д евро и долларах.

8. Для выхода 113 программы необходлмо щелкнуть мытые на закрывающей кнопке в строке заголовка.

6

«Двигающая кнопка»

программу, выполняющую

1.      1“lo щелчку МЫШЬю ла кнопке топка лкбо останавливается, либо двигается.

Двигающаяся кнопка

 

 

 

 

•tik

Рис. 21

2.      Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в

строке заголовка.

Описание (4,113143 программы

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

2 Разместить ка. форме экземпляры компонетпов: кнопку Btitton, таймер Timer. Ккогка включает и выключает таймер» а таймер двигает кнолю,•

З В ылолнить следующие демств•л:

Таблица 5.

объект

имя события

Действие

Form1

Propertwes

Caption

Установка имени формы

« вигалощаяс•

I'imerl

Propertwes

Emhled

Установлть значение свойства  гаке

Свойство Enah[cd определяете аклаэчел или выхл•очет' таймер (ло умолчаниюг ОН ВКЛЮЧеКј

Тптегеа1

 ТИО

Свойство lntcwal определяет интер-

вал мкллкеекупда.х между возникнонением событий (по умолчанию кнт вал авен 1 се нде

 

Events

0nTimer

Butt0111.Lefi Butt0I11-Lcft ifButtonJ.Leti•:. 10

                (hen               .Le!i

Вц1Топ1

Ptoper1ies

 

Усвановка имени кнопки «Сменить.

з“головок окна»

Default

Выбрать в раскрываюшемся спкске значите “Ггие

Events

0nClick

“Iimerl .Enabled = пот “Iimerl .Enabled•,

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


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

«Альбом»

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

Альбом

Рис. 22

2.         щелчку мышьто па рисунке появляется диалоговое окноЗ. Выбрать в открывшемся диалоговом окне любой другой рисунок.

Delph• Ь - Project1 (Нипп:пц]

lrtemet

Samulesl ActiveX

*

 

 

'Wirl

дяьбог,1

СЕ деси •

Рис. 23

4. Для выхода мз лрограммы необходимо щелкнуть мышью на закрывающей хнолке строке залоговка.

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

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

2.    Разместить на форме экзем(јлиры коммонентон: панель Рапе] рису нок Jntagev диалоговое окно 0penDiaIog. З. Выло-ллить следующие дейстдтл:

Таблица 6.

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

Вкладка окна

0Wect Ins ector

Имя свойства] имя события

Действие

Form1

Pro erties

Са tion

Установка имени

о мы «Альбом»

РапеП

(Вкладка Standard)

Properties

Са tion

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

В evel 0uter

Выбрать в раскрывающемся списке значение bvLowered

BevelInner

Выбрать в раскрывающемся списке значение bvNone

BewelWidth

П исвоить значение 2

Width

П исвоить значение 241

Hei ht

П исвоить значение 185

Image1

(Вкладка

Additional)

Properties

Left

П исвоить значение 2

то

П исвоить значение 2

Width

П исвоить значение 237

Hei ht

П исвоить значение 181

Stretch

Включить свойство True

Picture

С помощью кнопки-построителя открыть диалоговое окно Picture Editor (Редактор изображений). Щелкнуть на кнопке Load (Загрузить) — откроется диалоговое окно Load Picture (Загрузка рисунка). Открыть папку C:\Windows и выбрать файл Лес. bmp, щелкнуть на кнопке Открыть. Вернуться в окно Редактора изображений, щелкнуть на кнопке ОК.

Imagel .Picture.LoadFromFile

О enDialo 1.FileName

Events

0nClick

О enDialo 1.Execute

0penDialog1

(Вкладка

Dialogs)

Properties

Title

Ввести текст: «Выбо изоб ажения»

FileName

Ввести полный путь доступа к файлу: C:\Windows\J1ec.bmp

Filter

Ввести текст: Растровое изображение

*.bm *.bm

DefaultExt

П исвоить свойств значение: .bm

0ptions

Подсвойству ofFileMustExit (Файл должен с ществовать п исвоить значение Т гие Да

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

Листинг подпрограммы procedure TForml .ImagelClick (Sender: TObject); begin

0penDialog .Execute;

Image .Picture.LoadFromFile (0penDialog .FileName); end;

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

Работи с мето Цель работы -

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

после запуска в окне изображается строка метио (Файл, Выход).

2. При выборе пункта меню Файл появляются пункты меню (Рисункщ Выход).

З. При выборе пункта меню появляется вложенное Метив, состоящее из двух пунктов (Облака» Лес).

Р„с. 24.

4.      По щелчку правой кнопки МЫШИ появляется контекстное меню.

5.      Выбрать. (30 пункту друзой рисунок

 

Form1         

Файл выход

Р„с. 25.

6.      для выхода из программы лесбходимо щелкнуть мышьто па закрыва•ощей хлопке д строке заголовка.

7.      Еслл выбрать любой тв пунктов Выход работа лрограммы завершаетсяОписание (4,113143  программы

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

2.     Разместлть ка. форме экземпляры компонетпов: панель 1'anel, рисунок Image, диалојхунсе окно 0penDialog З. Выполннть следующе деиствия:


Таблица 7

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

Вкладка окна

0Wect Ins ector

Имя свойства] имя события

Действие

Form1

Properties

Caption

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

Events

0nMouseDown

var р: TPoint; begin

р.х

р := ClientToScreen (р);

РорирМепи1 .Рорир (р. Х, р. У); end,

Зап стить едакто меню дважды щелк ть на значке меню на

о ме

Form1.MainMenu1

Properties

(в окне 0bjcct Inspcctor не выбран никакой объект

Caption

Ввести текст пункта меню

Файл, и нажать Enter. Система присвоит ему имя ТЫ 1

Между существующими и будущими пунктами меню можно переключаться с помощью щелчка мыши или к со ных клавиш.

Form1.MainMenu1

Properties

Caption

Ввести текст пункта меню

Выход, и нажать Enter. Система п исвоит е имя N2.

Events (щелкнуть на пункте Выход в ст оке меню

N2Click

Close

Щелкните на пункте Файл. Редактор меню создал еще одну заготовку под этим пунктом. Это заготовка для меню, которое откроется при выборе пункта Файл в работающей программе. Используя заготовки, создайте в этом меню два пункта: Рисунки (система присвоит ему имя N3) и Выход (N4). Выберите в редакторе меню пункт Рисунки и нажмите комбинацию клавиш Ctrl + Вп аво.

N4: ТМепипет

Events

0nClick

Выберем из раскрывающегося списка уже существующую п оцед -об аботчик N2Click

Form1.MainMenu1

Properties

Caption

Ввести текст пункта меню

Облака, и нажать Enter. Система п исвоит е имя N5.

М: ТМепииет

Events (выбрать в строке меню на форме пункт Облака)

0nClick

Imagel .Picture.LoadFromFile

Form1.MainMenu1

Properties

Caption

Ввести текст пункта меню — Лес и нажать Enter. Система п исвоит е имя М).

М»: ТМепииет

Events (выбрать в строке меню на форме пункт Лес)

0nClick

Imagel .Picture.LoadFromFile ('C:\Wndows\J1ec.bmp');

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

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

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

Вкладка окна

0bject Inspector

Имя свойства] имя события

Действие

РорирМепи

(Вкладка Standard)

Properties

Caption

Ввести текст пункта меню

Облака, и нажать Enter. Система п исвоит ем имя N7.

Caption

Ввести текст пункта меню — Лес и нажать Enter. Система п исвоит ем имя N8.

 

Events

OnClick

Выберем из раскрывающегося списка уже существующую п оцед -об аботчик N5Click

м

Events

OnClick

Выберем из раскрывающегося списка уже существующую п оцед -об аботчик N6Click

Image

Вкладка Additional

Properties

Stretch

Присвоить значение Т гие

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


Листинг подпрограммы procedure TForml .N2Click (Sender: TObject); begin

Close, end procedure TForml .N5Click (Sender: TObject); begin

Image 1 .Picture.LoadFromFile (' С  ' у, end procedure TForml .N6Click (Sender: TObject)• begin

Image 1 .Picture.LoadFromFile (' С bmp ' у, end procedure TForm 1 .FormMouseDown

(Sender: TObject; Button: TMouseButton; Shift: TShiftState; Х. У: Integer); var p:TPoint; begin

р.х

Р ClientToScreen (р);

РорирМепиТ .Popup (р.х, р. У); end;

                                                                                 9

Случайный выбор списка

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

 

Писатель

Pwc. 26-

2.     


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

Писатель                                                                       

Рис 27

3.      Для выхода 33 щелкнуть мышью на закрывающей н строке заголовка.

Описание (4,113143 программы

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

2.       Разместлть на форме экземпляры комлонентов: поле со списком СотЬоВох, командная      Виноп

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

Таблица 8.

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

ОКНД слог

своЈКтв,'1.•' ими событи*

Действие

Form1

СотЬоВоя1

Рто

 

Са ti01'(

Ус:анонха имени

 

мы «Сочкните;лк.»

Even1s

О:јС.геа1е

ComboBox3.1temIndex :=О

f'roperties

Sty[e

Выберкте значение cSOropOowTList мз аск           СIЛИСК-а

ITMj'(S

Щелкните на

Отжроется окно S1riog l..i$1 Edi10f

(Редактор списка строк)- Ввести пункты списка ло одному каждую строчку * з-аверијая ввод нажатием клавиши Er1ter После того как список готов, щелкнуть на кнопке ОК

Il OAOJDKeHHe Ta6JIHUb1 8

BblAeJueHHb1ï1 06beKT

BKJfflAKa OKHa

Object Inspector

HMSI CBOï1CTBa/

C06b1TH51

AeücTBHe

ComboBox2

(BKnaAKa Standard)

Properties

Style

Bb16epHTe 3HaqeHHe cSDropDownList H3 acK blBaF011-uerocq cnucKa

Items

IlleJIKHHTe Ha KHOFIKe nocTPOHTeJ1¶.

OTKPOeTC¶ OKHO String List Editor (PenaKTop cnucKa CTPOK). BBecTH nyHKTb1 cnncKa no OAHOMY B

CTPOHKY, 3aBep111aq BBOA HOKaTuerv1 KJuaBHUIH Enter. ITOCJ1e Toro KaK CITHCOK FOTOB, IUeJIKH Tb Ha KH011Ke OK.

ComboBox3

(Brçnanrca Standard)

Properties

Style

Bb16epHTe 3HaqeHHe cSDropDownList acK blBarorueroc51 cruncKa

Items

IlleJIKHHTe Ha KHomce nocTPOHTeJH.

OTKPOeTC¶ OKHO String List Editor

(PenaKTop CllHCKa CTPOK). BBecTH

HYHKTb1 cnucKa no OAHOMY B

CTPOHKY, 3aBep111aq BBOA HOKaTHer•v1 KJ1aBH111H Enter. Ilocne Toro KaK cr1HCOK FOTOB, I-UeJIKH Tb Ha KHOr-1Ke OK.

Buttonl

(BKJ1aAKa Standard)

Properties

Caption

YCTaHOBKa HMeHH KHOFIKH Bb160

Events

OnClick

Comb 0B ox I. Itemlndex

Random (Comb 0B ox I. Itemlndex. Count);

ComboBox2.ItemIndex

Random (ComboBox2.ItemIndex.Count);

Comb 0B ox3. Itemlndex

Random ComboBox3.1temIndex.Count

4.      CoxpaHHTe npoeKT, 3anycTHTe H np0TecTnpyÏne ero.

Ta6nnua 9

     Cnucozc cyugecmcumeJ1bHb1x                           Cnucozc Hapequù                                       Cnucozc òeùcmcuù

K0111Ka

bblCTP0

I]naBaeT

3MCS1

BblCOKO

beraeT

KY3HeLIHK

MeaneHH0

JleTaeT

CHJNbHO

INOJN3aCT

qepenaxa

Xopomo

111)b1raeT

JlacT0L11ça

INJNOXO

JIucT11Hr nonnporpaMMb1 procedure TForml .FormCreate (Sender: TObject); begin

Randomize;

ComboBoxl .ltemlndex :=0; ComboBox2.ItemIndex :=0; ComboBox3 .ltemlndex :=0; end; procedure TForml Hutton I Click (Sender: TObject); begin

Comb 0B ox I . Itemlndex Random(C omboB ox I . Itemlndex. Count) ; ComboBox2.ItemIndex Random(ComboB ox2. Itemlndex. Count); Comb 0B ox3. Itemlndex Random(C omboB ox3. Itemlndex. Count) ; end;


10

Простейший плеер

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

в окне изображается  проигрыватель.

2. По щелчку мышью на кнопке «Play» воспроизвести выбранную мелодию.

З. Для выхода мз лрограммы необходимо щелкнуть мышью на закрывающей хнолке в строке залоговка.

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

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

Таблица 10.

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

tOr

И.м« свойств:л,•'

Действие

 

Prope11ies

Cap(ion

Усј}щновка имени формы

«М зыкальный ои ыватель»

MediaPlayev1

•(Вх,лад.ка SvsIe:u}

Ргоре«тез,

АитоОрсп

Выберкте значенле Тазе яз аск ывтощегося СЛИСКЕТ

FileNaIT'.e

Указать не полный путь к файлу, а относител Кно местоположен ия программы. Например, ”PriI11-wav", то программа будет этот файл искать д еде сама

4. Сохраните проект, запустите протестируйте его. 5 Создать проигрыватело хартмлжу-фој[, например:

PItc. 29.

6.      Сохранить картинку•фон в файле, например, Фон.Ьллр

7.      Вставить д плеер в качестве фона

11 одолжелме таблица 10.

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

Вх.хдл,ха окна

tOr

И.м« свойств:л,•'

Действгте

lmage1

Proper1ies

Рјстите

С ПОМОЩЬЮ хнолки Lpad выбериле файл Фон, Ьгтр и нажмите ОК- В результате па месте пункткрной каемки на форме появится этот рисунок 113

й.ла.

AutoSize

Вы

ать значенке True

8. подобрать размер формы лод размер изображения, само изображение установите в нерхнттй левый угол» с кнопками медиаплеера лостантт•ть чтобы гармонировала с рксунком фона, например:

РКЦ. ЗО

11

«Прыгающая кнопка»

программу•лгру, вылолняюшую следующие действия: в окне изображается беспорядочло прыга•ощая кнопка

2.      Необходимо успеть щелкнуть по ней.

3.      Кнопка перепрыгивает 413 одного места в другое ло скгналу, полученному от таймера4. Для выхода 33  необходимо щелкнуть мышью на закрывающей н строке заголовка.

Описание плана разработки программы  . ОТКРЫТЬ НОНЫ Й проект.

2.      Разместлть на форме экземпляры кОмпОнмтОв: командная кнопка Button, таймер Timej•

3.      следующие дейстнття

Таблица [

Выде.јелогый ОмСК-3“

Вкладн 0Wcc1

сзойетзт'

Действие

FormI

Properties

Caption

Усталовха имев“ формы «Прыгающая кнопка»

Clie,j1WidTh (Внутренняя шн нн:1Т

Присвоттть значение ЗОО

ClientHeigth

значение 200

Выбрать значение bsSing е (ломкая)

Events

ОпСгеа1е

Randonjize;

ButtonI

•(Вх,лад.ка S1at1dard)

Prope«ies

Capti011

Ввести надпись «Нажшт меня»

TahStop

Прясвојггь значенме False. Это свойство разрешает выбрать данный элемент улравления клави(дгей ТаЬ Клавиа ой пользоваться запоещаегс;.

Viswble

Прясвојггь значенме False. Сначала кнопка невидима.

Нет 11t

П лсвоить значение 30

Width

П лсвоить значение Sf:•

Events

03C[ick

Bvtt0111.Capti011 .= 'Готово',

13vtton1.Enahled := False;

.Enab1ed

Il OAOJDKeHHe Ta6JIHUb1 1 1

BblaeneHHb1ìí 06beKT

BKMAKa OKHa

Object Inspector

HMSI CBOï1CTBa/

C06b1TW1

AeücTBue

Button2

(BKnaAKa Standard)

Properties

Ca tion

BBecTH Hanr1HCb

Default (no

MOJIqaHHkO

Bb16paTb 3HaqeHHe True

Left CJueBa

Il HCBOHTb 3HaqeHHe 110

To oe x

Il HCBOHTb 3HaqeHHe 160

Width

HHa

IIPHCBOHTb 3HaqeHHe 80

Height

BblCOTa

FIPHCBOHTb 3HaqeHHe 30

Events

OnClick

Close;

Timerl

System)

Properties

Interval

HHTe Ban

LIPHCBOHTb 3HaqeHHe 500 (IIPOMOKYTOK

B erqeHH H3Me qeTC¶ B MHJIJIHCeK Hnax

Events

Timer

var i: Integer; begin

Button I. Visible := True;

Button l . Top := 10 + 50 * ( i div 3);

Button I .Left 10 + 100 * ( i mod 3); end,

4.      CoxpaHHTe npoeKT, 3anycTHTe H np0TecTnpyÏne ero. JIncTHHr nonnporpaMMb1 procedure TForml .Button2Click (Sender: TObject); begin

Close end procedure TForm I. Timer I Timer (Sender: TObj ect)• var i: Integer; begin i:=Random(9);

Button l . Visible .= True

Button l . Top := 10 + 50 * ( i div 3);

Button I Left 10 + 100 * ( i mod 3); end, procedure TForml Button I Click (Sender: TObject); begin

Buttonl .Caption 'F0T0B0'

Buttoni Enabled False False end; procedure TForml .FormCreate (Sender: TObject); begin

Randomize; end;

                  3anarme                CtùMOCTO¶Te.J1bHOVO Bb1110.JIHeHV1¶

I 1/13MeHHTe urpy TaK, LIT06b1 CKOPOCTb MO)KHO 6b1J10 HaCTPaHBaTb B npouecce HFPb1.

2. C03naö1Te ABe KHOHKVI: MeaneHHee Bbl(3Tpee. IlleJ] L10K Ha OAHOÖI "3 HVIX 6yneT

                  YBeJ]VI LIVIBaTb                                 YMeHbUfflTb 3HaqeHHe CBOÖICTBa Timerl Interval Ha 100 MVIJU]VICeKYHA.

12

«Тпблицп умножения»

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

2. Необходимо выбрать два числовых значения и найти их произведение.

З. Если выбкрается одно число, то НЕХОДИТСЯ его квадрат

Таблица умножения

                                                                               2

                                                                                    2

П рпизведени 4

Квадрат

Рис. 32-

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

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

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

TrackBat'* рамка  надпись I.abcl, З. Выполн•пь следующие действия

Таблица 12.

Вы-гленкы'ј объехт

Действие

Form1

Propetties

Caplion

Усвановка имени формы «Таблица множено»

TrackBar1

(Вкллдкл Wit1.32)

P•wertics

П лсвојггь значенле 2

Мах Макся

П лсвоить значение 99

Positjon ложен:те

Прясвојгть значенле 2

LineSize (Матее

Прлсволтть значение

Page,Size

Присвонтьзначенле 7

Frequency

Частота •ккечеь:

Прясвојгть значенле 7

Events

0nChange

lntToStr(TrackBarl-Position *

ifCheckBox1 .Checked the11 TrackBar2.Position


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

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

Вкладка окна

0bject Inspector

Имя свойства] имя события

Действие

TrackBar2

(Вкладка Win32)

Properties

Min Миним м

П исвоить значение 2

Мах Максим м

П исвоить значение 99

Position

Положение

Присвоить значение 2

LineSize (Малое изменение

Присвоить значение 1

PageSize (Постраничное изменение

Присвоить значение 7

Frequency

Частота зассчск

Присвоить значение 7

Events

0nChange

Labe12.Caption

IntToStr(TrackBar2.Position); Labe13.Caption

IntToStr(TrackBarl .Position * TrackBar2.Position)• if CheckBox .Checked then

TrackBarl .Position

TrackBar2.Position,

GroupBox1

(Вкладка Standard)

Properties

Caption

Ввести подпись «Произведение»

Labe11

(Вкладка Standard)

Properties

AutoSize

Автоподбо

Установить значение False

Са tion

П исвоить значение 2

Alignment Вы авнивание

Установить значение taRightJustify ы авнивание по п авом к ако

Labe12

(Вкладка Standard)

Properties

AutoSize

Установить значение False

Са tion

П исвоить значение 2

Alignment

Установить значение taRightJustify

(Выравнивание по правому краю)

Labe13

(Вкладка Standard)

Properties

AutoSize

Установить значение False

Са tion

П исвоить значение 4

Alignment

Установить значение taRightJustify Вы авнивание по п авом к аго

CheckBox1

(Вкладка Standard)

Properties

Са tion

Ввести подпись «Квад ат»

Alignment

Установить значение taLefttJustify (Выравнивание по левому краю)

Events

0nClick

TrackBar2.Position

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

Листинг подпрограммы procedure TForml . TrackBarl Change (Sender: ТОЬј ect); begin

Label .Caption IntToStr(TrackBarl .Position);

Labe13 .Caption IntToStr(TrackBarl .Position * TrackBar2.Position); if CheckBoxl .Checked then TrackBar2.Position := TrackBarl .Position; end procedure TForml .TrackBar2Change (Sender: TObject)• begin

Labe12.Caption := IntToStr(TrackBar2.Position);

Labe13 .Caption := IntToStr(TrackBarl .Position * TrackBar2.Position)• if CheckBoxl .Checked then TrackBar2.Position := TrackBarl .Position, end, procedure TForml .CheckBoxlClick (Sender: TObject); begin

TrackBar2.Position := TrackBarl .Position, end,

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

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

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

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

Применение полос прокрутки

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

после запуска программы в окте изображается две лолосы прокрутки. Верткка-львая полоса будегугравлять „движенлем по вертккалщ горизонтальна; — по горизонтали.

2.      Наводя указатель мыиј•т на одну двух фкгур, можно выбиратц какая 413 зткх фкгур связана с полосами прокрутки.

3.      Требуются дополнительные сбьек-гн. с 1!ОМОЩНЈО ко:орых осранттчцвае•ся областн движения фигур в окне.

4.      Если полоса прокрутки актквлая, то она до.лкла реагировать на клавиши ВВЕХ, ВНИЗ,

      ВЛЕВО. ВПРАВО. РАФЕ        РАСЕ DOWN

5.      Для выхода 113 программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.

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

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

2.       Разместить ла форме экземпляры компонетггод: пакель Рипе] полоса прокрутки ScrollBat, фигура Shape

З. Ввести дополнительную переменную логического тмла пит. Есл•т она принимает значение Тше (Дау •леку•глей считаевся мерная фигура Значению (Пет) соответствует вторая флгура. Эта переменна; должна быть доступна во всех лроцедурах.

следующие дейстнття

Таблица 13

Выделенны#Ј объехг

Вкладка окна

1ОГ

Им

[1.3“ собь.гтмя

Действгте

F0rrtt1

Propej-ties

Captjon

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

Panel

(Вхладуа Stat1dar•dj

Propet[ies

! Ieight

П                 значение

Wid1h

П                 значение

Сар(Јоп

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

SrrollB*r1 (Вкладка

Ргорегйе€

Мгл

П исвоить значение

Мая

П                 значение 145

PosiTi0f'1

П ТТСНСПТЈ“Ь. значение 76

SmallChange

11рнсвоттть зпачел ме 2

П одолжение таблицы 13

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

Вкладка окна

0b ect Inspector

Имя свойства] имя события

Действие

 

 

LargeChange  (Большое изменение

Присвоить значение 20

Events

0nChange

if пит then Shapel .Left

ScrollBar .Position else Shape2.Left

ScrollBar .Position

ScrollBar2

(Вкладка Standard)

Properties

kind

Выбрать значение sbVertical Горизонтальная полоса прокрутки станет ве тикальной.

Min

П исвоить значение 5

Мах

П исвоить значение 145

Position

П исвоить значение 76

SmallChange

Малое изменение

Присвоить значение 2

Lar eChan е

П исвоить значение 20

Events

0nChange

if пит then Shapel. Тор

ScrollBar2.Position else Shape2.Top

ScrollBar2.Position

Shape1

(Вкладка

Additional)

Properties

Hei ht

П исвоить значение 1 1

Width

П исвоить значение 1 1

Left

П исвоить значение 76

то

П исвоить значение 76

Shape (Форма)

Выбрать значение stCircle (Круг

Brush (Кисть)

Выбрать для подсвойства Color (Цвет кисти) значение clAqua гол бой цвет

Events

0nMouseMove

(При движении мыши)

Shape .Brush. Color clAgua;

Shape .Brush. Color clFuchsia• Num ттие•

ScrollBarl .Position: Shape .Left;

ScrollBar2.Position:

Sha ет.то

Shape2

(Вкладка

Additiona1)

Properties

Hei ht

П исвоить значение

Width

П исвоить значение

Left

Присвоить значение 76

то

П исвоить значение 76

Shape

Выбрать значение stSquare Квад ат

Brush

Выбрать для подсвойства Color (Цвет кисти) значение clFuchsia иолетовый цвет

 

Events

0nMouseMove

Аналогично Sha е2


5. CoxpaHHTe npoeKT, 3anycTHTe H np0TecTnpyñTe ero.

JIncTHHr nonnporpaMMb1 procedure TForml. ScrollBarl Change (Sender: TObj ect); begin if num then Shapel Left := ScrollBarl Position else Shape2.Left := ScrollBarl Position end procedure TForml. ScrollBar2Change (Sender: TObj ect); begin if num then Shapel. Top := ScrollBar2.Position else Shape2. Top := ScrollBar2.Position end procedure TForm I. Shape IMouseMove

(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin

Shapel Brush. Color := clAgua;

      Shapel Brush. Color     clFuchsia,

Num True;

ScrollBarl Position:= Shapel Left; ScrollBar2.Position:= Shapel. Top; end procedure TForm l . Shape2MouseMove

(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin

       Shape2.Brush.Color     clFuchsia,

Shape2.Brush.Color := clAgua,

Num False

ScrollBarl Position:= Shape2.Left• ScrollBar2.Position:= Shape2.Top• end procedure TForm l . FormCreate (Sender: TObject)• begin num := True end,

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

«Светофор»

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

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


2. Когда указатель мыши наведен на лампочку, она меняет свой цвет.

Светофор                

 

Р„с. 34.

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

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

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

2.     на форме экземпляры фигура Shapc З. Выполн•пь следующие действия

Таблица 14.

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

ВК.ЖД.ХК окна

(3hix1 1rsxc[or

Действие

Form1

Pj•opej'tjes

 

формы

«Свето о »

Hci ht

П исвоить значение 300

Width

ПРИСВОИТЬ значение 120

Bordcrlcons

(Служебные КНОПКА)

Выбрать для подсвойсгва ize (Сворачлвкнлеј l• bi№aximjzg (Разворачивание) значение False

 

Задать СтандаОтныЙСС ый тлвет

B0Tdej•STy1e (Стлль

В („брать значение bsSing•e

Evcr.ts

0rMouse-Move

В процедуру передаются

дополлителыме параметры: S1ji!i — указываете не была ли оря перемешенгм нажата клавиша SHIFT, CT1tL МЛ; Х „ горизонтальна; координата указателя мыијтт; У •     координата указателя.

П одолжение таблицы 14

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

Вкладка окна

0bject Inspector

Имя свойства] имя события

Действие

Shape1

(Вкладка Additional)

Properties

Hei ht

П исвоить значение 61

Width

П исвоить значение 61

Sha е Фо ма

Выб ать значение stCircle К г

Реп (Контур)

Выбрать для подсвойства Color (Цвет) значение clRed (красный цвет

Brush (Кисть)

Выбрать для подсвойства Style

(стиль) значение bsClear п оз ачный

Enabled

Включен

Выб ать значение False Нет

Shape2

(Вкладка Additional)

Properties

Hei ht

 

П исвоить значение 61

Width

 

П исвоить значение 61

Sha е

 

Выб ать значение stCircle К г

Реп

 

Выбрать для подсвойства Color

(Цвет) значение clYellow желтый цвет

Brush

 

Выбрать для подсвойства Style значение bsClear

Enabled

Включен

Выб ать значение False Нет

Shape3

(Вкладка Additional)

Properties

Hei ht

 

П исвоить значение 61

Width

 

П исвоить значение 61

Sha е

 

Выб ать значение stCircle К г

Реп

 

Выбрать для подсвойства Color (Цвет) значение clLime (яркозеленыи цвет

Brush

 

Выбрать для подсвойства Style значение bsClear

 

 

Enabled

Включен

Выб ать значение False Нет

4. Написать функцию 0nShape, которая вызывается из процедуры FormMouseMove 5 Работа функции определяет следующие события:

Если указатель мыши не наведен на лампочку, то ее цвет будет прозрачным.

Если указатель мыши наведен на лампочку, то ее цвет будет соответствовать цветам светофора.

sh.Width div 2; {r - радиус фигуры} сх := sh.Left + r• {сх, су — координаты центра фигуры} су := Ф. Тор + г; d2 := (Х — сх) * (Х — сх) + (У — су) * (У — су); {d2 — квадрат расстояния от центра} 0nShape := bsClear; {указатель мыши не наведен на лампочку, т.е. находиться за пределами фигуры} if d2 > then 0bShape bsSolid; [указатель мыши наведен на лампочку, т.е. находиться внутри фигуры}

6.      Выравнивание элементов:

1)      Выделить все три фигуры.

2)      Выбрать команду Edit —» Align (Правка —» Выровнить).

3)      Откроется диалоговое окно Alignment (Выравнивание).

4)      Установить слева переключатель Center in Window (Центрировать в окне).


5)      YCTaHOBHTb cnpoa nepeKmoqaTeJ1b Space Equally (C PaBHb1MH HPOMe)KYTKarv1H)

6)      IlleJIKHYTb Ha KHOr1Ke OK.

7.      CoxpaHHTe npoeKT, 3anycTHTe H np0TecTupyñTe ero.

JIucTHHr nonnporpaMMb1

Function OnShape (sh: T Shape: X, Y: Integer): TBrushStyle; var r, cx, cy, d2: Integer; begin sh.Width div 2, cx := sh.Left + r cy := sh.Top + r; d2 := (X — cx) * (X — cx) + (Y — cy) * (Y — cy), OnShape := bsClear; if d2 > r *r then ObShape := bsSolid, end procedure TForml .FormMouseMove (Sender: TObject, Shift: TShiftState; X, Y: Integer);); begin

Shapel .Brush.Color := clRed,

Shapel .Brush.Style := OnShape (Shapel, X, Y); Shape2.Brush.Color := clYellow;

Shape2.Brush.Style := OnShape (Shape2, X, Y);

         Shape3 Brush. Color     clLime;

Shape.Brush.Style := OnShape (Shape3, X, Y); end

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

«Ханойские баш

Цель работы  создать компьютерную версгтю мгры•голоеоломхи «Ханойскке башни». Игровая доска содержит семь клеток, расположевтпых д ряд. На трех левых клетках стоят белые фишки, на трех правых — черные. Центральная клетка пуста- Задача заключается в том, чтобы, делая допустимые ходы, ломенять фииж•• местами. Правила ходов такие. ! . Белые фИ!ДјКИ могут вправо. а черные — только влево

2. Ходить разрешается только на свободное поле.

З. Разрешены леремеще•лтя па соседке,е поле «прыжок» через одну фгкижу. В ролтт фишек выступают кнопки с изображением» назлример.


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

Рис. 35-

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

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

2.       Разместить на форме экземпляры компонентов: панель Panel, кнопка с изображен№ем BitBtn.

3.       В следу ющие действия

Таблица 15.

0b'x1      сгот

 

Forml

Propertjes

Captjon

Установка имени формы «ГОЛОнОЛОМха»

S1at3(lardj

РтореттЈе,э

НеЈ ht

П гксвоит'. значевтке 65

Width

П гксвоит'. значите 401

Са )tjon

Очгкстлт.           [ие

BitBtnl

A(ldi1i01E31}

Propertjes

Неб ht

П ксвоить значен•те Ф)

Width

П ксвоить значен•те 49

 

ПРИСВОИТЬ значение 8

 

Присвоить значение 8

 

Рторегјез

Hei ht

ПО ИСВОИТЬ значение ФЗ

WidTh

П                значение

 

П                 значение 64

то

П гксвоит'. значите 8

BitBtn3

РтореттЈе,э

Height

П гксвоит'. значевтке 49

Width

П ксвоить значен•те Ф)

l„eft

П ксвоить значен•те 120

 

П ксвоить значен•те S

BitBtn4

РтореттЈез

Hci$.lht

Присвоить значение ФЗ

Width

ПО ИСВОИТЬ значение ФЗ

г.еп

П                 значение 232

 

 

П                 значение 8

 

РтореттЈе,э

1-le:i ht

П гксвоит'. значевтке 49

Width

П гксвоит'. значевтке 49

Left

П гксвоит'. значите 288

Тор

значен•те S

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

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

Вкладка окна

0bject Inspector

Имя свойства] имя события

Действие

BitBtn6

Pro erties

Hei ht

П исвоить значение 49

 

 

Width

П исвоить значение 49

 

 

Left

П исвоить значение 344

 

 

то

П исвоить значение 8

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

5.        Создать рисунки при помощи стандартной программы Paint. Задайте размеры рисунков 45х45 пикселов (в режиме увеличения).

6.        Создать две картинки с именами Left.bmp и Right.bmp, поместить их в папку проекта. Рисунок с именем Left.bmp предназначен для левых кнопок, рисунок с именем Right.bmp — для правых кнопок.

7.        Назначить рисунки кнопкам.

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

BitBtn1, BitBtn2

BitBtn3, BitBtn4

BitBtn5, BitBtn6

Properties

Caption

Очистить значение

Glyph (Значок)

Щелкнуть на кнопке построителя.

Открыть окно Picture Editor. Щелкните на кнопке Load. В диалоговом окне выберете файл с изображением кнопки и щелкните на кнопке ОТКРЫТЬ. Щелкнуть на кнопке ОК, и выбранная картинка появится на кнопке.

8.        Необходимо хранить два числа: номер клетки, в которой находится кнопка; признак «цвета» фишки», т.е. в какую сторону может ходить кнопка.

9.        Номер клетки умножить на два. Если фишка черная, прибавить к числу единицу.

10.     Задать свойство Tag (Тег) для всех кнопок.

Таблица 16

Значение свойства Tag

Комментарий

2

Первая клетка, белая фишка

4

Вторая клетка, белая фишка

6

Третья клетка, белая фишка

 

Четвертая клетка, черная фишка

 

Пятая клетка, черная фишка

15

Шестая клетка, черная фишка

11.     Создать дополнительную переменную для пустой клетки var п: Integer 4;

12.     Создать глобальную переменную win : Integer 24; [все фишки в сумме должны переместиться на 24 клетки;

13.     Программируем выполнение хода фишки.

Таблица 17

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

Вкладка окна

0Wect Ins ector

Вмя события

Действие

BitBtn1

Events

OnClick

В процедуру BitBtnl Click передается параметр объект Sender. Он представляет именно тот объект, который вызвал событие, и может дать доступ к его свойствам. Надо специально указать, что объект Sender в данном случае следует считать кнопкой. Чтобы обратиться к свойству Tag данного объекта, записывают

Sender as TBitBtn Та

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

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

procedure TForml .BitBtnlClick (Sender: TObject); var i, с, К, аК: Integer; begin with Sender as TBitBtn do {объект Sender используется многократно}

begin

{свойство Tag указывает, какая именно кнопка нажата}

i := Tag div 2,

{переменная i хранит номер клетки, где находится кнопка}

с := Tag mod 2,

{переменная с определяет цвет фишки}

К := n—i

{k — величина перемещения}

ак := Abs (К);

{ak — длина хода}

if ак < 3 then

{проверка допустимости хода}

if ((с = 0) and (К > 0)) or ((с = ) and (К < 0)) {белые фишки могут ходить только вправо, черные - влево} then {делаем ход} begin

Tag

Left Left + 56 * К win win — аК; {при каждом ходе уменьшается значение переменой win на длину хода}

 {пустая клетка находиться там, где раньше была фишка} end; end if win 0 then {проверка завершения решения} begin

Caption := 'Победа!

          Panel .Color      clFuchsia•

Panel .Enabled := False; [отключаем панель, и одновременно все расположенные на ней объекты; end; end;

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

«Электронный альбом»

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

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

2 Выбкраем необходкмыл*'      переключатель,         рясу нок 413 соответствующего раскрывающелося списка

З. Для выхода из программы необходт„то щелкнуть мытые на закрывающей кнопке в строке заголовка.

Инте рактивныи электронньм альбом

 

 

-Чвсти света

• Европа

Азия

Африка

Северная Америка

Южная Америка

Австралия

 

Горшдв

П вриж

 

Рис. 36

штана

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

2       Разместить на форме экземпляры компонелтов: рамка GroupBox. переключатель  раскрывающийся СПИСОК З. В ылолнить следующие действия:

Таблица 18.

окна c(or

 

Form1

Properties

Сарпол

Установка     формы «Интерактивл           электрол альбом»

Even1s

(_JnC1•eate

GroupBoxl

f'roperties

Сарпол

Введите название «Части света»

R.adi0Batt01jJ

S1at3ilardj

Propenies

Са ti011

Введите па:звалие «Ев опа»

Checked

В КЛ ЮЧеН

Задайте злачелие Тгие

Tag

Присвојтгъ значение О

Events

0nclick

В процедуре описать локальлуаэ переменную i.

Описать деЙствия переключателей, кспользуя цккл с параметром i от до 5.

Для создания е•це лжти переключателей можно  К0(Јјтронания через буфер обмена- Пока объект Radioeattcnj остается выделенным, на;кмкте комбинацкн:т

CTRL*C протоойдет его копкровашзе в буфер обмела. Теперь лажмите комбилацијо CTRl.+V — это команда вставки объекта буфера обмена Delphi автоматически изменит имя ооьекта — новый объект получш имя RadioBatton2.


П одолжение таблицы 18

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

Вкладка окна

0bject Inspector

Имя свойства] имя события

Действие

RadioBatton2

Properties

Caption

Введите название «Азия»

Tag

Присвоить значение 5

RadioBatton3

Properties

Caption

Введите название «Африка»

Tag

Присвоить значение 10

RadioBatton4

Properties

Caption

Введите название «Северная Аме ика»

Tag

Присвоить значение 15

RadioBatton5

Properties

Caption

Введите название «Южная Аме ика»

Tag

Присвоить значение 20

RadioBatton6

Properties

Caption

Введите название «Австралия»

Tag

Присвоить значение 25

Выделите все шесть переключателей. Дайте команду Edit —> Align (Правка Выравнивание)

Откроется окно Alignment (выравнивание). Установить слева переключатель Left Sides Левые к ая , а сп ава Space Equally авные п оме тки елкните на кнопке ОК.

GroupBox2

(Вкладка Standard)

Properties

Caption

Введите название «Города»

СотЬоВох1

(Вкладка Standard)

Properties

Style

Выбрать значение csDropDownList Раск ывающийся список

Events

0nChange

Imagel .Picture.LoadFromFile

(ListBox2.Items [СотВох1 .Tag +

СотЬоВох 1. ItemIndex

Image1

(Вкладка Additional)

 

 

Поместить объект на рамку

ListBox1

(Вкладка Standard)

Properties

Visible

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

Items (Пункты)

Щелкнуть на кнопке построителя. Введите в список тридцать названий городов - по пять для каждой части света.

ListBox2

(Вкладка S[andard)

Properties

Visible

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

Items

Щелкнуть на кнопке построителя.

Введите в список тридцать имен айлов, соде жащих иллюс ации.

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

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

procedure TForml. RadioButtonlClick (Sender: TObject); var i: Integer; begin

СотЬоВ ох 1 . Clear•

Comb0Boxl .Tag (Sender as TRadi0Button). тау for i := 0 to 5 do

СотЬоВох I .Items.Add (ListBox I .Items [СотЬоВох I . Tag + i]);

СотЬоВох1 .ltemlndex := 0;

Image 1 Picture.LoadFromFile (ListBox2.1tems [ComboBox 1. end

procedure TForml .FormCreate(Sender: TObject); begin

Radi oButton I Cli ck(Radi oButton I ) ; end

procedure TForml .ComboBoxlChange (Sender: TObject); begin

Imagel Picture.LoadFromFile (ListBox2.Items [ComboBox I. Tag + ComboBox I .ltemlndex]); end


17

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

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

1.       1“1осле запуска программы в окте изображается три текстовых поля.

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

Считаем проценты!

Рис. 37

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

сжн:}

()hiett [11.qxc[or

Дећ;твне

Form1

Propertwes

Caption

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

Labe11

Propertwes

Caption

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

EditI

Propet1ies

“I“ext

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

Edit2

Propertwes

Text

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

Edit3

Properties

Text

Очистить значенле

Button1

Propertwes

Caption

Введттге  «Рассчлтатыг

Events

ОпСЛсК

Описать локальные Number, Ргосеп( Ргп

2.       В первое поле вводятся число- Во второе поле — проценты. нажатии кнопки «Рассчгттать» д третье поле вьиюдятся вычисленные проценты от числа.

 

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

 

Считаем процеты!

 

Рассчитать

Рис. 38.

3.       При нажатии КНОпКИ «Очистить» очищаются значения полей. Далее ННОДЯ'ГС.Я новые значения в ПОЛЯ.

4.       для выхода из программы необходимо щелклутъ мьишыо на закрывающей хлопке в строке заголовка .

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

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

3.      следующие дейстнття

Таблица 19.

FIPOAOJDKeHHe Ta6JIHUb1 19.

BblAeJueHHb1ìí 06beKT

BKnaAKa OKHa

Ob•ect Ins ector

HMSI CBOï1CTBa/

C06b1TW1

AeücTBue

Button2

Properties

Caption

BBeAHTe HUBaHHe

Events

OnClick

Editi. Text. Edit2.Text. Edit3. Text.

4.      CoxpaHHTe npoeKT, 3anycTHTe H np0TecTupyñTe ero.

nporpaMMb1

var

Number, Procent, Prn: Real procedure TForm I Hutton I Click(Sender: TObj ect); begin

Number:=StrToFloat(Editl. Text);

Procent:= StrToFloat(Edit2.Text);

PrN:=0.01 *Procent*Number

end;

procedure TForml .Button2Click(Sender: TObject); begin

Editi. Text.

Edit2.Text. Edit3. Text. end;

18

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

• создать компьютерную версию одной головоломок Самузля Ллойда: 113 задатптого лабора чисел надо выбрать те, сумма которых составит 50. Чкс.ла, которые избрал Ллойд ,щт;:• своей головоломку: 25, 27, З, 12, 6, 15. 9е 30$ 2 1, 19.

 

 

 

Е] 25 27

27

12

19

Сумма: ЕВ

Рис. 39

В ылолнить следующие демств•л:

I После запуска программы д окле изображается список чисел Ллойда.

2- Выбираем с помощью флажков ззкс„ла и помещаем в правое окноСумма выбранных чисел лредставлена в виде надписк-

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

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

2- Разместить на форме экземпляры компонентов: список флажков CheckListBox„ надпись 1.21;је1, список ListBox.

3 ВЫ (ГОЛНЈТТЬ следуя•ощјте действия:

Таблица 20.

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

Вклад.“ окна

1rsxcIor

Имя события

Действие

Form1

РтореттЈез

Caption

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

BorderS le

Задайте значение dsSin le

CheckListBox1

Addjtiona1 )

Properties

ltems

Задаем состав сл•тска. Щелкнуть на кнопке лострогттеля. Откроется окно S1ring l..(st editor (Редактор списка строк). Введите в список запанные числа че €3, Enter Пакмгтј“е КНО txV ОК

Height

11одобрата. злачелие так, что все числа поместялмсь в список (без полос п о ток

Events

0nClickCheck

лисать очистку слисха. Проверять, устаковлеј[ флажок или пег после обновленуя списка необхощтмо подсчитать сумму выбранных чисел. Элементы списка выглядят             числа. но являются текстовыми строками (досполызоваться фулкцгкей StfTo•nt}

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

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

Вкладка окна

0bject Inspector

Имя свойства] имя события

Действие

ListBox1

(Вкладка Standard)

Properties

Height

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

Labe11

(Вкладка Standard)

Properties

Са tion

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

Autosize

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

Ali nment

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

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

Листинг подпрограммы procedure TForml .ChcckListBoxlClickChcck (Sender: ТОЬј ect); var i, s: Integer; begin

ListBoxl.Clear• for i: = 0 to CheckListBoxl .Items.Count-l (10 if CheckListBox .Checked[i] then

ListBox 1 .Items.Add (CheckListBox .Items[i]);

for i := 0 to ListBoxl .Items.Count -1 do s + StrToInt(ListBoxl .Items[i]); Label l.Caption := ' Сумма: ' + IntToStr(s); if s = 50 then begin

Label .Caption .= ' Сумма: ' + IntToStr (s);

CheckListBoxl .Enabled False

ListBoxl .Enabled False end end


19

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

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

Все ПЯТЬ

 

 

 

 

 

 

 

Г1г-бЕддд!

Т7 П.:бвдд! Г1г-бЕддд!

Т7 Пг-бвдд! Г1йбЕддд!

Рис. 40.

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

1. После запуска  в окне изображаются (тять сброшенных флажков.

2 Щелкать разрешено только на сброшенных флажках- Щелчок на установленном флажке пе действует.

З. При установке какого-то флажка меняется состояние двух следующих флажжов. Пря этом сброшенные флажки устанавливаются, а устаноштенные • сбрасываются.

        4. Для выхода из программы щелкнуть                    на закрывающей кнопке н

строке заголовка.

Описание плана разработки программы . ОТКРЫ'З“Н НОНЫ Й проект.

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

3.      следующие действия

Таблица 21

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

Ими БЕ7Лства'( им:т события

 

Form1

р C1•tie.s

Са ion

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

 

Even(s

ОпСтеате

Создать глобальную логическую

переменную s. В то время, когда идет обработка события, лереме•мая кмеет значенле Тазе да

С."есКВох1

р Crtie.s

Са ion

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

Even(s

 

Т Теобходцмо работать с флажками. как с массивом. Форма является контеинером лля флажков. У объектов„котгтейверов имеется свойство Controls (Элементы управления) — массив элементов управления. находящихся данном контейне е: Controls • а; TChec\Box.

дт» спесквох2

-ктжкое; МОЖНО

Рто erties

Са tion

ко бе, с обмена. Задать злачешзе «Ъ.

спесквохз

Рто erties

Са tion

Задать злачешзе «З».

СлесКВоя4

Рто erties

Са tion

Задать злачешзе «4».

СъесКВоя5

Properties

Caption

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

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

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

Вкладка окна

0b ect Inspector

Имя свойства] имя события

Действие

Labe11

(Вкладка Standard)

Properties

Са tion

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

Autosize

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

Ali nment

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

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

Листинг подпрограммы procedure TForml .FormCreate (Sender: TObject)• begin s := False end procedure TForml .ChcckBoxlClick (Sender: TObject); var Index, i, пит : Integer; е: Воо1еап begin if s then Exit; {Если программа снова вызовет процедуру обработки, будет выполнен оператор Exit — немедленный выход из процедуры} s := True; for Index: = 0 to 4 (10 {Оператор break прерывает выполнение цикла} if Sender = Controls[i] then break; «определяется, какой флажок был переключен}

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

{Если значение свойства Checked (Установлен) равно False (Нет), флажок сброшен, а если

Т гие (Да) — установлен. Номер флажка в массиве определяется переменной Index} if not (Controls[Index] as TCheckBox).Checked then (Controls[Index] as TCheckBox).Checked := True {Условие выполнено, если флажок сейчас сброшен, т.е. до щелчка он был установлен} else {Программирование изменения состояния «дополнительных флажков». Текущий флажок уже переключен} begin пит := Index + 1; {Переключение двух следующих флажков} if Index = 4 then пит := (У {Изменение состояния нулевого флажка} {Состояние флажка надо поменять на противоположное}

(Controls[num] as TCheckBox).Checked .= not (Controls[num] as CheckBox).Checked,

{Выполнение проверки на выход за пределы массива} пит := пит + 1; if Index 3 then пит := 0;

(Controls[num] as TCheckBox).Checked := not (Controls[num] as CheckBox).Checked; end; е := True; {Головоломка решена, если установлены все пять флажков} for i := 0 to 4 do е    е and (Controls[i] as TCheckBox).Checked;

{После цикла значение останется равным Т гие, если все флажки установлены} if е then [Головоломка решена; for i := 0 to 4 (10 begin

                  (Controls[i] as TCheckBox).Caption      'По6еда!

(Controls[i] as TCheckBox).Enabled     False; [Отключение флажков; end;

end;

20

«Обычный калькулятор»

-, создать программу, выполняющую деиствия обычного калькулятора. Описание (4,113143  программы

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

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

66

Калькулятор

Введите числа и нажмите кнопку выбранного действия

Первое число      Второе ЧИСЛО     Результат

 

ПЧИСТИГЬ

 

закрыть

Рис. 41.

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

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

procedure ТЕогп11.Foa11CrcatcfSender TObjcct); 1;yegin

Edit3 Text -

procedure hegin

end,

procedure TForm1.Butt0116Click(Sender TOhject); begi'j' end,

procedure ТРогп11.Butt0I11C.lick(Scndcr: TOhject}•, 1;yegin

Ь .= StrToFloat (Edjt2.Text}•,

end, procedure ТЕогп11.Butt0I12C.lick(Scnder: TOhject};

59

heg:in а := (Editl-Text);

Ь S1TToFloa( (Edi(2.Tex1};

= FtoatTo„Str end,

heg:in

end,

ТОЪјес1У* heg:in а := (Editl-Text);

Ь S1TToFloa( (Edi(2.Tex1}; ifb = 0 then Edit3.Text := 'division бу иго“ begin

end„ end,

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

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

Калькулятор                                66

ВВЕДИТЕ числа и НВЖМИТЕ кнопку выбранного действия

Первое число        Второе число        Результат

 

ачистить

 

закрыть

Рис. 42.

Фрагмент (для вычисления функјлјпт ifEdit1. Тем ” then

[tegin а := StrToF[oat (Editl.Text); с := cos

if Edit:2.Tcxtthen


hegin

Ь := StfToFloat (Edit2.Text); с : cos          end

= FtoatTo„Str

Добавить на форму кнопки        вычисления функций Tg(x), Log Ф.

2. Создать программу, выполняющую леревод чисел гв десяткчноГ' системы счкс.ления в двоичную систему обратно.

 

 

 

       Десятичная сис. счисления                                         ДВоИчНо гис. счисления

 

34

       Двоичная сиз. счисления                                           Десятичная сис. счисления

 

1П1П1 Ш1

 

Иеаг

 

43

21

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

штана

1.      


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

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

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

ТОЪјес1У* begin

procedure TForm1.Button3Click(Sender TOhject); begin

procedure “I“Forml .Button4Click(Sender: hegin s:=Edit1 .Text;

Copy(s,p,l), s I .=copy(s,p,l);

end

procedure TForml .Button5Click(Sender: TObject); begin

r: =Edit9. Text, a:=Pos(r,s); edit 13. end,

procedure TForml .Button6Click(Sender: TObject); begin s:=editl. Text;

end,

№ 22

Нахождение индекса в массиве случайных чисел

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

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

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

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

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

Таблица 22.

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

Вкладка окна

0Wect Ins ector

Имя свойства/ имя события

Действие

Form1

Properties

Caption

Установка имени формы «Новый п оект»

Events

0nCreate

Очистить значения свойств Тем текстовых полей

Button1

Рто erties

Са tion

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

Events

0nclick

Очистить значения свойств Text текстовых полей

Button2

Properties

Caption

Введите название «Закрыть»

Events

0nclick

Обработка события закрытия о мы

Button3

Properties

Caption

Введите название «Найти первый индекс»

Events

0nclick

Обработка события нахождения индекса введенного числа

Button4

Properties

Caption

Введите название «Ввести сл чайным об азом»

Events

0nclick

Ввод массива случайным образом

Edit1

Properties

Caption

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

Edit2

Properties

Caption

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

Edit3

Properties

Caption

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

4.      Введите переменные ik К, i : integer; s : string; а : array [1. 15] of integer

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

Листинг программы procedure Tform 1 .FormCreate(Sender: ТоЬј ect); begin

Editl. ТеМ Edit2.Text Edit3. end; procedure Tform .Button Click(Sender: ТоЬј ect); begin

. Text Edit2.Text Edit3. end; procedure Tform 1.Button2Click(Sender: ТоЬј ect); begin close•

end, иге “1“form 1. Button3Click(Sender: Tobject); hegin

К .= StTT0111t (Edit2.Text); For То 15 do ifk = a[i] Теп ik := i; ifik О then Edit3.Text — питЬег uhsent'

end, иге “1Тогт 1. Button4Click(Sender: Tobject); hegin randomize•,

 to 15 do begin j•ajjd01jj (26); s := concat IntToStr (a[il), #32); епа

Editl TexT end, end

Вид проекта по действиям:

 

Form1

Ввести случайным образом

Массив

Чисто

Вывести номер числа или сообщение Пб еги ошибке

               ОЧИСТИТЬ                                                        закрыть

 

Form1

Массив

Число

Вывести номер числа или сообщение об его ОШИбКВ

          очистить                                    закрыть

1)

Form1

Ввести случайным Образом

Массив

1 :3 1 ш 17 15 12 17 22 1 24

 

15

 

Нвћи первый иещекс

Оспо

Вывести номер числа или спобщение аб его ошибке

               ПЧИСТИТЬ                                                        закрыть

Form1

Массив Ввести случайным образом 1

1 в 1 10 17 15 12 17 22 1 24

Число

Вывести номер числв или спобщение Пб его ошибке

Б

               ОЧИСТИТЬ                                                        закрыть

З)4)

Ряс- 45.

№ 23

Находение минимального и максимального числа в массиве

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

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

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

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

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

Таблица 23.

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

Вкладка окна

0Wcct Ins cctor

Имя свойства/ имя события

Действие

Form1

Рто erties

Са tion

Установка имени

о мы «Поиск»

Events

0nCreate

Очистить значения свойств Тем текстовых полей

Button1

Рто erties

Са tion

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

Events

0nclick

Очистить значения свойств Text текстовых полей

Button2

Properties

Caption

Введите название «Закрыть»

Events

0nclick

Обработка события закрытия о мы

Button3

Properties

Caption

Введите название «Поиск»

Events

0nclick

Обработка события нахождения минимального и максимального чисел во введенном массиве

Edit1

Properties

Caption

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

Edit2

Properties

Caption

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

Edit3

Properties

Caption

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

4.      Введите переменные s, ss: string ; а: array [1..15] of integer; 1, .ј, К, тах, min, р, code : integer.

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

Листинг подпрограмм procedure Tform 1 .FormCreate(Sender: Tobject); begin

Editl. ТеМ Edit2.Text Edit3. end;

procedure Tform .Button Click(Sender: ТоЬј ect); begin

Editl. ТеМ Edit2.Text Edit3. end;

procedure Tform 1.Button2Click(Sender: ТоЬј ect); begin close•


end,

 ТоЬјест): heg:in

.Text; s := concat

*yl'tilc Lcng1h(s) О Ио begin

•end мах := Forj

лт1л := а[1]•

Forj     1 if [11in aLil then [11in

Edit3-Text := lntToStr (птах);

ГМ(т2 Техт end,

 

 

 

Поиск

массив

Минимальный элемент Максимальный элемент

 

ПОИСК

 

 

ОЧИСТЛЬ

 

звкрьггь

рис. 46

24

«Текущее время текущая дата»

 работы -, создать программу, которая выводит текущее время текущую дату Описание (1,113143  программы

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

2 Разместить на форме экземпляры комлонентое: Button Edit, 1-.*hel.

3. Вы (дол действия

Таблица 24.

 

Forml

 

erties

 

 

Установка имени

мы «Тайме »

ButtonI

Р

erties

Са • ол

Введите название «Тех щее в емя»

Events

0nclick

Button2

Propenies

Captjon

Введите «Текущая дата»

Ever.ts

(.)wclick

EditI

Propenies

Caption

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

Edit2

Properties

Captjon

Очистятъ значение свойства Тем

 

Таймер

 

ТЕКЧЩЕЕ время

 

Т ВКЧЩВЯ двтв

 

 

Таймер           

 

 

 

Т ВКУЩВВ время

1 Б: 24:34

 

Текущая дата

 

Рис. 47

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

DateTimc : TdateTimc;

 ТоЬјест); heg:in

end,

proced иге Тогп1 Т. Buttor12C.lick(Sender 'Tobject);

1;yegin

end, end paóora 25

«Ðnewrpoum,ae qacbl•»

1.1e.Nb paó0Tbå         nporpaMMY fOneKTp•0HHbte qaCEA», B 0K}ie: woropoii oroópa3Kae•rcq meKyuaee apex"Ç At:ra gem, ueae-ll".

 

Bperaq

 qereepr

P„c. 48.

01"'caH1'e onatta pmpaõ0TK'/4 nporpaMMb1

3.

3.4. [Ipoueaypa FormTime oópz6aTbtazeT C06b1Tl•e Paint

3.5. lÄpoueaypa 'TimerlTimer oópaöaTbtaae•T c'trnaJ1 Tantepa.

3.6. [Ipoucuypa FormCreate oõpa5aTb1BaeT C03b1T"C OnCreate.

unit Unit], interface

uses

Windows, Mess-ages, SysL't11s, Variants, Classes, Graphics, Controls, Forms,

Dialogs StdCtrls, ExtCtrls; type

Timer]: TTimer;

Label]: TLabel; // apeMA

Labe12       // procedure TimerlTimerCSender: TObject); procedure FormCreate(Sender: TObject); procedure FormPaint(SeJ1der: TObject); procedure ShowTime;

{ Private declarations public

{ Public declarations end;

var

Farml• TForml; implementation


const stDay : array[l..7] of string[l l]

, 'BTOPHHK'

' cpena' , 'qeTBepr' , '1MTHHua', 'cy 660Ta')

{$R *.dfm} procedure TForml. ShowTime; var Time : TDateTime; // TeKY1uee Bper:vlfl begin

Time := Now(); //  CHCTeMHoe Bperqq

Label I Caption := FormatDateTime('hh:mm:ss',Time)• end

procedure TForml. Timer I Timer(Sender: TObj ect)• begin

ShowTime; // OT06Pa3HTb end

procedure TForml .FormCreate(Sender: TObject); var

Present: TDateTime;     // TeKY1uaq naTa H BpeM¶

Year, Month, Day : Word; // non, MeC¶U H HHCJIO, KaK // OTAeJ1bHb1e qucna begin

Present:= Now; // 110JIYHHTb TeKY1-uyk0 nay

DecodeDate(Present, Year, Month, Day);

Labe12.Caption := 'CeroAH¶ '+1ntToStr(Day)+ stMonth[Month] + ' '+  rona, '+ stDay[DayOfWeek(Present)];

// HaCTPOHTb 3anyCTHTb Tañrqep

Timer I Interval := 1000; // nepH0A CHFHaJIOB Tañrqepa I c Timerl Enabled True; // nycK Tañrqepa end;

procedure TForml .FormPaint(Sender: TObject); begin

ShowTime; // OT06Pa3HTb qacbl end;

end.

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

Графика

Для рисования статлчных рисунков используется компонент PajntBo.x (панель System). Этот хомпонект размещается ва форме д виде прозрачного пунктткртлзго квадрата, в его пределах можно рисовать. Рясовануе выполняется обращенлем к свойству CTvas (графлчесхая канва) этого комлонента: PaintBox1.Canvas. У него в свою очередь есть СВОЙСТВО Pixels (Pain1I30*l  ко:орое представляет СОБОЙ матрицу. двумерный масскв заданного размера - поточечный образ канвы, каждый элемент - отдельная тонка. В PixetsIj отсчет точек (глкселов экрана) начикается с 0.

Координаты х» у  о'г верхнего угла. есть он считается ТОЧКОЙ с коордкнатой (0, ОХ увеличенле по осл х яде-г слева направо, а по осм у • сверху выв. Для холкрет•гой точки указывается цвет Фуккцмя RGB() формнрует деет комбилацией интенсивностя красного, зеленого и синего (интенсивность задается числом от О до 255). Например, черный • красный •  син•тй •  белый •

Цель работы - создать программуе выполняющую следуюи.ще действкя: Роместгт•гь ка форме компоне•п PaintBox.

2. Затолнттть доступную канву ЗОО красными точками н случайных нажатиям на некоторую кнолк-у-

З Для выхода из программы лесб.ходимо щелкнуть МЫШЬЮ па закрывающей хлопке д строке заголовка.

4. Записать ход в обработчике НЕЖЕТТМЯ.

 

Рисование

Рисование

 

РТС. 49

var i,xey: lntcger; begin randomite; for i := 1 to ЗОО do begin х := ra11dom(lOO)•,

.CajjvasPixels1*vyI end end;

 

 

Ркео•ние

углов

proced иге ТРогп11.Butt0I11 C.lick(Scndcr: TOhj ect}•, vnr           lnteger; bcgin

PaintBox1 .Canvas-Brvsh-Co[or := Pai11tBo.x I 00, 100)); foti := I to 300 do heg:in

У = ra11dom(lOO)•,

PaintBoxl .Cajwas.Pi.xelsIx,yl := спо end;

7. Залолтмтъ хапву случайлммл разноцветными лтмиями раздой  Ливня рисуется с помощью методов (сначала задается начальная точка, готом конечная)•

      ?AintBax1 , Canvas , LineTa              ;

Цвет линни и толщина задактјс.я СВОЙсТВОМ канвы Реп (карандаш). Реј'(.Со1от - лне:• карандаша), Реп. Width • толщина лкнм•т в пиксела.х (го умолчанию • 1).


Puc. 52. fori      I to 300 do begin

PaintBoxl .Canvas .Pen.Color :=

PaintBoxl .Canvas.Pen.Width

X LLL y := randamC100)•, PaintBox I .Canvas.MoveToCx.O; x := randomC100)•, y := randomC100)•,

end

8                                                                                 oöpa30M OKpynu oxpy*lloe-r'l -  c.nyqaii

Ellipse() C

         a 3a.'T'U3ae•rc7                   BHYTP'J UBCTOM                  Brush

 

PhcoBawe

Pitt. 53.

fori 1 begin

        // ager 1.ü'W"lla.              óyayuaero annunca

PainiBox1 Canvas Pen color

PaintBoxl-Canvas-Pen-Width :=

//  m tympellltoc•rot

PaintBoxl Canvas Hrush Color :=

// координаты углов прямоугольника, в который вписывается эллипс х := random(150)• У random(150); х2 := random(150)• у2 := random(150);

/ / вписываем эллипс

PaintBox1 . Canvas . E11ipse (х, у, х 2, у 2) ; end ;

9.      Сделать канву на весь экран. Заполнить разноцветными прямоугольниками в случайных позициях и случайных размеров с помощью FillRect()

10.  Создать графический образ так называемого множества Жюлиа. procedure TForm .Button Click(Sender: ТОЬј ect); var  : REAL

: INTEGER,

// вывод точки заданного цвета procedure PUTPIXEL(x,y,c:Integer); var сс: TColor• begin case с mod 8 of

О:сс.=clBlack; 1 :сс.=clRed,

2:cc:=clLime,

Yellow;

5:cc.=clFuchsia, б:сс.=clAqua;

end;

PaintBoxl.Canvas.Pixels[x,y]   сс; end; procedure QWA begin

end, procedure I<UB; begin

end

Begin

КЕРЕАТ КО;

Т RE*RE > 50 then break;

   if > 50 then break

UNTIL V if ( ABS(RE) > 10 ) or ( ABS(M) > 1000) then begin

end

UNTIL X>320

End;

                                                                    paóora       27

«OJ111MnniicR"ii

paõ0Tb' - c:03aaTb nporpaMMY, xo-ropas     110BepxHocT'1 •:þOPMb] pHcye•r rbnar

 

Onn.lnhaaa

P"C. 54.

nporpaMMb1t unit Unit],

interface

uses

Windows, Mess-ages, SysLtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs

type

L classCTFonn) procedure FormPaint(SeJ1der: TObject); private

{ Private declarations public

{ Public declarations

var

Forml• LTForm l ;

implementation tSlQ *.dfm}

procedure TForm1 .FormPaintCSender: TObjectJ; begin with Canvas do begin

// aOJtOTHltme

Canvas.Pen.Width := 1

Canvas.Pen .Color := c] Black;

Canvas.Brush.Color := clCream;

        Pen.Width      2

        Brush. Style  bsClear• // 06naCTb BHYTPH Kpyra

// He 3aKpa111HBaTb

Pen.Color := clBlue

Pen. Color := clBlack;

1 10,80);

Pen. Color := clRed,

140,80);

Pen. Color := clYellow;

Pen. Color := clGreen

125, 105); end end

end

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

«Узоры»

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

1.      После запуска программы в окне изображаются рисункк, созданные самой лрограммой ло заранее заданным правилам.

2.      Картинка ОбНОНЛј;ејС.Я «сама собой». Интервал таймера может быть любым. Он зависит от компьютера. на котором работаег программа.

З. Для выхода из программы необходимо щелкнуть МЫШЬТО да №крывајощей ктогке в строке

Рис. 55.

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

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

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

З Область рксоватштя представить в гл.де клеток (точек или пикселов). Каждая клетка тго;рацддена н свой лне:•. В ходе  грета мен;нтгс.я.

4 Описать предварительно константы в окне кода пред ключевым словом:

Соты size 40; csize 12;

                             Colors: array [1..16]                  =

(clRed, clCiray. c(Fuchsia. с1Теа1г c]Navy, с[Магоопе c[Limc,     c]Pwple, c]Silyer, c]Aqua,

Кокставта size задает число клеточек ло каждому лалрадлетмто, кокставта csize — число используемых цнегон. Массив C010TS  определяет цвета

В разделе оплсанкй лосле ключевого слова var описыв.ается массив клеток Points: array[l.-size, I -sizel of1nte t•er, 5 Выполнкть следующие действия:

Таблица 25

объект

 

Form1

р C1•tie.s

Са ion

Установка имени

о мы «Узо

EveI1ts

0IICTeate

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

Pai“tBox1

Svs1e111}

Eoperties

Hei

Задать значение 320

Width

Задать значен№е 320

П одолжение таблицы 25

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

Вкладка окна

0b ect Inspector

Имя свойства] имя события

Действие

 

 

Canvas

Свойства и методы этого свойства обеспечивают рисование.

Метод Rectangle рисует прямоугольник с заданными вершинами. Цвет контура задается свойством Pen.Color, а цвет зак аски — свойством Brush.Color.

Timer1

(Вкладка System)

Properties

Interval

Задать значение 100 (одна десятая сек нды

Events

0nTimer

В созданной процедуре-заготовке

Timer1Timer описать переменные с (color), ир (ИР), d (down), (left), (right). Новые

значения цветов записываются в отдельном массиве NewPoints. Написать п авила, по кото ым б д т меняться цвета.

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

Листинг подпрограммы procedure TForml .FormCreate (Sender: TObject)• var i, j : Integer; begin

Randomize; for i 1 to size do {инициализация массива пикселов} for i 1 to size do

Points[i, .j] 1 + Random (csize); {Минимально возможное значение элемента массива равно l } end procedure TForml .Timerl Timer (Sender: TObject)• var i, j : Integer• с, 1, г, и d . Integer newPoints: array [l..size, l..size] of Integer• begin

{Вычислить, какого цвета будет клетка на следующем шаге} for i to size do  to size do begin с := Points[i, .ј] + 1; {Вычисляется «следующий цвет» и запоминается в переменной с} if с > csize then с Г, Мосле последнего цвета идет первый}

{Вычисляются индексы для клеток, примыкающих к данной сверху, снизу, слева и справа. Края узора как бы «склеены» друг с другом}

ifu 0 then и size;

ifd > size then d :=

                         ifl 0 then 1            swe•,

if r > size then .1

newPoints [i, ј] := Points [i, ј]; {Если среди «соседей» цвет отсутствует, то клетка остается без изменении

{Если хотя бы один из «соседей» имеет такой цвет, клетка перекрашивается} if (Points [и, ј] = с) or (Points Щ, ј] = с) or (Points [i, 1] = с) or (Points [i, r] = с) then newPoints [i, ј] с; end с — 320 div size; {Выбирается размер клетки так, чтобы узор занимал, по возможности, всю область рисования} {Обновляется узор на экране} for i to size do forj to size do begin

Points [i, ј] := newPoints [i, ј]

{Настроить цвет контура прямоугольника и цвет закраски}

PaintBox1 .Canvas.Pen.Color := Colors[Points[i, ј]]

PaintBox1 .Canvas.Brush.Color := Colors[Points[i, {Выполнить рисование}

PaintBoxl.Canvas.Rectangle (c*(i - 1), с*(ј - 1), c*i

{Параметры метода Rectangle подобраны так, чтобы между клетками оставался небольшой зазор. Чтобы клетки располагались вплотную друг к другу, заменить

(c*(i - 1), с*(ј - 1), c*i  1) на (c*(i - 1), с*(ј - 1), c*i , с*ј } end end


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

Перемещение рисунка

Цель работы • создать программу, в которой на поверхности окна перемещается случайным образом изображение веселой рожицы. Пользователь сделать щелчок кнопкой мысли по язображхюпо. Программа должна заверижть работу после тогое как пользователь сделает 10 щелчков кнопкой мыши.

Начало ИГРЫ  по нажатию на кнопку ОК.

Свойство !VordWrGp компонента Lubel — гчятзнак того. что слова, которые не помеща•отея в текущей строке, автоматически лерелосятся ла следуощујо строку (значевтке свойства ДОЛЖНО бьг•ъ

 

Поймай смешинку

По зкрвну перемещается картинка. Задача - щвлквть по картинке левой кнопкой мыши. Цель - максимальное количество попаданий

 

 

 

Поймай смешинку

 

Поймай смешинку

 

 

 

 

 

Project1

Щелчков: 10, Попвдвний: 9.

 

Рис. 56.

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

unit interface

uses

Windows,  SysVti1s, Vafiants, Classes, Ciraphics, Contf01s, Forms, S1dC1tls.

(УРС

•TFoa111 = class{TFofT11) Timer: TTimer;

ТГаЪе1; Buttor11: TButt011; procedure TimerTimer(Sender:

ТОЬјес(ј; procedwe      TObject; Button: T,MouseButton;

Shiti: “I“ShiftState; Х, У: lnteger); proccdure Винол           TObject)l pivate

P1iva(e     } puhlic

{ Public declarations }

{ 06bflBJ1eHHe npouenyp 110Me1-ueH0 crona,

HT06b1 npouenypbl HMeJIH       AOCTyn K             Ha KOTOPOñ OHM pucyroT}

procedure PaintFace (x,y: integer); {pucyeT po)KHLIY} procedure EraseFace(x,y: integer); {cTHpaeT po)KHuy} end

var

Forml: TForm1 fx,fy: integer; { KOOPAHHaTb1 PDKHUb1} n: integer; p: integer;          { KOJIMqeCTBO nonanaHHñ}

implementation

{ pucyeT po)KHuy} procedure TForml .PaintFace(x,y: integer); begin

Canvas.Pen.Color := clBlack; { UBeT JIHHHM} Canvas.Brush.Color := clRed; { UBeT 3aKpacKH} { pucyeM PO)KHuy}

    Canvas.Ellipse(x,y,x+30,Y+30)•      { JIHuo}

Canvas.Ellipse(x+9,y+10,x+l l,y+13); { .neBb1Ï1 rna3}

Canvas.Ellipse(x+19,y+10,x+21,y+13); { npaBb1Ï1 rna3}

Canvas.Arc(x+4,y+4,x+26,y+26,x,y+20,x+30,y+20); {YJ1b16Ka} end

{ cTHpaeT PO)KHuy} procedure TForml .EraseFace(x,y: integer) begin

{ 3anaAHM 1-1BeT rpaHHL1b1 H 1-1BeT 3aKpacKH, comuanarouwñ C UBeTOM

{ Flo YMOnqaHHkO UBeT (þopMb1 - clBtnFace } Canvas.Pen.Color := clBtnFace; { UBeT 0Kpy)KHocTH}

Canvas.Brush.Color .= clBtnFace; { UBeT 3cmcpacKH}

Canvas.Ellipse(x,y,x+30,y+30); end;

{$R *.dfm}

procedure TForml. TimerTimer(Sender: TObject); begin

EraseFace(fx,fy);

{ HOBOe INOJIO)1œHHe PO)KHUb1} fx:= Random(ClientWidth-30); { 30 - 3T0 nuaMeTp PO)KHUb1} fy Random(ClientHeight-30);

PaintFace(fx,fy); end; procedure TForml .FormCreate(Sender: TObject); begin

{ ucx0AHoe ITOJIO)KeHHe PO)KHUb1} fx:=100

Randomize; { HHH1-U1aJIH3aUH¶ reHepampa CJ1yqañHb1X qucen} end

procedure TForml .FormMouseDown(Sender: TObject; Button: TMouseButton,

Shift: TShiftState; X, Y: Integer); begin inc(n); { KOJI-BO 11ÅeJIHKOB}

if (x > fx) and (x < fx+30) and (y > fy) and (y < fy+30) then begin

{ 11ÅeJILIOK no pmKHue} inc(p); end if n = 10 then begin

{ urpa 3aKOHqeHa}

Timer.Enabled := False; { OCTaHOBHTb TañMep}

ShowMessage('II-leJIHK0B: 10. IlonanaHHñ: ' + IntToStr(p)+'.');

EraseFace(fx,fy);

Label 1 Visible True,

Button I. Visible := True,

{ Tenepb KHOFIKa H c00611ÅeHHe CHOBa BHAHb1} end end

procedure TForm I Button I Click(Sender: TObj ect); begin

   Label I. Visible False; { CKPb1Tb c0061-ueHHe}

    Button I. Visible False; { CKPb1Tb KHOHKY}

Timer.Enabled        True; {            TañMepa} end end.

83


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

Рисунок

Цель работы - создать программу, выводящую на форму пр•тведенный ниже рисунок. По палатка» на клавишу «Лучи» происходит смела валравлелия лучей. Измеглтгь программу так, чтобы лучи изменяли награытения без нажатия клавш.ии.

Рисунок

 

 

Sky & Sun

Лучи

 

Рис. 57.

Добавьте в форму  1mage Втоп-

2. Создайте обработчик события нажатия. Важнейшгттм сВОЙСТНОМ Image является свойство Cawvas:TCawvas (холст). Это свойство само объектом. У Canvas есть методы и свойства. Это свойства и методы рисовавкя ид холсте.

*         Реи: Треп (перо» рттсон,ание ЛИ НТТЙг фигур и  мером. Важнейим•е свойства пера — Color- Тсо]ог (цвет), Width: lnteger (ижркна), Style: TpenStyle (стиль).

*         Bf“fi.Sh: 'J'brvjs1j (КиСТЬ); закраска фигур. заднејх• фона надписей тн.

Важнейиже свойства кисти — Со]ог: Тсо]ог (цвет), Style: T'hwshSty[e (СТИЛЬ).

*         Кот: 'l“font (шрифт): падлисл па. холсте дылолляјотея с учетом значений его свойства F01't( При этом задний фон за  закраигивае•ся текущим значением КИСТИ Для того чтобы закраст не быле* нужно установњть прозрачный СТИЛЬ кисти: Bmsh-Sty[e Ь$С[еат, во затем пе забудьте сделать кисть непрозрачной: Brush.Style bsSotid, иначе фигуры, которые вы будете в дальнейшем рисовать, тОже окажутся незакраијеннымл. Важнейим•е свойства шрифта — Миле: string (имя), Size: 111teger (размер), C.olor: Тсо[ог (цвет) Вы также ислользова.“ји два метода

*         Reetangie(Xl, У 1, Х2е II1teger) (прямоугольнлк): рисует прямоугольник, закраижвая его кистью и обводя пером (в нашем случае, того чтобы рамки не бЬIЛО НЈТДНО* мы сделали кисти и пера  В качестве параметров задаются координаты верхнего левого .Xl* и нижнего правого Х2е углов относительно верхнего левого у гла холста.

 У: ln1ege(. CO(jS1 ТРУТ: S11'i1jg) (вывести текст): рисует текст согласно заданному шрифту и закрашивая задний фон согласно заданной кисти (в нашем случае эта закраска незаметпа, поскольку текст рисуется на том же фоне, что и текущее значенке КИСГЈТ) В качестве параметров задаются координаты верхнело угла текста Х. У ОТНОСиТ"ЛЬНО верхнего левого угла холста и текст НЕДПКСГ] Тем.

3         Нарисуйте градиентно закрашенное синее небо отдельными линиями, каждую следующую линию рисуя более светлой. Таким образом, рисование выполняется в цикле. Необходимо определить локальную переменную. В цикле меняются значения цветов устанавливается перо в точку и чертится линия из этой точки в другую.

        MoveTo(X, У: Integer) (передвинуть перо): передвигает позицию пера в точку холста в координаты Х, У. При этом на холсте ничего не рисуется;

        LineTo(X, У: Integer) (чертить линию): чертит линию из точки, в которой находилось перо, в точку Х, У, используя текущее перо. При этом перо тоже перемещается в эту точку .

Местоположение пера хранится в свойстве холста PenPos: Tpoint. Запись в эту переменную полностью эквивалентна вызову метода MoveTo. Цвет можно задавать, используя константы цвета clBlack, clNavy, clGreen и т.д. полный список констант находится в выпадающем списке свойства Color в Инспекторе Объектов. Цвет также можно задать, используя функцию RGB (Red, Green, Шие: byte), в параметрах Red, Green и Blue указываются значения интенсивности красной, зеленой и синей компоненты цвета (от 0 до 255 каждая).

4         Добавить на небо солнце. Нарисовать эллипс с линиями-лучами. Лучи нарисовать случайным образом, для этого необходимо использовать генератор случайных чисел. • Круги и эллипсы рисуются с помощью метода холста Ellipse(Xl, У 1 Х2, У2: Integer) Как и прямоугольник, эллипс закрашивается текущей кистью и обводится текущим пером. В качестве параметров Х 1, У 1 Х2 У2 необходимо указать левый верхний и нижний правый углы прямоугольника, в который «вписан» эллипс. Если У2 — У 1 = Х2 — Х 1 (то есть прямоугольник является квадратом), эллипс рисуется как круг.

 Датчик случайных чисел — функция random выдает число типа double в диапазоне от 0 до

5. Нарисовать облака. Можно воспользоваться картинкой из файла. Нарисовать в стандартном редакторе Paint облако: а) установить атрибуты картинки — ширина 100 высота 50; б) закрасить картинку черным цветом этот цвет в программе будет прозрачным; в) нарисовать облако, используя инструмент Распылитель и различные оттенки серого; г) проследите, чтобы левая нижняя точка картинки осталась черной (именно по этой точке автоматически определяется прозрачный цвет) 6 Сохранить картинку в файл.

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

8        Добавить компонент Timer. Установите его интервал 100.

9.      На вкладке событий Инспектора Объектов напротив события 0nTimer в выпадающем списке выберите имя обработчика события ButtonlClick. Таким образом устанавливается уже существующий обработчик для еще одного события.

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

11.  При рисовании часто требуется использовать более сложные объекты, чем просто комбинации линий прямоугольников и эллипсов. Может возникнуть необходимость использования готового растрового изображения. Кроме того, может понадобиться копирование изображения из одного lmage на другой. Для этого используется метод холста Draw(X, У: Integer; Graphic: Tgraphic). Этот метод практически копирует графический объект на холст в область с координатами верхнего левого угла Х У. Графическим объектом Graphic могут быть битовые картинки, иконки и метафайлы. Для нас важным является его применение к копированию картинок из одного Image в другой. Это делается следующим образом:

85

ImageA. Canvas.Draw(X, Y, ImageB.Picture.Bitmap)

I-IPH 3TOM Bce, I-ITO HapHCOBaH0 Ha ImageB, 6yneT CKOflHPOBaHO Ha ImageA. ECJIH ImageB. Transparent = true, TO KaPTHHKa KonnpyeTcq c np03paHHb1M

BMecT0 ImageA H ImageB COOTBeTCTBeHHO HOACTaBbTe HY)KHb1e Bap„l HMeHa KOM110HeHTOB, B Bameñ nporpaMMe:

Image l. Canvas.Draw(130 + random(2), 20 + random(2), Image2.PicÍure.BiÍmap);

Image l. Canvas. Draw (100 + random(2), 50 + random(2), Image2.Picture.Bitmap); Image l. Canvas.Draw(170 + random(2), 80 + random(2), Image2.Picture.Bitmap);

TaKHM 06pa30M,    PHCOBaHH¶ MO)KHO HCflOJ1b30BaTb JIF06b1e KaPTHHKH (þañna — 06naKa, AOMHKH, nepc0Ha)Keñ, noroTur1b1 H T.n.

JIucT11Hr nporpaMMb1

procedure Tform I Button I Click(Sender: Tobj ect); var i:integer; begin

Imagel Canvas.Pen.Color := clGreen

Imagel Canvas.Brush.Color := clGreen

Imagel. Canvas. Rectangle((), 200, 300, 300);

Imagel. Canvas Font. Color      clWhite,

Image I. Canvas.Font. Size     30

Imagel. Canvas.Font.Name ' Ari al Image I. Canvas. TextOut( 10, 250, 'Delphi for i := 0 to 200 do begin

    Imagel. Canvas Pen. Color     RGB(I, 1, 255);

Imagel Canvas.MoveTo(0, 1)

Imagel Canvas.LineTo(300, i) end

Imagel Canvas.Pen.Color := clRed•

Imagel Canvas.Brush.Color := clYellow

Imagel.Canvas.Ellipse(20, 20, 60, 60) Imagel Canvas.Pen.Color := clYellow for i           1 to 20 do begin

Imagel Canvas.MoveTo(40, 40);

Imagel Canvas.LineTo(5 + random(70), 5 + random(70)); end; end; end.

Практическая работа 31 графики

Цель работы создать программу лостроения графкка, в которой устанавливается масштаб, в дккле осуществляется построе•лте графика функции, рисуются оси координат печатаются на НИХ числовые шкалы.

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

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

2.      Разместить на форме экземпляры компонентов: кнопка Butt0't область рисования PaintBox-

3.      следующие действия

Таблица 26.

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

Действие

 

Pj•pej'Ties

Сар(Јоп

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

Button1

р Cl"tie.s

Са ion

Введите название «Г

 

Ever.ts

0nclick

Написать процедуру, рисующую кк по точкам

PaintBoxl

Properties

Canvas

Соединенке ЛИНКЯММ получаемых точек

Button2

Propenies

Captjon

Вдедттте назвалие «Выход»

Even1s

 

 

4 Сохраните ('јроек•г, и протестируйте ело.

Листинг программы иге “1“Forml .Buttonl Click(Sender: Tobjecti

function var c:integer•, hegin

end,

heg:in

PaintBoxl

1. Canvas.LineT0(410, 150) x:=0 for x:=0 to 350 do begin

PaintBox I. Canvas.LineTo(x, f(x)+150) end end

procedure Tform I .Button2Click(Sender: Tobj ect); begin

Close, end end

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

«Градусник»

Цель работы - создать программу, которая лереводкт  температуры по Цельсию в значения температуры по Фарелгейту. Введите графический обккт кзображевия значен температуры .

1.      Поместите на форму два поля ввода Edit 1• четыре кнопки.

 

Градусник                                                           66     

 

122

ФаренгеКг

па Цельсию

П чистить                                                      Звкрьть

Рис 59.

2.      Ввести чкс.ло в левое поле. По накатно на кнопку «по Фаренгейту» в правом лоле преобразованное число. По нажатию  очищаются (золя ввода.

З Огратмчьте вводимые температуры диапазоном от ТС до (если дведело значевке, 2 Т 2 • то (ЗРИ  кнопки в (голях неода должно отобразиться ТОО и 212 соответственно).

4.      Отобразить столбик термометра графкческк. Добавьте комлоленты

5.      Сделать видимой ТОЛЬКО гу кнопку.       ореобразонания.

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

unitU1jitl; interface

Windows± Messagese SysUtils. Vaiants, Classcs Graphics, Cor.trols, Еогп15,

Dialogs, StdCtrls, ExtCtrls

type

TForm1 = class(TForm) Editi: TEdit

Edit2: TEdit

Button I : TButton, Button2: TButton,

Button3: TButton,

Button4: TButton, Imagel: TImage;

Image2: TImage;

Label 1: TLabel Labe12: TLabel procedure FormCreate(Sender: TObj ect); procedure Button2Click(Sender: TObject); procedure Button I Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject);

private

{ Private declarations } public

{ Public declarations } end var

Forml: TForm1 implementation

{$R * dfm}

procedure TForml .FormCreate(Sender: T Object) begin

Editi. Text

Edit2. Text

Imagel .Canvas.Pen.Color .= clRed•

Imagel .Canvas.Brush.Color := clWhite• Image I . Canvas.Rectangle( 10, I , 23 60); Image2.Canvas.Pen.Color clBlue•

Image2.Canvas.Brush.Color clWhite•

Image2. Canvas Rectangle(10, 1,23 60); end;

procedure TForml .Button2Click(Sender: TObject); var a, b, c : real• begin a StrT0Float(Editl . Text); if (a > 0) or (a < 100) then b 1.8 * a + 32 • if a > I OO then b if a < 0 then b 32• Edit2 Text FloatT0Str(b);

Imagel .Canvas.Pen.Color := clRed•

Imagel .Canvas.Brush.Color .= clWhite

Image I. Canvas.Rectangle(10, 1,23, 360)

Imagel .Canvas.Pen.Color := clRed

Imagel .Canvas.Brush.Color := clRed

Image I. Canvas.Rectangle(10, round(3

Image2.Canvas.Pen.Color := clBlue

Image2.Canvas.Brush.Color := clWhite,

Image2.Canvas.Rectangle(10, 1,23, 360)

Image2.Canvas.Pen.Color := clBlue

Image2.Canvas.Brush.Color := clBlue;

Image2.Canvas.Rectangle(10, end

procedure TForm I Hutton I Click(Sender: TObj ect); var a, c, d : real begin c := StrToFloat(Edit2.Text); if (c > 32) or (c < 212) then d     ( c - 32)/1.8, if c < 32 then d := 0 if c > 212 then d := 100 Editl. Text FloatT0Str(d);

Image2.Canvas.Pen.Color := clBlue

Image2.Canvas.Brush.Color := clWhite

Image2.Canvas Rectangle(10, I , 23 , 3 60) •

Image2.Canvas.Pen.Color := clBlue

Image2.Canvas.Brush.Color := clBlue

Image2.Canvas Rectangle( 10, round(3

Imagel .Canvas.Pen.Color := clRed

Imagel .Canvas.Brush.Color := clWhite

Image I. Canvas.Rectangle(10, I , 23 , 3 60) •

Imagel .Canvas.Pen.Color := clRed•

Imagel .Canvas.Brush.Color .= clRed

Imagel 360), end

procedure TForml .Button3Click(Sender: TObject); begin

Editl . Text

Edit2.Text

Imagel .Canvas.Pen.Color clRed•

Imagel .Canvas.Brush.Color clWhite• Image I. Canvas.Rectangle(10,    60), Image2.Canvas.Pen.Color clBlue•

Image2.Canvas.Brush.Color clWhite•

Image2.Canvas.Rectangle(10, 1,23, 3 60), end;

procedure TForml .Button4Click(Sender: TObject); begin

Close end;

91

procedure TForml .EditlEnter(Sender: TObject); begin

Button2.Visible := true,

Button I. Visible := False end

procedure TForml .Edit2Enter(Sender: TObj ect); begin

Button I. Visible := True; Button2. Visible := False end end

Практическая работа 33 Вывод табличных данных

На одной 413 знаменитых гравюр Альбрехта Дюрера изображен магический квадрат Одним 113 его свойств является то, что суммы ло всем столбцам, строкам диагоналям равны.

Цель работы • создать программу, суммы по столбцам и строкам чисел.

 

 

 

 

 

 

а 16 3 2 13 345 10 11 8

34 9 6 7 12

34 4 15 14 1

Рис. 6! .

1.      Добавлтъ на форму сетку — компонент StringGid. Этот компонент служит для ввода и н таблич нь!х лан ных.

2.      Необходимо ввести данные описать событие реагированл; на их ввод. В свойстве C)ptions устаиоттте пункт лиаче сетка будет доступкой только для чтенгл. Теперь запуске лрограммы МОЖНО ВВОДИТЬ текст.

З. Щелкнув мышкой в Инспекторе Объектов. описать обработчик события 0r.SelectCell, которое вози ккает, когда пользователь выбирает какую-либо ячейку для редактировагмя.

4. Теперь запуске орограммы и выборе ячейки заголовке о столбце и строке ввода.

5 Таким сбразом, в разделе uses возникла ссылка ла модуль Cirids, д котором описаны компоненты сеток. В описания класса формы добавклась переменная — ссылка на компонент сетки, а также опкскнме метода — обработчика события- Сам обработчик уже разделе i1TtplejTten1a1i01j.

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

procedure Tform1.StTingGrid1 SelectCell(Sender- Tohjeci; Асс],            111teger•, war CamSe1ect: Всю]еап)•, hegin

Caption := $Выделена клетка ($ + + + lntToStriArow) + '

CT'td;

В качестве лараметров обработчик получает (кроме Sender) номер столбца, помер Слроктт переменную CanSelec1. которую можно  внутри обработчика. та; ка; она передается как чаг.

клетка

Выделена                 (2:2)

Рис. 62.

Можно, например, залретить выделетме ячеек третьего столбца. Для этого вставьте д этот обработчик еще строчку: CaIISelect := (Acol 3);

В этом случае CM1Select будет равен fa]se, ес.лл Acol = З

7.      Пастрспттн сетку в зависимости ог значения  которые надо объявить н inteface. Теперь при запуске программы сетка имеет размер, заданный в константе, выглядит злачгттельно аккуратнее. Если изменить значение  то лги запуске и размер C€I“kl.f будет соответствующим.

8.      Установить размер сетки согласно значенкн:т констант Кит и cSize, объявленных в interface• const Nll[11 4, cSize 30,

procedure Tf01T111.FormC.rcatc(Sc11dcr: Tobjcct); begin

Pefatl(1ColWid1h

MyG1id Dcfau[tRowHeight := cSize; MyGfld.ColCovnt := Nvm•,

MyGrid-Width :=            * (cSize + 1) + З;

MyGfid.Height := Хит * (cSize + 1) + з;

MyGid.F011t.Size := cSize div 2; end,

 

Выделена клетка(2:2)

 

 

 

 

 

 

пата

 

 

 

 

 

Рис. 63

В приведенном участке кода изменяются ширина 1• высота сеткщ установленные по умолчанию, а также количество строк столбцов сетки. Добадлетме едивткц'*] к мирике каждой ячейки связано с налячлем „линий между ячейками, а добавление тройня ко всем сумме наличием бордюра вокруг сетки. В последней строчке устанавливается соответствую (Лјтй величине клетки размер


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

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

Теперь надо создать обработчик для нажатия на саму форму и описать в нем вызов расчета. Собственная процедура стоит в коде раньше, чем обработчик, из которого она вызывается. Когда описывается собственная процедура, нужно обращаться к компонентам через форму.

При запуске программы требуется ввести числа в сетку и кликнуть на саму форму . Function ColSum(n: integer): integer; var i: integer; begin Result := 0 for 1 to Num — 1 (10 Result := Result + StrToInt (Forml .MyGrid.Cells[n, i]); end;

function RowSum(n: integer): integer; var i: integer; begin Result := 0 for           1 to Num — 1 (10 Result           Result + StrToInt(Form .MyGrid.Cells[I, end;

procedure Calculate var i: integer; begin for I — 1 to Num — 1 (10 begin

.MyGrid.Cells[I, 0]

Forml .MyGrid.Cells[O, i] IntToStr(RowSum(i)); end; end;

В данной программе используется свойство Cells компонента сетки. Это свойство имеет тип двумерного массива строк. Счет в этом массиве начинается с нуля. Фиксированные (серые) клетки, с точки зрения индексирования массива, ничем не отличаются от прочих. В нашем случае фиксированы первая строка и первый столбец (в массиве они имеют соответствующие нулевые координаты). Поэтому при расчете суммы проходят от (а не от 0) до Num — (при индексировании с нуля последний столбец/строка имеют, понятно, номер Num — 1).

Однако, если произойдет ввод какой-нибудь буквы, сразу возникнет исключительная ситуация. Она, очевидно, возникает из-за невозможности перевода буквы в число в функции StrToInt. Если нежелательно, чтобы при возникновении исключительной ситуации программа в Delphi переходила в режим отладки, можно отключить флажок Мепи => Tools => Debugger 0ptions => Language Exceptions => Stop оп Delphi Exceptions. Теперь программа будет выполняться так, как если бы она выполнялась из-под Windows. Теперь каждый раз, когда вводится нечисловой символ, программа не останавливается, а только появляется стандартное окно Windows с сообщением об ошибке.

С помощью обработки исключений можно избежать появления этого окна. Для этого надо добавить в функцию конструкцию try..except. Таким образом «опасная» команда (или целый блок) помещается внутрь конструкции try. .except..end или try..fmally. .end function StrToVal(s: string): integer; begin if S then Result := 0 else try

Result := StrToInt(s); except

Result := 0

Forml .Caption := ' Вводить надо числа! end; end;

Если возникает исключительная ситуация, т.е. введено нечисловое значение, считается, что введен ноль, а также выводится сообщение об этом пользователю. Еще нужно добавить вывод информации, что все в порядке. А также удалить код внутри обработчика Click формы. В результате, если введено неправильное значение, то окно ошибки не появляется, а в Caption формы выводится напоминание.

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

«Игра»

Цель работы - создать программу — игру. Игрок управляет пушкой зенитки, его боевое задание справиться с нашествием воздушных шаров. Воздушные шары несут бомбы, которые они сбросят, как только окажутся над пушкой. Необходимо не допустить этого и уничтожить их все на подлете. Снаряды не ограничены, но следующий выстрел можно делать только после того, как выпущенный снаряд поразит цель, упадет на землю или уйдет из зоны видимости. В игре участвуют:  воздушные шары,  знитная пушка,  пушечный снаряд,  бомба,  внешняя среда.

Для шаров введен специальный тип ТВаПооп., в котором содержатся данные о координатах шара, его скорости, состоянии и цвете. Массив переменных Balloons типа ТВаПооп будет содержать полную информацию обо всех шарах. Индексирование идет, начиная с нуля. Общее число шаров в массиве задается соответствующей константой. Кроме того, к шарам относятся константы, определяющие:  количество шаров,  их возможные цвета,  возможную высоту над землей (всего предполагается четыре уровня)  интервал между шарами и их радиус. type

ТВаПооп = record х, у, у, Explosion: integer; Color: TColor• end; const

BallCount = 10

BallColors: array [0 .. 9] of TColor = (clRed, clGreen clNavy, clMaroon clPurple, clOlive clLime clYellow clFuchsia clSilver);

BallAltitude. array [0 3] of integer = (240 160 200 120);

BallInterval = 40 BallRadius = 15

var

Forml: TForml х, у, vx, vy, ВотЬУ, BombV: double•

Angle, GunPosition, GunExplosion: integer;

Balloons: array [0 .. BallCount - 1] 01' ТВаПооп•

Зенитная пушка описывается переменными:  угол наклона пушки,  ее положение  ее состояние.

Пушечный снаряд описывается переменными:  координатами,  текущей скоростью,

                      начальной скоростью при выстреле

Бомба, сбрасываемая с воздушного шара, имеет:             координату, скорость.

Для расчета положений объектов нужно знать ускорение падения и шаг по времени.

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

Если Explosion 0 - шар боеспособен, если Explosion 10, то он уничтожен, а значения от 1 до 9 обозначают фазы взрыва. Чтобы инициировать взрыв боеспособного шара, нужно присвоить Explosion := 1. То же самое касается и пушки.

Состояние, в котором скорость снаряда равна нулю: 0 и Vy 0. В этом случае считают, что можно сделать новый выстрел. Пока же снаряд летит (то есть скорость его не нулевая), новый выстрел сделать нельзя.

Бомба будет сбрасываться шаром, когда он поравняется с пушкой. Таким образом, Х координата бомбы всегда равна Х - координате пушки. Следовательно, необходимо хранить только У-координату бомбы. Бомба не сброшена, если ВотЬУ = 1000. Если ВотЬУ < 1000 то она считается сброшенной и начинает падать.

Поместите на форму TrackBar, Button, Image и Timer и настройте их параметры.

Timer: Interval = 100; Image: Width = 440, Heigth = 260; Button: Caption = ' Новая игра ' TrackBar: Min = -90, Мах = 90, Frequency = 10.

Image - сражение в реальном времени. Timer - реальное время. Button - запуск новой игры. TrackBar - управление зенитной пушкой.

В обработчике нажатия на кнопку ”Новая игра“ необходимо обнулить параметры, расставить пушку и шары. Для каждого шара устанавливается случайное направление движения: v = 1 или —1. В зависимости от направления, определяется высота, на которой находится шар (на одном и том же уровне шары летят в одну сторону). По х-координате шары расставляются так, чтобы они шли с примерно равным интервалом в направлении пушки из-за границ экрана.

Каждый шар Balloons[i], элемент массива Balloons, имеет тип записи ТВаПооп, и для того, чтобы получить доступ к его элементам, нужно писать: Balloons[i].Explosion := 0 Color BallColors[random(lO)] и т.д. Конструкция with Balloons[i] do begin .. end позволяет избежать повторения.

procedure TForm .Button 1 Click(Sender: ТОЬј ect); var i: integer; begin

Caption := Нашествие';

.Position О;

GunPosition := 170 + random(lOO);

Vx 0,

GunExplosion := 0; for i := 0 to BallCount— do with Balloons[i] do begin

Т random < 0.5 then v у := BallAltitude[l + v + random(2)] + random(lO); х := 220 - v * (220 + i * Balllnterval + random(20)); Explosion := 0;

Color end;

ВотЬУ end;

В обработчик события формы 0nCreate вводится датчик случайных чисел, устанавливается клиентский размер формы (ClientWidth := 455; ClientHeight    з 15;). Размер клиентской области формы в приложениях определяется автоматически как Width и Height формы минус ширина заголовка и бордюров.

procedure TForml .FormCreate(Sender: TObject); begin

Randomize;

ClientWidth := 455

ClientHeight        315

Button .Click; end

Пушка танка будет управляться с помощью компонента TrackBar. Выстрел производится нажатием пробела на клавиатуре. При этом фокус ввода должен быть у TrackBar. В обработчике 0nkeyPress реализуется выстрел, задавая начальную скорость и положение снаряду, а также издавая звук выстрела.

Процедура, проигрывающая этот звук из лучау-файла, описана в модуле, который необходимо подключить в разделе uses. В модуле MMSystem имеется функция PlaySound, с помощью которой можно проигрывать файлы wav. Для асинхронного воспроизведения (приложение не приостанавливает работу на время воспроизведения, а проигрывает его в фоновом режиме) вызов выглядит так:

0, SND ASYNC)

В стандартных звуках Microsoft 0ffrce можно подобрать звуки для выстрела и взрыва. В зависимости от версии программы, эти файлы хранятся в C:\Windows\Media\ Microsoft 0ffrce 2000 C:\Program Files\Microsoft  или в какой-то подобной папке. Найдите звуки для выстрела (условно назовем GunShot.wav) и взрыва (условно назовем Explode.wav) и скопируйте их в папку, в которой сохранен проект.

procedure TForml .TrackBarlkeyPress(Sender: TObject; var Кеу: Char); var i: integer; begin

Т (1<еу         ' ') and (Vx 0) and (Vy 0) and (GunExplosion 0) then begin try

О, SND ASYNC); except end;

Vx       * Sin(Angle * pi / 180); Vy V * Cos(Angle * pi / 180); х := GunPosition + 15 * Sin(Angle * pi / 180); у := 20 + 15 * Cos(Angle * pi / 180); end;

Т (l<ey          then begin


try

O, SND ASYNC); except end; for i := 0 to BallCount - I do if Balloons[i].Explosion = 0 then Balloons[i].Explosion := I

Caption := 'YHHHTO)KeH'•, end; end;

B 06pa60TLIHKe H3MeHeHH¶  6erymca TrackBar MeH¶eM HaKJIOH ny111KH.

procedure TForm I. TrackBarl Change(Sender: TObj ect); begin

Angle := TrackBarl Position, end;

BblCTpeJ1 npoucx0AHT, ecnu:

l) HOKaT np06eJ1,

2)  cHapqn FOTOB (Vx = 0) H (Vy = 0);

3)  11Y111Ka 60ecnoc06Ha (GunExploion = 0).

Ilpouenypa MoveAll, Bb13b1Baervraq TaKT Tarmepa, OTBeqaeT 3a TO, HT06b1 BCe npoueccbl CBOHM HepenoM. BCTaBbTe ee cpa3Y nocne implementation.

procedure MoveAll var i: integer; begin for i := 0 to BallCount - I do with Balloons[i] do if Explosion = 0 then

else begin if Explosion < 10 then inc(Explosion); end; if (Vx <> 0) or (Vy <> 0) then begin x + Vx * dt• Y + Vy * dt;

Vy Vy + g * dt; end; if < 1000 then begin

BombY BombY + BombV * de

BombV BombV + g * dt end; if (GunExplosion > 0) and (GunExplosion < 10) then inc(GunExplosion); end;

IOO

Процедура пододвигает все шары, которые живы (у них Explosion = 0), в направлении вектора их скорости. Остальные шары, если они находятся в фазе взрыва (0 < Explosion 10), переходят в следующую фазу.

Если снаряд выпущен (Vx о 0) или (Vy о 0), то его координата и скорость изменяются согласно законам природы.

Если бомба сброшена (ВотЬУ < 1000), то она также подчиняется закону всемирного тяготения.

Если танк находится в фазе взрыва (0 < GunExplosion < 10), он переходит в следующую фазу.

Ошибки, возникающие в обработчике таймера или процедурах, которые вызываются из обработчика, не останавливают таймер и, значит, через секунду возникают опять. Чтобы их остановить, приходится использовать Ctrl-Alt-Del

В этой процедуре мы работаем с массивом. Одной из самых частых ошибок, которые не так-то просто найти, является выход за границы массива. Для предотвращения подобных ситуаций включите проверку на выход из диапазона допустимых значений (Project => 0ptions => Compiler => Runtime errors => Range checking), которая по умолчанию отключена.

Перемещения сами по себе могли бы продолжаться бесконечно. Необходимо проконтролировать:

   не попал ли снаряд в шар, следовательно, взорвать его;

   не уничтожены ли все шары, следовательно, выдать надпись о победе;

   не поравнялся ли шар с пушкой, следовательно, сбросить бомбу;

   не упал ли снаряд и не вышел ли он из зоны контроля, следовательно, перезарядить пушку;

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

procedure CheckCollisions; var i, .ј : integer;

HappyEnd: boolean begin for i := 0 to BallCount - 1 do with Balloons[i] do begin if (Explosion = 0) then begin if (sqr(x - Unitl .х) + sqr(y - Unitl у) < sqr(BallRadius)) then begin

try

О, SND ASYNC); except end; Explosion := Unitl.x := О

Unitl.y := 0;

Unitl.Vx := О

Unitl.Vy := 0;

HappyEnd := (GunExplosion 0);

 0 to BallCount - 1 do

HappyEnd HappyEnd and (BalloonsLj] Fxplosion > 0); if HappyEnd then

Form 1 .Caption := Победа!'• end;

if (x = GunPosition) and (Bomb Y         1000) and (GunExplosion 0) then begin

BombY y - BallRadius - 5,

BombV O end; end; end; if (y < 0) or (x < 0) or (x > 440) then begin

end if Bomb Y < 10 then begin

BombY 1000 GunExplosion := I try

O, SND ASYNC); except end;

Forml Caption := 'YBbl. end; end;

B 3TOM 6JIOKe B03MO)KHaq 0111H6Ka CB¶3aHa C HCFIOJ1b30BaHneM with . . . do begin . . . end

X-K00PAHHaTa cHapqna xpaHHTC¶ B FJ106aJ1bHOï1 nepeMeHHoÏ1 x, X-K00PAHHaTa B03AY111Horo wapa B nepeMeHHoÏ1 Balloons[i].x. OAHaKO Korna IIHLIIYT KOA BHYTPH with Balloons lil do begin . . . end, TO HMeHHO K KOOPAHHaTe Il-lapa 06pa1-uaK)Tcfl npocT0 KaK K X. ECJIH HY)KHO n06paTbCfl no FJ106aJ1bHOï1 nepeMeHHoñ, TO Tenepb Y)Ke nepen Herl HY)KHO CTaBHTb YT0HHeHHe: Unit I x, rne Unit I — MOAYJI¶.

Puc0BaHHe OTAeJ1bHb1X 3J1eMeHTOB 6aTaJIHH TaK)Ke pa3YMH0 HOMeCTHTb Cne1-uaJIH3HPOBaHHb1e 3Toro npouenypbl.

         XYAO)KeCTBeHHb1e 06pa3b1 wapoB,       H B3Pb1Ba nepenak0Tcq C HOMOLUbkO npouenyp•

procedure DrawBalloon(x, y: integer; Color: TColor)• begin with Form I Imagel .Canvas do begin

Pen. Color clBlack;

Brush.Color Color

Ellipse(x - BallRadius, y - BallRadius, x + BallRadius, y + BallRadius);

Pen. Color clWhite•

Brush.C010r clWhite

Ellipse(x - BallRadius div 2 - 3, y - BallRadius div 2 - 3, x - BallRadius div 2 + 3, y - BallRadius

Pen Color clBlack;

Brush.Color clOlive•

Rectangle(x - 5, y + BallRadius + 5, x + 5, y + BallRadius + 10);

MoveT0(x - 5, y + BallRadius + 5);

LineT0(x - BallRadius, y);

MoveT0(x, y + BallRadius + 5);

LineT0(x, y);

MoveT0(x + 5, y + BallRadius + 5);

LineT0(x + BallRadius, y); end end

procedure DrawGun begin with Form I .lmagel Canvas do begin if (Vx = 0) and (Vy = 0) then

        Pen.C010r RGB(O, 70, 0) else Pen.C010r         clBlack;

Brush.Color := Pen. Color

Pen.Width 5

MoveTo(GunPosition, 240)

LineTo(GunPosition + round(15 * sin(Angle * pi / 180)), 240 - round(15 * cos(Angle * pi / 180)));

Pen.Width 1

Ellipse(GunPosition - 8, 232, GunPosition + 8, 248)

Rectangle(GunPosition - 10, 240, GunPosition + 10, 260) end; end;

Ilpouenypa DrawExplosion 06ecneHHBaeT nocTyn K KOOPAHHaTaM cHapqna.

procedure DrawExplosion(x, y, Phase: integer); var i, xx, yy, Size: integer; a, b: double begin with Form I .lmagel Canvas do for i := 0 to Phase * 10 do begin a := random * 2 * pi• b .= random * sqr(Phase) / 3 + 5 xx := x + round(l * sin(a)); YY y + round(l * cos(a));

    Size     round(sqr(10 - Phase) / 8 + 2);

Pen.C010r  O, 0);

Brush.Color Pen. Color

Ellipse(xx - random(Size) - l, yy - random(Size) - l, xx + random(Size), yy + random(Size)); end; end;

Kporqe Toro, nytmca MeH¶eT UBeT, Korna FOTOB oqepeAH0ñ cHapqn. B A0BepmeHHe, HY)ICHO

COeAHHHTb BCe HanucaHHoe BOeAHHO.

Ilpouenypbl PHCOBaHH¶ B npouenype, pucyrolueñ BCe 110Jue 6051:

06beAVIH¶Tb BCe BMeCTe 06pa60TLIHK Tarwepa.


proced ure OrawB var i: integer, begin with Forml Imagel .Canvas do for i := Oto 259 do begin  div 2, i div 2, 255),

LineTo(44Q i); end; for i := 0 to Ba]lCount • 1 do with Balloons[il do if Explosion 0 then DrawBalloon(x, 260 - y, Color) else if Explosion 10 then  260 • y, Explosion); if CrunEsplosiort LL 0 then else if GunExplosion 1 0 then IDrawExplosion0GunPosilion,

240, GunE.xplosi011L with Forml Imagel .Canvas do begin

Pen. Color := clMaroon; Blush.Color := clRed; if (Vx    0) or (Vy         0) then  - 2, 260 - - 2, round(x) + 260 round(y) + 3); if (Bomby       1000)   Ellipse(GunPosi1ion - 2, 260 - - 2, GunPosition 3,

260 - round(BombY) 3); end; end;

procedure T Form I . Timer I Timer(Sender: TOb' eco; begin

MoveAll

CheckCollisions;

DrawBattleField end;

Pitc. 64.

1 04

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

«Тест»

Цель работы - создать программу, которая тестирует учащегося по лнформатике математике.

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

На (јерм,зй форме оројтсхол•тт регистрация учащегося,

 

Регистрация

Введите Фамилию Имя Отчество

ИВЕНOВ

 

 

ок

 

Сапсе/

Ркс. 65 Фрагмелт программы (№nitl):

procedure ТРогп11.Butt0I12C.lick(Scndcr: TOhject}•, 1;yegin сое: end,

heg:in

1 .Editl .Text;

end,

На второй форме лредлагаетея выбрать один 113 тестов.

начало теста

Уважаемый тестируемый

Иванов хотите пройти тест Р

 

Тест по информатике

 

Таблица умножения

 

Сапсе|

 

Рис.

Фрагмент программы (u11it2):

proced иге TFom2.Butt0I11 СЛ ick(Scndcr: TOhj ect}•, 1;yegin гопјјз ShowModa1: end,

т 05

procedure T Form2.Button2Click(Sender: TOb'ect); begin

Fann2-Close, end,

procedure TForm2.Button3Click(Sender: TObject); begin

Fonn6.Edit2.

Formb.ShowModalt end,

Ha 'TpeTbeii npeurarzercq npoy-rll LTeC'T 110

 

TECT

YcrpcDcrsoBNRCU7â                                  

/A'O.O*KO B ãâDreP                                                                       

 

El aeHLfib

 

B ack

P„c. 67.

toporpa uses Unit4„ Unit2; *.dfm}

proced ure TForm3.Butt0J11 C.I ick(Scndcr: TObj eco; begin k:L01 if CFormYEditl . Text=Y M0H1rrop') or' (Form3-Editl .           or (Forms .Editl. Text='MOHVITOP') then if CForm3.E.dit2.          or (Form; or    then then k: L kv1 Fonn4.Labe12. Caption: =IntTöStTCkL ifk=0 then Form4.Label I -Caption-HOue11b moxo' else ifk LL l then  l .Cap1i01T LL '11aosov else ifk=2 then Fann4-Label if k=3 then Form4.Labell             xopomo';

end,

procedure TForm3.Button2Click(Sender: TObject); begin

Fonn3.Close, end,

J la (l)OPMe  pe3yasrtT nPOMOTpc 0T1*era.

106

OueHKa

2

Xepewe

PHC. OS

cbparMetiT nporpaMMb1 (unit4): uses Unitlt Unit5, Unit-N Unit2;

procedure TForm4.Buttort2Click(Sender: TC)bjec1), begin

Form4.Close•, end,

proced ure TForm4.Buttonl Cl ick(Sender: TObj begin

Form4.Close;

end,

procedure TForm4.ßuttort3Click(Sender: TC)bjecO•, begin

Form5.ShowModal; end,

He c.neaylotneii  11PaBVE1bHb]e OTEœTb1.

npaBhJ1bHble OTBeTb1:                     

1 . MDHI/ITOP

2. KnaavlaTypa

PRC. 69. (artit5): uses Unit4ž Unit3, Unit2, Unit' ; tSlQ *.dfm}

proced ure TForm.S .Butt0111 Cl ick(Sender: TObj eco; begin

Fon•n4.Close•,

FarmYClose; Form2 Closel Form I Close;

107

Ропп5.СЈозе•, end,

Если учащийся лест математикег то ему знания таблииы умноження. На следующей форме случайным образом выбкраются чттс.ла. Учащийся долкеп ввести зкачетме прогвдеденмя в текстовое поле. С ломощь•о кпопхтт «проверка»  правильность введенного ответа- Если ответ правильный, то можно сгенеркровать следующий пример- После нескольких примеров можно проверять свой рейтинг

66

Генерировать

Тест на знание таблицы умножения Сгенерируите числа

72

     8         9    -

проверк

 

 

Ваш рейтинг

Рис. 70 Фрагмент ПРОГРЕТММЫ (vnit6}: uses Vnit7, 1Jnitl,

var

1;yegin

Form6.Labe12 .Caption

F0fIt"6.Edit2.Text — Fom6.Labe16.C.aption:—”; end,

procedure TForm6.Butt0I12C.lick(Scnder: TOhject};

1;yegin if begin

Fom6.Labe16 Caption

end else begin  правильное;

end,

ТОЪјес1У* var c:rea], hegin

Form7.Labe[2.Captj ол    1-Edit1. Тех; ответили на  нолросовг 11:3,   правильно

'+lntToStrtIT1); рейтипг “+1ntToStr(f)•,

if    then     плохо- else if   then Form7.Labe13 ,    оп:       else if с=О.5 then       доучкть“ else if (с>О..$} and (с<1ј then          else if c z l         Сарт{оп -'Молодец!'

Fom7.Show,Modal•, end,

При нажатии на кнопке «Ваш на следуј0(дтей форме (ЈО;ВЛЯ€ГС.Я результаты рентенга. Тестированне можно заверимть-

Рейтинг!!!

Иванов

Вы ответили на 5 вопросов. из них правильно 5

         Ваш рейтинг = 5                        Молодец!

Выход

Рис. 71

Фрагмент программы (vnit7): uses Unit6•,

heg:in

Form7.Close,

end,

Обратите длимапгке ла подключелие модулей в строке Uses. 'Гаккм образом, проясхощгг обращение к соотвсгствуюилсЙ форме. Для отображення формы используется функция funciipn $hpwMQda[; [nteger;

Данная функция лозволяет показывать форму в работе режима дуалога.

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

«Проигрыватель»

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

1. Создать на диске па: ку (например  в которой будет создан проект, скопировать в эту лапку несколько музыкальных файлов клипов Для демолстрацли полноце•шой раооты проигрывателя попадобятся мультимедкйвые файлы 1јјр3. которые МОЖНО найти Н папках. Влдеофайлы:

Аудуофайлы:

2. простейшую программу проигрывания аудиофайлон (см- ттрак•птческая работа№ 10). Для этого поместить на форму кнопку, медиапрокгрыватель, дли:юг загрузки.

З. Настроить фкльтр дналога на файлы мультлмедка, соответственно заполнив таблицу„ У братн ненужные нам кно1!ки ОТКЛЮЧИВ их н Инспекторе Объек-л_-зв (VisibleButtons). В обработчике нажатия на кнопку оплсать загрузку файла.

Рт,с. 73.

0penDiaIog дналог загрузктт

Основное СВОЙсТВО — FileN*Ijje: ОСНОнНОЙ мел_-зд —  При вызове программы метода Executc происходит вывод на экран дна:тога. Параметры вывода определяются свойствами компонента: Title, 0ptionse и др. Если пользователь выберет файл для открытия нажмет - Открыть“, то в свойство FileName компокеита будет заттсаво имя этого файла в формате S(Ti1jgv а результатом метода будет значение Иначег если пользов-атель нажмет в диалоге кнопку ”Отмена”, результат E.xecute будет fa]se, т.е. Execute является булевой фулхцкей.

Medi*Playet— медлапроигрьгаатель

Основное свойство — FileName: sting, основные методы — Нау, Раи. Мор. После того как н СВОЙстВО  помещено имя файла  этот файл нужно открыть с помощью метода Ореп (если установлено свойство АитоОрспе то открытле проксходкт автоматически, по это не всегда хорошо, лоскольку, если FileName не задало или задано неверною при автоогкрнп•итт тлротвойдег 01

Когда файл открыт, он может быть вослроизведен. Это можно сделать с помощью кнопок стого компонелпа, либо метод Play. То же касается остановки паузы методов Stop Pausc. Для настроЙки внешнего вида компонента используется множество свойств, к гркмеру можно скрыть часть КНОПОК, настраивая свойство VjsibleBvttons.

4.                 В обработчике нажатия на 13(I1T01jl вызын„аегся метод диалога  если он выдает результат trve (пользователь выбрал файл нажал ”Открьть-ј. то медкапролгрывателаэ передается имя этого файла файл открывается Телерь пользователь может воспроизвести нажав кноПки проигрывателя.

procetf nre .Buttonl Click(Sender- “ГОЬј hegin if 0penDia[og 1 -Execute then begin

MediaPlaycrl .Fi[eName := 0penDialogl.FilcNa'11c;

,MediaP1ayerl .Ореп; end,

5.                 При запуске  (јолн.зонатель ВиДиТ проигрыватель. Проигрывктель не ЯМЯеТСЯ актлвным, поскольку файл, который он должен воспроизводит» не открыт

form1

Buttonj

- о х

 

Тип Ф.вйлов:

Все Файлы мультимедиа

 

Отмена

 

Все фВЙПЫ мультимедив

Звуковой ФЗйл

MlDl Ф.зйл “.mid

 

23: 1 М

МРЗ Ф.зйл (Х.трЗј Видео Ф.зйл lX.avi

 

Рис. 74.

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

После выбора в музыкальной папке файла при нажатии ХНОЛКИ ”Открыть” происрынатель стал доступным. Файл  МОЖНО воспроизвести ело.

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

б. Проигрыватель. (“OI“OB. Необходимо ОФОРМИТЬ.  интерфейс. Поместнте на форму панель, а на ней раслоложтте компонент lmage, растянутый на всю палелы Добавьте таймер. Сохралите модуль как MainV11it и проект как МуМР1ауег в приготовленную папку

Дайте каждому компоненту подходящее Обработчик кнопки помепяйте согласно  изменениям добанюе растяжение видеоэкрана Для “(“ОЈХ“' видеофайлы воспротвводилттсь не в отдельном окне, а в заданном месте, например, на Pane11, необходткмо соответствуощкм образом усталодить свойство медиалронгрывателя Display. Дл; того чтобы установкть растянуть нужным образом язображенме, нужно установять свойство Di sp[ayRect.

MPlayet nisplayRec1 О, где Rcct(xl, yle у2: — функщт;, преобразующая четыре числа к формату 41“Rect— прямоугольник, а свойство DisplayRect имеет кметмо:зтот формат.

чтобы переименовать компоненты  сВОЙСТВО Najj'te. ! Таслтойте параметры компонентов

TmainF0fIt1

Cap(ion • Мультимедиа-т(роијфыватель

C[ientWidth 402 CtientHeigth = 290

2) LifeTimer: Ttimer

Enabled fa]se

• lf)0

Э) Mct1iaOpcnD[g:

()ptions: otTileExist tme

• Загрузить файл мультимедиа '

LifeImage: Tlmage

Align = alClient

5) Sc«oanel: TPancl

Alig11 = а[Тор

Caplion •

Width

Heigth 252

МемјаОрепВ1п

Captoin = 'Отхрыть'

7) МР[ауег: “I“MediePtayer

Display

VjsihleButtons [btPlay, btPause, btStopl

7. Необходимо создать единую форму для воспроизведения звуковых и видеофайлов. Причем воспроизведение звуковых файлов тоже будет сопровождаться анимацией. В качестве этого сопровождения используется игра ”Жизнь”

Для этого добавим соответствующий ”рассчитывающий” и ”рисующий” код.

Опишем константы, определяющие размер поля, введем новый тип — массив клеток и объявим глобальную переменную этого типа. const

XSize = 40

YSize = 25, type

TLifeCells = array [0 .. XSize -      YSize - 1] ofboolean var

MainForm: TMainForm

А: TLifeCells

Создадим процедуру, случайным образом заполняющую массив. procedure RandomCells• var i, .ј : integer; begin for i := 0 to XSize - 1 (10 forj   О YSize - do  random < 0.5• end;

Это процедура случайного заполнения поля. Булева переменная присваивается логически, а не с помощью условного оператора if random < 0.5 then A[I,j] := true else A[i.j] false.

Создадим функцию, определяющую число живых клеток-соседей у данной клетки. function NumOfCells(x, у: integer): integer; var i, .ј , хх, уу: integer; begin Result for i -1 to 1 do

• -1 to 1 do begin

ifxx -1 then хх := XSize - 1; ifyy -1 then уу := YSize ifxx XSize then хх := О ifyy YSize then уу := 0; if А[хх, уу] then inc(Result); end; if А[х, у] then dec(Result); end;

Это функция подсчета живых соседей. Обратите внимание на переменные хх и уу. Подобным образом реализуется ”сшивка” верхнего и нижнего, левого и правого краев. В конце исключается сама клетка из числа соседей: if А[х, у] then dec(Result); Создадим процедуру, рисующую поле клеток. procedure DrawCells• var i, ј: integer;

1 13

begin with MainForm.LifeImage.Canvas do begin

Brush.Color clBlue

Pen.Color := Brush.Color

Rectangle(O, О, XSize * 10, YSize * 10); Brush.Color := clRed, for i := 0 to XSize - 1 do forj 0 to YSize - do if A[i, ј] then Rectangle(i end; end;

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

procedure TMainForm.LifeTimerTimer(Sender: TObject); var i, ј: integer; В: TLifeCells begin for i := 0 to XSize - 1 (10 forj            О YSIze - do case NumOfCells(i, .ј) of

З:       true, else B[i, Ј]          false end;

DrawCells• end;

Каждый такт таймера пересчитываются живые клетки. Алгоритм игры, как известно, состоит в следующем. Если у живой клетки два или три соседа, то она остается живой, если меньше двух, — погибает от одиночества, если больше трех, — гибнет от тесноты. Рождается клетка, если у нее ровно три соседа. С помощью оператора case реализуются правила. Использование локального массива В необходимо. Если записывать сразу в А, то клетки нового поколения будут также считаться при учете соседей, что недопустимо: каждому свое. В конце, однако, нужно скопировать новое поколение, содержащееся в В в массив А Простые массивы можно копировать присвоением: А В.

Модифицируется обработчик нажатия кнопки под новые задачи. Проанализируйте расширение загружаемого файла, и, если загружен видеофайл, Image становится невидимым, освобождая экран для ролика, в противном случае, наоборот, выводится картинку, на которой идет игра, заполняется поле клеток и запускается таймер. procedure TMainForm.MediaOpenBtnClick(Sender: TObject); begin if MediaOpenDlg.Execute then begin

MPlayer FileName MediaOpenDlg FileName•

MPlayer.Open;

MPlayer DisplayRect Rect(O, О, ScreenPanel Width, ScreenPanel Height); MPlayer Play;

Т ExtractFileExt(MPlayer FileName) - avi' then LifeImage.Visible := false else begin

Lifelmage. Visible := true;

1 14

RandomC.c]ls;

1-ifeTimef.Emabled := true; cntl; end; end;

Экран вывода - растягмваегся” на всю панель. Добавлен автоматлческий запуск воспроизведения. В зависимости от расширения воспроизвод•тмого файла. Lifelmage, на ко:ором происходит - Жизнь“. либо зрячегс.я (в случае v .a№i'), либо выводится (н других случаях).

Рис. 76.

8. Необходимо предоставить пользователю возможность настройки лне:он. Па форму добавляем три компонента — два диалога выбора цвета FieldColorDlg:  (Color = c1Navy), CetlColorDlg: “fC010fOialog (Со]ог clYe110w) одну кнопку SetC010fBtn: TButton (Cap1i01j Цвета).

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

 

Мультикедиа проигрыватель

 

Пткрьггь

Цвета

 

 

 

 

Рис. 77-

(ОСНОННОе СВОЙСТВО Со|ос• ТСС'ЈОТ. основной     — выбора цвета. Если пользователь выбрал цвет и нажал ”ОК-, результат этого метода — trve, если пользователь пахал - Отмена“, то результат fatse. procedure  TObject);

1;yegin if  О) • (Ijj•N0 if MainF01T.FieldColorDlg.Execute then ЫгеепРапе[.Со1ог := MainF0T1-FicldColorDlg-C.olor; томелмте цвет клеток“, mtlnformation. (плЬОК] О);

DrawCells; end;

MessageDIg(const Msg: sting; 01gType: TMsgDlgType; Buttons: TMsgOlgButtons; HelpCtx: Longint):        „ вызов окна сообщения- Это служебное окноMsg — текст сообщения .

01gType — тил диалога. Возможные значенкя: mtWaming, mtError, mtlnformation, 1TtTC01jfvTITta(ion. 1TtTCustonj.

Buttons — используемые кнопки. Переменна; тяпа - множество”, возможные элементы: It"5Ves, mbNo,            mbCancel, It"bAbort, mbRetIY, It"b1gnore, m5A[l, mnNoToA11, mbJIe(p.

HelpCtx — индекс контекстной слраекгг В ДЕННОМ лримере индекс равен нулю. При палиса•лтм проектов с развернутой справочной скстемой указывается реальный индекс.

MessagcDlg возвращает члсло, равное одной из следующих констант: тпгнопе, mrAbort, mrYes, ТОК, лтгКе1гу, mrNo, mrCancel, mrlgnore, лтгАЛ Эти константы — так называемый  результат ((Ij0(ial 1•esulO нажатия на  кнопку диалога.

В далмой программе проверяется, равен ли модальный результат mrNo, т.е. ваката ля кнопка “ Неј“”•» если нажатаг то нызываевся         и (ЈIЈ0(фамма немедленно ВЫХОДИТ (в текущей процедуры•обработчкка.

Фулхи.нл MessageDlg Execute 0e1phi позволяет дьиывать как процедуры:

MediaOpc1jI)lg.Execute вместо ifMediaOpenDlg F.xecute then

При этом невозможно лрокоњтролкровать, кате кнопки быля нажаты: ”ОК” МЛМ ”Отмена"

Далее необходимо откорректировать процедуру рисования, затем запустят» программу, загрузить музыкальлый файл  настройте цвета. Накокец, необходимо ислользоватн цне•а ДИЗЈТОЈХ“'Н           рисовании.

Внесите изменения в DrawCeIls•

»vith  00 heg:in

Bmsh.Color := MainForm.Fie1dC010rD1g,C010r;

Реп .Со1ог Bmsh.Color,

Rectangle(O, О, XSize * 10, YSize * 10);

I3njsh.Color CellCoIorDlg.Colo,•;

Bmsh.Color• := MainForm.C.eIlColovDlg.C.olor;

 

 

 

Confirm

 

Зткрьггь

 

 

 

 

 

Рис. 78.

Ряс. 79

9. На данный момент форма может оьпь масштабирована во время работы приложения- Для того чтобы з-афкксировать размер формы, необходимо установлть соогвегс•гвуяоикее СНОЙСТНО  Кроме нужно запретить. разворачттн,анле формы на весь экран (это также нежелательно).

Перечислим остов] ме свойства события формы-

BorderIeons: TBorderlcons иконк•• заглавной панели формы, тяг своиства множество, возможные элементы: 5i„SystemMenv, biMi11imize,  biHetp (д данлом случае нужно отключить hi,MaxiI11izee чтобы форму нельзя было развернуть).

BorderStyle: TBorderStyle — сткль бордюра bsDialog, bsSi11!le, bsNone, bsSizeahle,  Если установить bsN01'(e. •лО форма будет без заглавной панели, а значкт и без кнопки закрыткя программы. Следовательнр, выходить из программы возможно лкбо с помощью Alt-F4, либо предусмотреть дололшттельку•јо ктогху с методом C10se

ClientWidth, ClientHeigth: i11teger — ширина высота клиентской области формы.

FormSty1e-         сткль формы. Наиболее       является Если установлено это значение. то форма будет находиться над остальными формами, даже если она не активна, и лересекается с актмвной на данный момент формои.

1'osition- “I“Positi011 располок•еште формы. Здесь зада•отс• рщлкчтпые начальлые положен“ формьге напримере задать положение го центру экрана (ре*сгеепСетегГ Пря запуске программы она окажется в центре.

состояние окна. Возможные значения wsMini[13iud, wsMaxi[13izcd. С помощью этого свойства МОЖНО разворачивать сворачивать форму

ОпА«ћг ащ 0nDesactivatefSe:11der: ТОЬјес1) — событкя, возникающие, когда форма активкруется дезактив«руется (при этом в форму лереходлт илл ее покидает фокус ввода).

0nCloseQwery4Sender TOhject•, var CanC.lose: Воо}еап} — событисе возникающее гчят попытке закрыть форму. Например, некоторая лрограмма спраижвает: -вы хотите завершить

Это — результат  события. Делается это н обработчике подобным образом: CTClose := MessagcDlg('E.xit поре?! w.tC0116rwation. [1T1bYes 1T1bNoJe О) ItwVes.

О (ЕСТСЯ (е,  ТОЪјес1}  необходимое для описания действий, требуемых в начале или в конце работы приложения (открытке з-акрытке файлов, чтелие сохранелие настроек, ијштцткализадия переметил тп.у

01tHide, 0nShow(Scndcr TObjectJ — вызываются, когда форма становится видимой ИЛИ невидимой (пр“ присвоенигт соответствующего значения свойства VisibleJ.

ТОЬјес(ј — происходит. когда форма или сжимается. Здесь описывают изменение размеров и расположение компонентов на форме.

10. продолжттгь оформлелие медиалроигрывателя.

1) Для “(“0П_Ђ чтобы случайное заполнение было более случайнымг событии формы 011Create добавить Randomize-

 TObject)l hegin

RandomCclls; end;

2)                      Также желательно зациклить воспро•введенме медкафайла, описать обработчик события медкагроигрывателя 0nNotify. У MediaPlayef есть два свойства Position: Longlnt Length: 1.-,0I1g111t Это, соответственное текуг.ллы; позиция в запися и длина записи. Событие проигрывателя 011Notify возникает пр•т завершении разлкчных управляющих методов MetliaPlayej•. Сосл_-зянтте проигрывателя можно узнать (в снойстна (Мсме

Когда залусь будет доигрываться до КОНЕВ, будет вызываться метод Play, залускапзщий ее с начала. При остановке проткгрывателя «перематываем» запись па лачало.

Lejjg11'( 1jjejj Нау

procetfnre 1'MainForm.MPtayerNotify(Sender: TObject); begin with МР1ауег do ease Mode of mpP[aying: ifPositjon Length then Р[ау;

1j'(pSTopped: end; end;

3)                      Установить название  выбрать ему иконку. В главном открыть Ргојест 0ptions- На вкладке Applicati01j. задать название приложения (это название, частностк, будет отображаться слизу ла папелл задач \Vindows), а также загрузить иконку Стандартную иконку можно найти н панке

Files\Bodand Sharedilmages\lcons, создать свою иконку — в редакторе Delphi (меню Tools 1та е•е Editor) или в лобогл другом редакторе ресурсов.

Рис. 81

Проанализируем недостаткк: не выводится название проигрываемого файла, комлолентът ла форме не очель„то гармонируют друг с другом, неизвестло, сколько пролетов записи (ЈIЈ0}тсрано на данный момент. нельзя устанавливать скоростн визуалвацил, нет ВОЗМОЖНОСТ редакткров-ания сохраненля пом•цмй гтгры ” ЖизньСоздайте копна» проекта. Добавить в проект нову•о форму для упраштетптя воспроизведением меднафайла. Дл; создания новой формы щелкнлте на кнопку меню. Есть возможность сделать это и в пункте меню File => New... Там же можно создать форму с

            Добавьте на форму пять             Speet1Bvtt01j* 'ТгасКВаг таймер.

ноет1

Рис. $2.

Кнопка SpeedButton отлкчаетс• от обычной КНОПЕ“, во-первых, тем, что может содержать картинку. а во-вторых» что мо>к€г кх-тавгтгъся нажатой

медиафайл не загружен

-1

РКЦ. 83.

Основные свойства — Glyph:TPicturc (КЕТРТ}'НКа•,  основное событие — 0nOick. У этой хнолки есть еще несколько важных свойств. Для того чтобы кнопка мосла быть нажата, ее СВОЙСТВО Gt'(njp• in1eger ДОЛЖНО быть больше нуля. в Этом случае все кнопки С одинаковым значением группы становятся переключателями — если нажать одку, остальлые отщелкнвајотся. Это может быть лекелательно в случае одной КНО(ЈКИ с ненулевой срутијой — ОДиН раз ее нельзя  В этом случае свойство AlIowAllUp: boolean. Современный енд  придает свойство Flat: boolean.

В лрограмме откажемся от стандартмого тмтерфейса MediaI'1ayer, и, сделав его невидимым, будем обращаться к нему через созданные кнопки. Коляски; иконок щи кнопок находится в папке  Files\Borla11d

Настройка TrackBar проводится с помощью свойств ThumbLength: integer (длина бегунка), TickMarks: TTickMark (положение рисок линейки), TickStyle: TTickStyle (стиль рисок)

Настройте форму и компоненты. Измените имена компонент.

1) ControlForm: TControlForm Caption = ' медиафайл не загружен'

BorderStyle = bsToolWindow

ClientHeight = 24

ClientWidth = 402 2) NewSpBtn: TSpeedButton

AllowAllUp = true

Flat = true

Glyph: rety.bmp

GroupIndex

3) PosTrk: ТТгасКВаг

ThumbLength 15

TickMarks = tmBoth

TickStyle = lsNone 4) PosTimer = TTimer

Enabled = false Interval = 500

5) MediaOpenSpBtn: TSpeedButton

Flat = true

Glyph: MdOpen.bmp 6) PlaySpBtn: TSpeedButton

AllowAllUp = true

Flat = true

Glyph: vcrplay.bmp

GroupIndex = 1

7)   PlaySpBtn: TSpeedButton

AllowAllUp = true

Flat = true

Glyph: vcrpause.bmp

GroupIndex = 1

8)   StopSpBtn: TSpeedButton

AllowAllUp = true

Flat true

Glyph: vcrstop.bmp

GroupIndex

12. Когда требуется обратиться к каким-то переменным, функциям, типам, объектам, описанным в другом модуле, необходимо описать ссылку на этот модуль в разделе uses. Однако тонкость состоит в том, что uses может располагаться и в разделе interface, и в разделе implementation. При запуске приложения новое окно должно находиться под главным окном. Но если описать ссылки двух модулей друг на друга в разделах interface возникнет так называемая ошибка круговой ссылки. В рамках Pascal два модуля не могут использовать интерфейс друг друга. Ссылка в интерфейсе нужна для того, чтобы при описании типов, классов, переменных интерфейса использовать типы и константы описанные в других модулях. В данном интерфейсе используется, к примеру, класс TForm, TSpeedButton, TTrackBar, TTimer, описанные, соответственно, в модулях Forms, Buttons ComCtrls, ExtCtrls. То есть использование других модулей в интерфейсе дает возможность, прежде всего, описать новые типы с помощью уже описанных типов. Именно поэтому

120

запрещена круговая ссылка. Тогда потенциально возможно было бы олусать: ТуреА апауГО..4] Турен в одном модуле ТуреВ апау [О-.99]  в другом. То есть рег — неизвестное через еще более (лат.).

Что же касается использования не ткпов, но конкретных леременны.х объектов, фигурирующих в другкх формах, то это тсго:тьзовалие происходит хак раз д iIttpleIttentati011. и тут круговые ссылки вполне допустимы. При работе с нескольким“ формами важно также учгттывать порядок к.х создан•л. Это касается обработки событий ОлСгете — обращаться можно ТОЛЬКО к созданным формам

Vnt Contt'01F01Tt: TC01jtt01F0ttj, i•npjementation

 *.DFM}

procednre TC0fttt01Fom.ForttjCreate („Setjder• ТоЪјесЏ•, begin

Тор := MajnForm-Top + MajnForm-Height + 4;

1.„eft := \1ai11Form.Left•, end;

Свои свойства 1-eti Тор вторая форма лодстраи€ке•г под те ке свойства первой формы. При попытке запуска программы„ однако. выводится сообтенје о том, что не указан модуль, в котором описана первая форма-

Если нажать кнопку Ves, то в раздел uses автоматл•ческл• добавятся ссылка на нужный модуль. Одлако, система ле всегда автоматически работает Лучше добавлять ссылки самостоятельно. В данном случае — в раздел implementati011. implementation

Здесь лдет обращение х MajnForm, даллдя форма должна быть к этому моменту (то есть моменту создания уже созданной

По умолчанттю пр•т создании пркложенгл полагается, чтобы при запуске выводилась только главлая формг Одлако в данном случае д лрограмме дольют быть обе формы. Обязательно, у C011tT01F0'111 установить свойство Visib[e := tme- Иначе форма будег не видна при залуске программы.

Муяьтимедиа проигрыватель

 

Открыть

 

Цвета

 

 

 

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

Рис. 86.

Первая форма создается раньше второй. Следовательно, и событие 0nCreate у нее дозиккает еще до того, хак создана вторая форма, значит попытка доступа вей (попытка установить ее положенлеј вьг40вет ошлбку

ТЗ. Оставим главной форме только (Предназначение экрана. Удалите код внутри обработчиков кнопок. а также сами кнопкј' procedure “I“Mai11Form.MediaOpenBtnClick („Sender : TObJect); hegin

CT'td; procedure TMai1jF0T1.SetCol0TBtnC[ick (S"11der • TObject);

1;yegin

end;

Усј}щно$'јте  fajse. переместите его понерх панели. Если панель в форму добавлена ломке проигрывателя, то проигрыватель окажется под палель•о. 1“1сптому предварительно поменяйте порядок щелкаттте правой хлопкой мыши ка пролгрыватель выберите ”Bring То Front”

рев те.“

Рис. $7.

Телерь темените клиентскую высоту формы. Экран (ОЈ“Он.

 

 

 

3.1

 

 

Рис. 8$

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

heg:in

PosTfkBar.Positjon := MainForm.MPlayer.Positiow, end;

procedure TContr01Form.PosTfkBarChange(Sender: ТС)Ь' hegin if not PosTimer.Enahled then

MainF01T MPlayeT.Posi1i01j end;

В обработчике кнопки загрузки  на тот» что уже

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

Обратите вниман•те на два таймера — один запускает вкзуализацмю, а другой денгает бегунок Передвижения бегунка  только когда воспроизведение остановлено — PosTj := falsc. Иначе происходут конфликт — таймер меняет ПОЗиЦИЮ бегунка, а бегунок в ответ меняет позицию проигрывателя. Если необходимо менять позицию во время воспроизведения, придется вводить дополнительные проверки.

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

procedure TControlForm.PlaySpBtnClick(Sender: TObject); begin

MainForm.MPlayer.Play;

PosTimer.Enabled := true; end;

procedure TControlForm.PauseSpBtnClick(Sender: TObject); begin

MainForm.MPlayer.Pause;

PosTimer.Enabled := false end;

procedure TControlForm.StopSpBtnClick(Sender: TObject); begin

MainForm MPlayer. Stop;

PosTimer.Enabled := false end;

Запуская и останавливая проигрыватель, мы запускаем и останавливаем таймер. Необходимо внести изменения в код в моДуле MainUnit, событие 0nNotify проигрывателя.

procedure TMainForm.MPlayerNotify(Sender: ТОЬј ect); begin if ControlForm.RewSpBtn.Down then with MPlayer do if NotifyValue = nvSuccessful then begin

Notify true

Тау, end; end;

Здесь происходит проверка, зажата ли кнопка ”цикличного воспроизведения“ во второй форме. При открытии файла необходимо включить все кнопки и бегунок (изначально Enabled false), запустить таймеры, настроить PosTrkBar на длину записи и вывести название воспроизводимого файла в Caption формы:

procedure TControlForm.MediaOpenSpBtnClick(Sender: TObject); begin with MainForm do

Т MediaOpenDlg.Execute then begin

MPlayer FileName MediaOpenDlg FileName•

MPlayer.Open;

MPlayer.Display := ScreenPanel•

1 24


MPlayer.DisplayRect := Rect(0, 0, ScreenPanel.Width, ScreenPanel.Hcig11t); MPlayer.Play;

Life1mageVisible not (Exttac1FileEs1(.MPlayerFi1eName) •

LifeTimer.Enzbled := true;

ControlForm.PosTimer.Enabled := u•ue;

ControlForm.PosTrkBar.Max := MPlayer.I..engttu

ControlForm.PosTrkBar.EJ1zbled := true;

CorttrolForm PlaySp13trt.Enabled

ControlForm.PauseSpBtJ1.Enabled := true;

ControlForm.StopSpBtn.Embled

ControlForm.Caplion MediaOpertI)lg.Filename} end; end;

H3MeH'1Te naparae-rpb] KOMnot•aeHT:

LifeSavel)lg: TSaveDialog

lif

LifeOpenDlg: LTOpenOialog DefaultExt rillet •

Opti ans .offii] eMustExist true

Title T.oxpa111dTb

PHc. 89.

cKpb1aa]0LLlte

procedure TControlForm.MediaOpenSpBtnClick(Scndcr: TObjec0; begin willi MainFonn do if MediaOpeJIDlg.Execute then

begin

MPlayer.FileName := MediaOpenDlg.FileName;

MPlayer.C)penJ

MPlzyer-Display := Screenl'anel,

MPlayer.DisplayRect := Rect(0, 01 ScreenPanel.Width, ScreenPanel.Heig11t); MPlayer.Play;

     Lifelmage-Visible := not                                                               '-avi)•,

LifeForm Visible

LifeForm EditSpBtn.D0&VT1 := falses

LifeTimer.Embled := true;

CorttT01Form.PosTimer Enabled : LLL

ControlForm.PosTrkBar.Max := MPlayer.Length;

ControlForm.PosTrkBar.lThabled

ControlForJ11 .PI ay SpBtJ1. Enabled := tm e;

ControlForm.PauseSpBtn-Enabled := true;

ControlForm.StopSpIJtjvEjulbled LL true,

ControlForm.Caption := MediaOpenDlg.Filename; end;

             Ha  LifeForm pacnoaarmorreq                  LifeOpenBtn, LifeSaveBtn, FillBü1.

ClearBtJ1, SetC.olorBtn. EditSpBtJ1, SpeedTrkBar HacTPOÏr•re

LifeForm: TLifeForm

BorderS1yle LL bsToolWind0'0"

Caption

ClientWidth 402

Clienllleighl L 56

EditSpBtn: T SpeedBUtton

AllowAlllJp = true

Caption LL 'penaF1'1tpogaTb'

Grouplndex = I

SpeedTrkBar:TTrackBar

Frequency 50

Position 100

ThumbLen•th 15

TickMarks

B oöpaö0Ti1"Ke sarpygh'li Mealdacþarma Ileoóx0AHM0 noóa0HTb cneaylouaue e-rp0K1i. LifeForm.Visible LifelmgYVisible;

Ec.ll'l Lifelmg T-e. HY*Ha 3By«oaoro •:þzïrna, TO moya.'lloauueii *e Lifelmg cnpwretii TO cþoPMb' ynpaW1eHJ1fl BW3ya:1H3auvreñ

LifeForm.EditSpBtn.Down, false;

ITOCKOJ1bKY 3Aecb, npn OTKPb1THH, Mbl BKJ1kOqaeM 3TOT TañMep, TO pe)KHM peAaKTnp0BaHH¶ AOJ1)KeH 6b1Tb OTKJ1kOqeH H KHOr1Ka 0THY1-ueHa.

MPlayer.Play•,

Lifelmg. Visible := not (ExtractFileExt(MPlayer.FileName)     .avi');

LifeForm.Visible := Lifelmage.Visible

LifeForm.EditSpBtn.Down := false;LifeTimer.Enabled := true;

ControlForm.PosTimer.Enabled := true,

15. He06x0AHM0 OllHCaTb 06pa60TLIHKH C06b1THÏ1 HOBb1X KOMHOHeHTOB. OnpeneJIHM C03naHHH cþopMb1 ee rueCT0110JIO)KeHHe.

B M0AYJ1e LifeUnit.

var LifeForm: TLifeForm, implementation uses MainUnit, ControlUnit; procedure TLifeForm.FormCreate(Sender: TObject); begin

Top := ControlForm. Top + ControlForm.Height + 4

Left := ControlForm.Left; end;

IIPH HOKaTHH Ha KHOFIKH OHHCTKH H 3aF10JIHeHH¶ Mbl HC110J1b3yeM npouenypbl, onucaHHb1e B Monyne rnaBHOñ

B Monyne LifeUnit.

procedure TLifeForm.ClearBtnClick(Sender: TObject); var i, j: integer; begin for i := 0 to XSize - I do

O to YSize - 1 do

Ali, j]        false

DrawCells end;

procedure TLifeForm.FillBtnClick(Sender: TObject); begin

RandomCells•

DrawCells• end;

OAHaKO TOPO, LIT06b1 HOA06Hb1ñ Bb130B 6b1J1 B03MO)1œH, He06x0AHM0 B FJfflBHOM MOAYJ1e 06b¶BHTb npouenypbl B HHTep(þeñce. Id3BHe AOCTYHHO TOJ1bKO TO, 06b¶BJueHO B

HHTep(þeñce. B MainUnit He06XOAHM0 "Bb1BeCTH" B HHTep(þeñc 06b¶BJueHHe npouenyp:

var

MainForm: TMainForm;

A: TLifeCells• procedure RandomCells• procedure DrawCells• implementation uses ControlUnit;

'Tarmepat TeM caM1,1M "'kopoeTb nepe«.'ffouacr ocrraHaBJT'taan

procedure TLifeForm.FillBtnClick(Sender: TObject); begin

RandomCells,

DrawCells; end;

procedure TLifeForm-SpeedTrkBarChange0Sender: TObject); {MeHRT CKOPOCTb begin

MainForm.LifeTimer.Interval := SpecdTrkBar.Position; end;

procedure TLifeForm-EditSpBtnClickCSender: TObject); begin

Mai nForm .LifeTimer. Enabled := not EditSpBtJ1. Down, end;

OJIMouscDown KOMA0'•tewra Lifelmg.


procedure  TObjec1•,

Shift TShiftState; X, Y: Integer}; begin ifLiferorm.Edi1Sp131n l)own

AIX div 10, Y div 101 := not AIX div 10, Y div 101; DrawCells;

P„c. 91.

16. Вначале при загрузке и сохранении картинок и прочих файлов использовались специальные методы объектов, в которые происходила загрузка. Теперь произведем эти операции вручную, пользуясь процедурами работы с типизированными файлами.

Типизированные файлы содержат записи определенного типа. К примеру, f11e of integer может хранить произвольное количество переменных integer; f11e of TLifeCells произвольное количество переменных типа TLifeCells. Однако для наших целей достаточно только одной записи. При работе с типизированными файлами используются следующие процедуры.

AssignFile(var Р, FileName: string) — связывает файловую переменную F с текстовым именем файла. Это действие необходимо сделать перед всеми последующими операциями.

Reset(F) открывает существующий файл, связанный с переменной F, и устанавливает позицию чтения-записи в начало.

Rewrite(F) — создает файл, соответствующий файловой переменной F.

Read(F, У) — читает из файла, связанного с F, данные в типизированную переменную У. Позиция файла увеличивается на один файловый компонент, байтовый размер которого равен размеру типа переменной (для integer это 4 байта)

Write(F, У) — записывает в файл, связанный с F, типизированную переменную V. Позиция файла увеличивается на один файловый компонент.

Seek(F, ТЫ: LongInt) — перемещает позицию файла к номеру ТЫ, начальная позиция при ТЧ = 0. CloseFile(var F) — закрывает файл F.

В главном модуле описан тип TFileCells:

{Private declaration} public

{Public declaration} end;

const

XSize = 40

YSize = 25 type

TFileCells = array [0 XSize   YSize 1] of boolean var

MainForm• TMainForm

А: TFileCells

В обработчике 0nClick кнопки LifeOpen определяем файл такого же типа. Если файл выбран в диалоге, ассоциируем имя файла с переменной, устанавливаем позицию для чтения в начало и считываем из файла данные в переменную А, описанную в MainUnit и хранящую положения клеток.

procedure TLifeForm.LifeOpenBtnClick(Sender: TObject); var file TLifeCells begin if LifeOpenDlg.Execute then

Т FileExists(LifeOpenDlg FileName) then begin

AssignFile(F, LifeOpenDlg FileName);

Reset(F);

Read(F, А);

CloseFile(F)•,

DrawCells end; end;

Подобное чтение корректно, поскольку типы файла и переменной А совпадают.

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

procedure TLifeForm.LifeSaveBtnClick(Sender: TObject); var

1ile 0f TLifeCells begin if LifeSaveDlg.Execute then begin

AssignFile(F, LifeSaveDlg.FileName); if not FileExists(LifeSaveDlg.FileName) then

Rewrite(F) else if MessageDlg('11epe3arwcaTb?' mtWarning, [mbYes, mbNo], 0) mrYes then

Reset(F) else begin CloseFile(F)•, exit; end;

Write(F, А);

CloseFile(F)•, end; end;

Работа с нетипизированными файлами похожа на работу с типизированными. Отличия в том, что объявляются такие файлы просто var F: f11e; (без of .. .), при открытии Reset(F, 1) — нужно указать размер блока записи (который по умолчанию равен 128), чтение и запись происходят с помощью процедур BlockRead, BlockWirite(var F: File; var ВИГ Count Integer), где Buf — переменная, в которую (или из которой) идет запись, Count — число блоков записи (размер блока был определен в Reset). Если надо писать произвольные данные (к примеру, а: integer; Ь: boolean; с: TLifeCells; d: string[20]), сделайте следующее.

При записи:

Rewrite(F, 1);

BlockWrite(F, а, SizeOf(a));

BlockWrite(F, Ь, SizeOf(b)); BlockWrite(F, с, SizeOf(c)); BlockWrite(F, d, SizeOf(d));

CloseFile(F);

При чтении, соответственно:

Reset(F, 1);

BlockRead(F, а, SizeOf(a)); BlockRead(F, Ь, SizeOf(b)); BlockRead(F, с, SizeOf(c));


BlockRead(F, SizcOf(d));

C10seFile(F)•,

17- Чтобы решить проблему цвета, необходимо сделать спецнальное собственное диалоговое окто, позволяющее выбрать цвер Ральше мы  стандартлые диалоги.

Диалог — это обычна; форма, которая. однако, вызывается специальным методом Show,Moda] и возвращает модальный результат. Модальный вызов пркводит к тому, что при выведенном нельзя переключ(.ттьс.я нз к ОдНОЙ другой форме ггрттло-А-ентгя. пока не будет нажата одна из модальных кнопок диалога, после чего диалог закроется и управленке дертегея д приложелие. Модальтљлм кнопкам люке пе ладо описывать обработчики. Просто

Создайте новую форму, сохраните модуль как Co[orUnit Добавьте на нее две фигуры Shape (CeltShape: TShape, FietdShape TShape), ккогху «Утвердить» (ModatResult ттмС)К), кнопку «Отмена» (ModalResult тпгСапсет•.

Р„с. 92.

Настройте форму В частности. задайј“е ее позицию и определите результат кнопок.

C010rForm• TCot0fForm

= bsToolWindoiw

Caption выберите цвета

В обработчике нажаткя па фигуры Shape опкшите дьиов диалогов. Обработчикт' для кнопок можете не

В модуле ColorL,1 11it — обработ•типт нажатия на FieldShape CellShape

procedure  TObjcct; Butt0I1: T,MouseButton,

Shit№ TShiftState•, Х, У: lntege:r}•, begin

MainFom.FjeldCo[orDlg.Execute•,

Fietd„Shape.Bwsh.Cot0f := MainForm.Fie1dColorDlg-Cotor•, end;

procedure                                                                                                         “I“Object; 13'Itton:

Shifi TShifiState; Х, У:

1;yegin

Ce[l Shape.B (-vsh .Со1ог := Mai r.F01T.CellC010TI)l g.Color; end;

В обработчике КНО(ЈКИ «задать (1В€Г3” на Орме низуалтв,ацми вызов этого нового диалога-

В модуле LifetJnit описываем ся5работчих SetC010fBtn. procedure var си СГ: тсо10(. heg:in

С 1 := MainForm.FietdC010rD1g.Colcw;

СГ соток

ColorForm.FieldShape.Brush.Color := СТ; C010fForm.Ce11Shape.B№h.C010f := (12; ifC010TFom.ShowN10<1al [11тСапсс[ then begin

Mai1jFortIj.FieklC010rD1grolor

end; end;

В данном случае вызывается форма — диалог установки цвета. Если е нем нажата ктлзпха ”Огмева•, то значения цветов восстанавливаются. Отм спецкальво для этого перед вызовом сохраняются в С] и С2.

18- Пользователь проигрывателя МОЖСТ с:тучаЙнО закрыть окно формы упражлсния.

Следователь, придется перезапускать программу.

МОЖНО эту проблему следующим сбразом. При попытке пользователя, хочет ли он совсем выйт•• мз программы. И еслк хочет— закрыть главную форму

procedure TControlForm.FormCloseQuery(Sender: TObject; чат CM1Close: Воо[еал}•, begin ifMessageD уД'ВыГгтј' w3 программы?'$ 1T1tWan3ing, [плЬУе*, mbNol, 0) = mrYes then Mai11Form.C10se clse CajjC10se Гаке:

end;

Этой кокструкцкей закрывается главлая форма из формы упраштегмя. То же собьтке МОЖНО обработать в ГЛАВНОЙ форме, каждый раз слрам.штвая о желании выйти. Запустттте программу.

Рис. 93

19. Подведем итоги. Для создания многооконности необходимо

1 Создать очередную форму.

2.      Модули, предназначенные пользователю, поместить в interface, а модули, предназначенные программистуто, поместить в uses.

3.      Необходимо помнить о круговых ссылкахи и избегать ignotum рек ignotius. В интерфейс поместить только необходимое.

4        В 0nCreate делать описание, не забывая о порядке создания форм в файле проекта.

5        . Программа заканчивается, когда закрывается главная форма. Остальные формы приложения могут закрываться сколько угодно.

6.      Диалоги: вызов ShowModal, результат — ModalResult нажатой кнопки.

7.      Выбрать нужную форму или модуль для редактирования можно с помощью кнопок панели инструментов или клавишами Ctrl-F12 и Shift-F12. Переключение модульформа — просто клавишей F12.

ПРИЛОЖЕНИЕ

1.1. Часто встречающиеся свойства элементов управления, используемые в Delphi

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

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

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

Свойство РорирМепи (контекстное меню) позволяет привязать составленное разработчиком локальное меню к некоторому элементу - оно будет вызываться при щелчке на нем правой кнопкой мыши.

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

Свойство Enabled (включено) позволяет делать различные элементы временно недоступными для пользователя. Это свойство имеет логический тип Boolean и соответственно может принимать одно из двух значений True или False. Когда выбрано значение False, пользователь не сможет взаимодействовать с этим элементом управления - не сможет нажимать на кнопку, переключать переключатель, выбирать пункт меню и так далее. Но сам элемент на форме будет виден, только возможно в некотором ”пассивном” виде.

Свойство Visible определяет видимость элемента на экране. Если его значение равно Тте, то, хотя такой элемент будет виден в дизайнере, в рабочей скомпилированной программе он виден не будет. Но это свойство надо отличать от свойства Enabled, которое, будучи переведенным в состояние False, хотя и делает элемент недоступным пользователю для воздействия, тем не менее сохраняет его видимым в окне. А свойство Visible может просто сделать элемент невидимым.

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

1.2. Вложенные свойства

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

Вложенные свойства представляют собой другие объекты и элементы управления. Когда обращаются к вложенному объекту, то в окне свойств на дополнительном уровне показываются свойства этого объекта. Типичный пример такого свойства, часто вкладываемого в другие объекты - свойство Font (шрифт). Если выделить в дизайнере поленадпись и раскрыть данное свойство, то можно увидеть более подробно, из каких свойств оно на самом деле состоит.

34

В поле Name, относящемся к шрифту, можно подбирать подходящий профиль шрифта. С помощью свойства Size - задавать его размер, с помощью свойств Bold и Italic (они в свою очередь вложены в свойство Style) - делать шрифт жирным или наклонным и так далее. При этом, как видно, названия различных свойств обычно точно отражают их предназначение и совпадают где возможно с названиями, принятыми в различных популярных прикладных программах в качестве стандартных обозначений.

Свойство Color (цвет шрифта) определяет, каким цветом будут показываться надписи, сделанные на элементе управления. Свойства Left и Тор определяют местонахождение элемента на форме (координаты на форме левого - верхнего угла элемента). Свойства вложенных Width (ширина) и Height (высота) задают размер элемента. Свойство Position реализовано для формы. Оно позволяет определить, в каком месте экрана будет показана соответствующая форма при ее открытии (после запуска скомпилированной программы). Position может принимать одно из следующих значений:

 poDesigned. Форма показывается на экране в точности в той позиции, в какой она находилась на экране при ее подготовке в дизайнере.

 poDesktopCenter. Форма центрируется по отношению к краям рабочего стола.  poScreenCenter. Форма центрируется по отношению к краям экрана.

 poDefaultPosOnly. Форма показывается в месте, установленном в Windows по умолчанию.

 poDefault. Форма показывается в месте, установленном в Windows по умолчанию, а размеры окна также принимаются равными с установленными в Windows по умолчанию.

 poOwnerFormCenter. Форма центрируется по отношению к родительскому окну.

1.3. Списки

Очень полезный элемент управления - список (набор строк) ListBox на панели


Standard. Свойство ItemIndex - номер текущей выделенной строки. Если ничего не выделено, то принимает значение -1, иначе - номер выделенной строки в списке. Нумерация строк начинается с нуля. Фактически, список - это массив строк (на самом деле объект, включающий массив строк), только он дополнен разными удобными свойствами и методами для работы с этим массивом.

Число элементов можно узнать через свойство Count, а флажок Sorted (тип boolean) когда принимает значение true, приводит к автоматической сортировке значений массива. С помощью Sorted удобно выполнять сортировку разных значений. Сами строки хранятся в свойстве Items. Доступ к содержимому Items происходит через подсвойство Strings.

Например, в s записываем седьмую строку списка строк ListBoxl s .= ListBoxl .Items.Strings[ 7 Г,

Содержимое списка можно очистить, обратившись к методу Clear свойства Items:

ListBoxl .Items.Clear•

Исходно список пустой, а добавление новой строки в список происходит таким образом: добавляемая строка

ListBoxl .Items.Add( s у,

1.4. Элементы управления

Для списка можно отслеживать выбор какого-то элемента мышкой. Для этого в инспекторе объектов на закладке Events, где задаются события текущего объекта, которые можно обрабатывать, дважды щелкнуть на строчке 0nClick (событие, возникающее при щелчке мышкой на списке), и создастся обработчик такого щелчка (сначала надо выделить конечно сам список на форме). В этом обработчике можно с помощью свойства ItemIndex можно узнать, какой элемент был выделен. Это удобно, например, когда у нас есть список заданий, и мы хотим, когда выбрали в списке упражнений элемент-название, динамически


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

1.5. Многострочное поле Мето

Многострочное поле Мето позволяет редактировать несколько строчек. Основное свойство - Lines (массив строк)

Очистка содержимого: Мето1 .Lines.Clear•

Мето1 - это имя компонента Мето по умолчанию.

Обратиться к любой строке можно по номеру (нумерация начинается с нуля: Мето1 .Lines[O] := ' Это первая строка!

Добавление строки осуществляется методом Add•

Мето1 .Lines.Add( ' эту строку добавляем в конец..

Можно сохранить    все      содержимое Мето в текстовый      файл   (указываем полный/относительный к нему путь) •

Мето1 .Lines. SaveToFile( 'c:\txt\memotekst.txt' Число строк - метод Count.

п := Мето1 .Lines.Count; // текущее число строк в Мето

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

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

1.6. Компоненты, используемые в графике

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

procedure TForm 1 .Button Click(Sender: ТОЬј ect)• begin

Shapel. Shape          stCircle end;

И цвет соответственно, свойство Color само вложено в свойство Brush (кисть) поэтому к нему надо обращаться по цепочке: Shapel .Brush.Color := clRed•

У кисти есть подсвойство Style, которое определяет способ ”заливки” внутренности объекта - сплошное bsSolid, в решеточку bsCross и т.д. Конкретные значения некоторого свойства можно посмотреть в инспекторе объектов, в выпадающем списке.

Shapel .Brush. Style bsCross

Компонент Bevel позволяет создавать выпуклые/невыпуклые панели, рамки и линии Его главные свойства - Shape и Style.

Компонент Panel (раздел Standard) предназачен для создания декоративных панелей, на которых удобно группировать элементы управления, выделяя их визуально. Панель оформляется с помощью свойств, связанных с внешним видом ее каемки - BorderStyle, BorderWidth, BevelWidth, BevelInner, BevelOuter.

Кроме того, можно использовать кнопки с картинками BitBtn или SpeedButton на панели Additional. Через свойство Glyph можно задать картинку, которая будет показана на самой кнопке.

2

Таблица 1.1

Цвет компонента или объекта свойство Color

 

Значение

 

Цвет

Значение

Цвет

сВКсК

 

Черный

clGray

Серый

clMaroon

 

Темно-красный

clSilver

Серебряный

clGreen

 

Зеленый

clRed

Красный

clOlive

 

Оливковый

clLime

Ярко-зеленый

clNavy

 

Темно-синий

clBlue

Голубой

clPurple

 

Фиолетовый

clFuchsia

Сиреневый

clTeal

 

Сине-зеленый

clAqua

Ярко-голубой

 

 

 

clWhite

Белый

Таблица 1.2. Системные цвета Windows, определяемые цветовой схемой

Значение

Цвет для элемента

clBackground

фон окна

clActiveCaption

заголовок активного окна

cllnactiveCaption

заголовок неактивного окна

clMenu

фона меню

clWindow

фон Windows

clWindowFrame

рамка окна

clMenuText

текст элемента меню

clWindowText

текст внутри окна

clCaptionText

заголовок активного окна

clActiveBorder

рамка активного окна

cllnactiveBorder

рамка неактивного окна

clAppWorkSpace

рабочая область окна

clHighlight

фон выделенного текста

clHightlightText

выделенный текст

clBtnFace

Кнопка

clBtnShadow

фон кнопки

clGrayText

недоступный элемент меню

clBtnText

текст кнопки

Таблица 1.3. Базовые свойства Color как шестнадцате ичные константы

Цвет

Значение

Цвет

Значение

Черный

$ 000000

Синий

$ 000080

Светло-синий

$OOOOFF

Зеленый

$ 008 000

Светло-зеленый

$OOFFOO

Сине-зеленый

$ 008 080

Голубой

$OOFFFF

Коричневый

$ 800000

Светло-красный

$FFOOOO

Темно-сиреневый

$ 800080

Сиреневый

$FFOOFF

Оливковый

$ 808 000

Светло-желтый

$FFFFOO

Темно-серый

$ 808 080

Белый

$FFFFFF

Светло-серый

$сососо

Таблица 1.4. Выравнивание компонента внутри формы (свойство Align)

Значение

Расположение компонента

alNone

Без выравнивания на месте размещения при создании программы значение по молчанию

alTop

Перемещение в верхнюю часть формы, ширина компонента становится авной ши ине о мы высота не меняется

alBottom

Перемещение в нижнюю часть формы, ширина становится равной ши ине о мы высота не изменяется

alLeft

Перемещение в левую часть формы, высота компонента становится авнои высоте о мы ши ина не изменяется

alRight

Перемещение в правую часть формы, высота становится равной высоте о мы ши ина не изменяется

alClient

Компонент полностью занимает всю рабочую область формы

З

Таблица 2.1 Функции ввода вывода

Функция

Описание

InputBox (Заголовок,

Подсказка, Значение)

В результате выполнения функции на экране появляется диалоговое окно, в поле которого пользователь может ввести строку символов. Значением функции является введенная строка. Параметр Значение задает значение функции «по умолчанию», т.е. строку, которая будет в поле едакти ования в момент появления окна.

ShowMessage (s)

Процедура выводит окно, в котором находится сообщение и командная кнопка ОК.

MessageDlg (s, t, Ь, h)

Выводит на экран диалоговое окно с сообщением и возвращает код кнопки, щелчком на которой пользовательзакрыл окно. Параметр определяет тип окна: mtWarning — Внимание; mtError — ошибка; myInformation информация; mtConfirmation  запрос; mtCustom пользовательское (без значка). Параметр Ь (множество заключенный в квадратные скобки список констант0 задает командные кнопки диалогового окна (mbYes, mbNo, mb()k, MbCancel, mbHelp, mbAbort, mbRetry, mbIgnore, mbAll) Параметр задает раздел справочной системы программы который появится в результате нажатия кнопки Неф или клавиши <Fl>. Если справочная система не используется, значение параметра должно быть 0. Значением функции может быть одна из констант: mbYes, mbNo, mb()k, MbCancel, mbHelp, mbAbort, mbRetry, mbIgnore, mbAll обозначающая соответственн ю команд

Таблица 2.2. Математические функции

Функция

Описание

Abs (п)

Абсолютное значение п

Sqrt (п)

Квадратный корень из п

Sqr (п)

Квадрат п

Ехр (п)

Экспонента п

 

Натуральный логарифм п

Random (п)

Случайное целое число в диапазоне от 0 до пл (перед первым обращением к функции необходимо вызвать функцию Randomize, которая выполнит инициализацию п ог аммного гене ато а сл чайных чисел

Sin ф)

Синус выраженного в радианах угла

Cos ф)

Косинус выраженного в радианах угла

Arctan ф)

Арктангенс выраженного в радианах угла


Таблица 2.3 Функции преобразования

Функция

Описание

Chr (п)

Символ, код которого равен п

IntToStr (К)

Строка, являющаяся изображением целого К

FloatToStr (п)

Строка, являющаяся изображением вещественного п

FloatToStr (п, f, Кэт)

Строка, являющаяся изображением вещественного п. При вызове функции указывают: f - формат; К - точность; т количество цифр после десятичной точки. Формат определяет способ изображения числа: ffGeneral универсальтный; ffExponent научный; ffFixed  с фиксированной точкой; ffNumber - с разделителями групп разрядов; ffCurrency - финансовый. Точность нужное общее количество цифр: 7 или меньше для значений типа Single, 15 или меньше для значения типа Double и 18 или меньше для значения типа Extended

Format (s, [п 1, п2,   1)

Строка, являющаяся изображением значений п], п2 и т.д. Способ преобразования значений в строку символов определяют управляющие символы, которые находятся в ст оке о мати ования s

StrToInt (s)

Целое, изображением которого является строка s

StrToFloat (s)

Вещественное, изображением которого является строка s

Round (п)

Целое, полученное путем округления п по известным п авилам

Т гипс (п)

Целое, полученное путем отбрасывания дробно части п

Frac (п)

Дробное       представляющее    собой дробную       часть вещественного п

Int (п)

Дробное       представляющее    собой целую            часть вещественного п

4

Таблица 3.1 События

Событие

Происходит

OnClick

При щелчке мыши

OnDblClick

При двойном щелчке кнопкой мыши

0nMouseDown

При нажатии кнопки мыши

0nMouseUp

При отпускании кнопки мыши

0nMouseMove

При перемещении мыши

0nkeyPress

При нажатии клавиши клавиатуры

0nkeyDown

При нажатии клавиши клавиатуры.

События ()nkeyDown и ()nkeyPress это чередующиеся, повторяющиеся события. Которые должны происходить до тех пор, пока не будет отпущена удерживаемая клавиша в этот момент п оисходит событие ОпКе U

OnI<eyUp

При отпускании нажатой клавиши клавиатуры

0nCreate

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

0nPaint

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

0nEnter

При получении элементом управленя фокуса

0nExit

При потере элементом управленя фокуса

Литература

1 Симонович СВ., Евсеев ГА. Занимательное программирование: Delphi. — М.: АСТ ПРЕСС КНИГА: Инфорком - Пресс, 2001

2.      Культин НБ. Delphi в задачах и примерах. — СПб.: БХВ — Петербург, 2005.

3.      Фаронов В В. Программирование на языке высокого уровня: Учебник для вузов. СПб. : Питер, 2003.

4        Бобровский СИ. Delphi 7. Учебный курс. — СПб.: Питер, 2005.

5        . Кетков Ю.Л., Кетков А.Ю. Практика программирования: Visual Basic, С++ Builder Delphi. - СПб: БХВ - Петербург, 2005.

142


Содержание

Введение2 1 . Идеология объектно-ориентированного программированияЗ

1                   . 1. Элементы интерфейса программы КомпонентыЗ

1.2. Инспектор объектов .7

2. Три основных принципа ООП: наследование, инкапсуляция, полиморфизм8 3. Использование справки .10

4.  Структура программы

5.  Методы отладки и борьбы с ошибками .13

Практическая работа № «Моя первая программа».................................................................. 16

Практическая работа .№ 2 Создание консольного приложения17

Практическая работа .№ 3 «Приветствие» .19 Практическая работа .N9 4 «Случайный выбор».21 Практическая работа .№ 5 Изменение заголовка формы.23 Практическая работа .№ 6 «Двигающая кнопка» .25

Практическая работа .№ 7 «Альбом».26 Практическая работа № 8 Работа с меню .28

Практическая работа № 9 Случайный выбор из списка31 Практическая работа № 10 Простейший плеер33 Практическая работа № 1 «Прыгающая кнопка» .35 Практическая работа № 12 «Таблица умножения» .37 Практическая работа № 13 Применение полос прокрутки.40

Практическая работа № 14 «Светофор» .43 Практическая работа № 15 «Ханойские башни» .46 Практическая работа № 16 «Электронный альбом» .49 Практическая работа № 17 «Вычисление процентов» .52 Практическая работа № 18 «Головоломка № 1».54 Практическая работа № 19 «Головоломка № 2».56 Практическая работа № 20 «Обычный калькулятор» .58

Практическая работа № 21 «Строковый калькулятор»61

Практическая работа № 22 Нахождение индекса в массиве случайных чисел63

Практическая работа № 23 Находение минимального и максимального числа в массиве65

Практическая работа № 24 «Текущее время и текущая дата»67 Практическая работа № 25 «Электронные часы»68

Практическая работа № 26 Графика70

Практическая работа № 27 «Олимпийский флаг»75 Практическая работа .№ 28 «Узоры» .77

Практическая работа .№29 Перемещение рисунка .80

Практическая работа .№ 30 Рисунок..83

Практическая работа .№ 3 Построение графика.86 Практическая работа .№ 32 «Градусник».88

Практическая работа .№ 33 Вывод табличных данных .92 Практическая работа .№ 34 «Игра»..96 Практическая работа .№ 35 «Тест» .

Практическая работа 36 «Проигрыватель»109

ПРИЛОЖЕНИЕ

1                    . 1 Часто встречающиеся свойства элементов управления, используемые в Delphi .133

1.2. Вложенные свойства............................................................................................................. 133 1.3 Списки......................................................................................................................

1.4.  Элементы 134

1.5.  Многострочное поле Мето .135

1 43

| 6. Компоненты, используемые в графике135

ПРИЛОЖЕНИЕ 2137

Таблица 1.1. Цвет компонента или объекта (свойство Color)137 Таблица 1.2. Системные цвета Windows, определяемые цветовой схемой137 Таблица 1.3. Базовые свойства Color как шестнадцатеричные константы.138 Таблица 1.4. Выравнивание компонента внутри формы (свойство Align)137

ПРИЛОЖЕНИЕ З139

Таблица 2.1. Функции ввода вывода.139 Таблица 2.2. Математические функции   139

Таблица 2.3. Функции преобразования .

ПРИЛОЖЕНИЕ 4

Таблица 3.1. События.

Литература.142

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