КулЛиб - Классная библиотека! Скачать книги бесплатно
Всего книг - 710199 томов
Объем библиотеки - 1385 Гб.
Всего авторов - 273849
Пользователей - 124893

Последние комментарии

Новое на форуме

Новое в блогах

Впечатления

desertrat про Атыгаев: Юниты (Киберпанк)

Как концепция - отлично. Но с технической точки зрения использования мощностей - не продумано. Примитивная реклама не самое эфективное использование таких мощностей.

Рейтинг: +1 ( 1 за, 0 против).
Влад и мир про Журба: 128 гигабайт Гения (Юмор: прочее)

Я такое не читаю. Для меня это дичь полная. Хватило пару страниц текста. Оценку не ставлю. Я таких ГГ и авторов просто не понимаю. Мы живём с ними в параллельных вселенных мирах. Их ценности и вкусы для меня пустое место. Даже название дебильное, это я вам как инженер по компьютерной техники говорю. Сравнивать человека по объёму памяти актуально только да того момента, пока нет возможности подсоединения внешних накопителей. А раз в

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
Влад и мир про Рокотов: Вечный. Книга II (Боевая фантастика)

Отличный сюжет с новизной.

Рейтинг: 0 ( 0 за, 0 против).
Влад и мир про Борчанинов: Дренг (Альтернативная история)

Хорошая и качественная книга. Побольше бы таких.

Рейтинг: +2 ( 2 за, 0 против).
Влад и мир про Бузлаев: Будильник (СИ) (Юмористическая фантастика)

Начал читать эту юмарную фентази, но чёто быстро под устал от юмора автора и диалогов на "ась". Это смешно только раз, для тупых - два. Но постоянно нудить на одну тему похмельного синдрома не камельфо. Оценку не ставлю, просто не интересно. Я вообще не понимаю пьяниц, от которых смердит метров на 5. Что они пьют? Сколько прожил, сколько не пил с друзьями у нас такого не было, ну максимум если желудок не в порядке или сушняк давит, дышать в

  подробнее ...

Рейтинг: +3 ( 3 за, 0 против).

Программирование на Lazarus [В. Ю. Ачкасов] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Б. Ю. дчнаспв

Прпграмннрпванне
на І.аІагц5

@І/ІНТУИТ
НДЦІ-'ІІІІН.ІїІ.ПЬН ЬІІ-ЁІ ІІІТНР'ЬІТІ:-ІІ-ЁІ ННІ-'ІЕіЕР'СІ-'ІТЕТ

В. Ю. дчнаспв

Программирование на Ьазагиз
2-е издание, исправленное

_АниншшеЕіНЭ.

На ци Ы на чьн ы Й Отирь1ть1й Универ ситет " 1-'ІНТУ І---'1Т"

2016

2
m

В.Ю. Ачкасов

Программирование на Ьазашв

Программирование на Ьакашзі В.Ю. Ачкасов - М.: Национальный Открытый
Университет " ИНТУИТ" , 2016
Е курсе рассматривается среда программирования Ьавашз и компилятор РРС.
І_.а2агн5 - свободно распространяемая среда программирования на Объектом Паскале,
БесплаШь1й аналог Пе1рІ1і. По Этой причине в настоящее время в школах,
университетах, гос. учреждениях пере:-одят на Ьавашв. В курсе подробно
рассматриваются все аспекты создания 'ъЩпсІош'5-приложений.

(С) ооо "интУит_Ру", 2ом~2о1в
(Є) Ачкасав вто., 2014-2015

3
m

Б.Ю. Ачкасов

Программирование на Ьазашз

Введение в Ьазагцз
На зтой лекции вы познакомитесь с великолепной бесплатной средой
разработка программ - Ьавагпв. Узнаете об истории развития языков
программирования, о бесплатной лицензии ВПП, о том, где взять
последнюю версию Ьавашз и как установить ее, напишите свое первое
приложение.

Цель лекции
Знакомство с историей развития языков программирования и диалектов
Ра5са1; первое знакомство с ІІЭЕ Ьавагцв и компилятором Ргее Равса1_;
изучение компонентов ТРопп, ТЬаЬе1, ТВнг[оп; создание первого
проекта.

Исторический экскурс
Историю развития язышэв программирования, пожалуй, можно начать с
первой в мире программистки Ады Лавлейс (Августа Ада Кинс графиня
Лавлейс, математик). Ада Лавлейс родилась 10 декабря 1815 с в
Лондоне, была известна описанием вычислительной машины
(механическая машина Ч. Бзббиджа), в разработке которой она
принимала участие, и созданием первой программы для нее. Ввела в
употребление термины "цикл" и "рабочая ячейка". В честь Ады Лавлейс
в 19'?5 году был назван язык программирования Ада.
Реально языки программирования получили развитие в 1945-1955 гс,
когда появились первые ЭВМ (Электронные Вычислительные
Машины), для которых программы составлялись вначале на машинном
языке, а затем и на Ассемблере - мнемоническом представлении
машинного языка. И если "чистым" машинным языком уже давно никто
не пользуется, то Ассемблер все еще применяется там, где требуется
либо сверхмалый размер программы, либо большая скорость ее работы,
то есть, в основном, для создания критических участков ОС
(Операционных Систем) или драйверов, для программирования
микропроцессоров в различных платах, устройствах. Написать большую
современную программу на Ассемблере - невероятно сложная, а то и
невыполнимая задача.
4
m

Б.Ю. Ачкасов

Программирование на Ьазашз

В 1954 году появился первый язык программирования высокого уровня
Фортран, и началась новая эра развития программирования.
Язык высокого уровня (или высокоуровневый язык) - это язык
программирования, наиболее приближенный к человеческому языку
Он содержит смысловые конструкции, описывает структуры данных,
выполняет над ними различные операции.
Современные языки высокого уровня оперирутот уже целыми
объектами - сложными тюнструкциями, обладающими определенным
состоянием и поведением.
Для обучения программированию и для решения задач общего
назначения
наибольшее
распространение
получил
язык
программирования высокого уровня Паскаль, созданный в 1968-1969 гс
профессором Никпаусом Виртом, и названный в честь выдающегося
французского математика Блеза Паскаля (между прочим, создателя
первой в мире механической машины, скпадывающей два числа). Этот
язык выгодно отличается от других языков программирования более
строгими правилами в описании и использовании данных различного
типа. Паскаль - структурный язык, небольшой и зс]:.фективный,
способствующий
выработке у программиста хорошего
стиля
программирования. В школах и ВУЗах всех стран в мире по сей день
изучают ту или иную реализацию Паскаля.
Посвольку Ьакатнв основан на Паскале (точнее, на Объектном Паскале),
историю других высокоуровневых языков в рамках данного курса мы
рассматривать не будем.
В 1983 с фирма Вот1апс1, известная разработкой Ве1р11і - платного
предшественника Ьакашв, выпустила ТптЬо Равсаі - интегрированную
среду разработки программ на языке Паскаль. Тш'Ьо Ра5са1 - это
компилятор, компоновщик, редактор кода и отладчик в одном окне. Он
подобен швейцарскому ножу, где множество разных инструментов
вмонтировано в единое устройство. Для программистов ТптЬо Равса1
примечателен тем, что он стал своеобразным прародителем сред
быстрой разработки программ.
В 1986 г. появился язык ОЬ]ест Ра5са1 (Обьектный Паскаль),
разработанный в фирме Арр1е Соптршет. Этот диалект Паскаля уже мог
5
m

Б.Ю. Ачкасов

Программирование на Ьазашз

оперировать объектами.
В 1989 с обьектное растшлрение Паскаля было добавлено и в ТптЬо
Ра5са1 фирмы Вотіапо.
В 1994 11 была выпущена первая версия Ве1р11і - Графическая
интегрированная среда быстрой разработки программ для \Аїіпс1омгз.
Этот факт дал невероятный толчок развитию таких сред, в которых
разработка интерфейса программы для программиста вместо нудной
рутины, превращалась в забавный конструктор форм. В современных
средах можно создать программу, даже не дотрагиваясь до клавиатуры исключительно с помощью мыши. Правда, подобной программе вряд ли
можно будет придать сколь-либо полезные функции.
Все эти языки и среды были платными, часто оказывались недоступны
образовательным учреждениям в силу своей дороговизны. В 1993 11
начались работы над проектом Ртее Ра5са1 [РРС - Ртее Разса1 Соглріїет).
Первая версия РРС появилась лишь в июле 2000 с, она была полностью
бесплатная и поддерживала множество платформ: \^.їі1тс1омг5, Ьігшк,
РтееВЅВ, Мас ОЅ Х и т.п. РРС - это бесплатный открытый проект, его
исходные коды для изучения или модификации доступны каждому! Чуть
позже появился Ьакаптв - единственная в мире бесплатная графическая
среда для быстрой разработки программ, использующая компилятор
РРС. Как и РРС, Ьакатпз распространяется на условиях лицензии ЄІЧП
(ЗРЬ (Єепетаі РпЬ1іс Ьісепве). Если не особо вдаваться в юридические
подробности, то БМП (ЗРЬ - это лицензия, предоставляющая
пользователю
права
свободно
и
бесплатно
копировать,
модифицировать и распространять (в том числе и на коммерческой
основе) данный продукт. По этой же лицензии распространяются все
версии ОС (Операционной Системы) Ьіппх - бесплатном и довольно
серьезном конкуренте 'ъ^1і1тс1омгэ.
Итак, мы с вами будем говорить о последней (на момент написания
курса) версии Ьакатпв - 1.0.10, работающей с компилятором РРС 2.6.2.
Ьакашя - молодой и бурно-развивающийся проект, новые версии
выходят довольно часто, так что вы, вероятно, будете пользоваться
более свежей версией. Тем не менее, на курсе рассматриваются
фундаментальные вопросы программирования, которые едва ли будут
пересматриваться. Так что можете изучать предоставленный материал,
6
m

В.Ю. Ачкасов

Программирование на Ьазашз

пользуясь версией Ьакагив 1.0.10 или любой более свежей.
В силу того, что подавляющее большинство пользователей попрежнему работает в операционной системе И/іттсіоигв, мы будем
рассматривать работу с Ьахатоз именно в этой среде (автор использовал
ОС И/і1тооу»т5 ХР ЅРЗ). Рамки курса небезграничны, а описание
особенностей работы в других платформах может лишь запутать
учащихся на начальном этапе.
Впрочем, разработка программ под другие платформы имеет не так уж
много отличий, чтобы создать вам непреодолимые трудности при
переходе на другую платформу

Что такое Ьаватиз?
Ьакашя - это ІВЕ (їптедгатео ]Эеуе1орп1епт Епуітопгпепт) - Интегрированная
Среда Разработки программ, использующая компилятор РРС (Ртее Равса1
Соптріїет), редакторы кода, форм, Инспектор Объектов, отладчик и
многие друтие инструменты.
Еще говорят, что среда Ьаватцв - это НАШ (Каріо Арр1іса1;іоп ІЭеуе1орп1епт) среда Быстрой Разработки Приложений.
До сих пор среды разработки программ, подобные Ьахагцв, были
исключительно платными. Ьаватнв же стал первой (и пока
единственной) ІІЭЕ, доступной образовательным и государственным
учреждениям совершенно бесплатно. Более того, Ьахаптя является
проектом Ореп Ѕоптсе - проектом с открытым исходным кодом. Многие
программисты по всему миру принимают участие в его развитии,
исходный код Ьакаптз доступен для изучения и модификации. Ьакатнв
имеет поддержку множества языков, в том числе и русского, что
выгодно отличает его от других ІВЕ.

Где взять?
Ьакатнз,
как
уже
говорилось,
бесплатный
и
свободно
распространяемый продукт. Благодаря этому Ьакаптз все чаще
используют для изучения программирования в школах и ВУЗах, а таюке
Т
m

В.Ю. дчкасов
Н-Е!

Программирование на Ьазашз

МНОГНХ ПРЕДПРНЯТІ/ІЯХ.

НП

ГДЕ

ЕГО

ВЗЯТЬ?

На

ОфИЦИЕ1.ПЬНОМ

СЗЙТЁ

производителя: ссылка: Ітггр://1ахаш5.1Ёгеера5са].ог5
В правой вершзей части сайта вы увидите следующую картинку:

Текущая платформа

/

Вы-5 ор другои платт[юр мьт
Кногтка закачки
Рис. 1.1. Выбор и закачка необходимой реализации
Здесь вы сможете выбрать реализацию именно под вашу платформу; от
Ёдїіпооигв до Мас ОЅ Х, как 32-х так и 64-х разрядную. При написании
курса использовался 32-х разрядный Ьакагпз для платформы Мїіттсіомтз.
Нажав кнопку "Воул11оасІ Нож" вы скачаете последнюю версию Ьакаптз.
Кроме того, выбрать последнюю необходимую реализацию и скачать ее
вы можете по адресу: ссылка: Ітггрз*/зонгсеїогде.пе[Ірто]естз/1ахагн5/Ше5/
В этом случае, перейдя по ссылкам, вы получите доступ к закачке
нескольких файлов, например,
І Іакаптя-1.0.10-Ґрс-2.6.2-мгіпЗ2.ехе
0 Іаватпз-1.0.10-Ґрс-2.6.2-сго5з-агш-\~*і1тсе-игі1тЗ2.ехе
І КЕАІЭМЕ.тх[

8
m

Б.Ю. Ачкасов

Программирование на Ьазашз

Нам нужен только первый файл из этого списка. Второй файл является
расширением для разработки программ под Мііпсіочув СЕ (она же 'ъ^.їі1тСЕ)
- это вариант операционной системы Містояоїг їдїіпооукв для наладонных
компьютеров, смартфонов и встраиваемых систем. На данном курсе эту
возможность мы рассматривать не будем. Последний файл - простой
текстовый файл с информацией о версии, он нам тоже не нужен.

Как установить?
Ьакагпз устанавливается достаточно просто. Собственно, ничего менять
нам не придется, оставим все параметры, предложенные установщитюм
по умолчанию. Для начала выберем русский язык установки, затем все
время будем нажимать кнопки "Далее". Лишь в предпоследнем окне
установщика при желании можно поставить флажок "С оздать значок на
Рабочем столе". Когда укажем все параметры, начнется установка
І_.а2;ап15. Придется подождать пару минут, пока распакуются и
скопирутотся множество файлов. И, наконец, кнопка "Завершить" для
закрытия окна установщика. Все, Ьазагпз у нас есть! Мы можем его
загрузить.
В СЕІМПМ ННЧНЛЕ І_.ЕІ2ЕіГЦЅ ВЬІГЛЯДНТ НЕСІШЛЬІШ НЕОПРЯТНОІ

9
m

В_Ю_ Ачкасов

Программирование на Ьахашв

›!= ьщгы; шт н.о.1о - ргщеш

[ЫЁЕ Ы

Файл Правка П~:н=:к Вид код Грн:-ап Запуск Пєнвт Сврвнс І-Энн: Сгц:-анна

-Ё, 1 ,іі 1- (Ё [;1 Ё5

Ѕіггпгіагй д±|ншз| спттт са.-ьгыз |оьЬ›;з| они спг±шь| зузъет |ыь=

во |:› т ы-а.а_;.|я Ё!-ёъмсїиіётил
Ннпныггпп шыиггш:

щи нпп

Ё--П |=|3|-1111: ТРЩЩ1

|о.±з л.ш=зз| зупеаъ ||_.=шсц-ага; | атп |п=тп | ст-на | зоыь

Ф ё13%|"=1==›|'||ё|'їг|ГІ:їгг'їЁ'
|_. І_І_.Іг~|

|_ Мп 'Щ

. . _ _ _ _ _ _ _ _ _ _ _

. . . . _ _ _ _ _ _ _ _ _ _ _ _

і і 1

ІІЁЁЁЁЁЁЁЁЁЁЁ

ІІІІІЁЁ2ЁЁЁЁЁЁЁЁ

Н».

-:ихти'|М|М|Ъ< › ЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁЁ
шип

-

:і:::::::::::""':іі:::::::::::::'
:::::::::::::
1 1 1 1 1:1: :::::: :: |ь11, вать, с-:-пъгвтз, огаытісщ 1:1-:.т.:~в=›

йіпп

аІ'Чп1І:

. . _ _ _ _ _ _ _ _ _ _ _

. . . . _ _ _ _ _ _ _ _ _ _ _ _

ЙІОНПГШНІЕЅ

Раз:

. . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

ЁЁІІІІЁЁІІІІЁ

ЁЁЁЁЁІІЁЁІІІІЁЁІ

йЫ'п:ВІоІ'сІ

Роз:
ЕЕ

з нгншз

і

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . _

гахт=›;._аинг:1

д'-Ш5'їГ"д|
пшсбпе

5359
Р-гієе

віпіыазь

ьіьгьтаифь

_
15
-

- Ш

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..

Рзгтег?зРч........._ ёёзеее........ _.

¦

га

_вЁЁЁЁ'ЁЁй'1ЁЁ'....... ,Ё ................... _.
Роггп1
ІІТСпгІ:юі:НІ›:І5Ізп
|:|сПв=ГаЩ
,-,,,_ ,_ _ .,.

І цц.Ъ:І1іІ: гі1:с=1-п:сп1:іппа ]
вплі:

-

='ь:;х;ы:.;::"""""г;.ь±;:.;ии;.:.г
Еспісігп
Е сІ1І|:БеІ'н;|
Спіог
_ _ , __

1

,,ш,1,,

д
_

іггп11=11н=пІ==:1І:іІ:Іп

,,,

Н

› _
_
ВП

""1Ц"ї

Рис. 1.2. Первый запуск Ьаватпв
Ьакагпз состоит из нескольких окон (тюторые стоит подравнятъ, чтобы
они занимали весь рабочий стол и не мешали друг другу):
1.
2.
З.
4.
5.

Главное окно
Инспектор объектов
Редактор форм
Редактор кода
Окно сообщений

10
m

Б_Ю_ Ачкасов

Программирование на Ьаяашз

Ф-зїіл Правка Пон: К

|ппрсІ'1

Н

---

ГІІІІІІЗР-ТІ'

_

Ш

3315-'СР2

ПЗ-'¦ЕІТ

СЕЕЕІ-'РІ

'Ё-КІ-П

'П'І|НЕ'¦-В

- І:Іап:І д±|нш.з| свттт са.-ьгыз |оьЬ9з| вы.: Сп гг шь| зузъет |г-ть:

Ед 2 ЦІ1 1 Е Ё

а.

І_;| Е І І

ь

Ё І.-пп-пгці [ІІ \г1. П 10

гыты-

_

Ь

_..

|о.±а дш==з| зупеаъ ||_ьвсв-ага; | атп |п=тв | ст-на | зошь

х хгїь-±›=тІга?_:1ї 'Ё1Ш||І'=|'=||_\.ШїЁЁ
-=`

-

=_'

НІІПЕІІІТОІІ ПЁЪЦІТ:

:

_

І

:

3

- ,_-_-_-І

д||;||р|щд.д

І=огп11: ТІ=ппп1

^"ЦГІ|СІ.

|'. гг: к|

1

...._.
І

Свойства _ .;.д|5ш-дд

-"*

ДІІЁІІП

ЁІЁЁЁЁІІІІЁЁЁІІІЁЁ9
Спп.І::п1:

д4:І:ітеСпгЬгп|

6:а1:|11.:і.ч:5

ЕІ 1ц1|:н;:

д|із1

.-ъіькогвргіьз

Раіщ

:*ї*'Р.'7*?'.'ї'Е*Т'Е'........ _. .Ёз!зР.............. _.
о'.'?.'??'.'ї'Е*ї'.Р'1*.*?'.'т'Р. _ _ _ Ё55 ............... _.
[аІ Параметры проекта":

І

-__ _

__!

г

5

г

уд

Ґ
нерироввть отладочную информацию для БОВ [медленнее ,І' больше размер_ЁІ

_.
__
Выбор типа отладочнои информации двтоматическии Ц-е)

!:'""':""5""5

Формы
Редактор РІї'І2Іос

Быдевать ном ера ст рок е ошибках времени исполнения І:-р|}

Сеанс РЗБПТЬІ

|:| Генериро вать код для '_«'аІ_;|гіпс! ІІ-ду)

515,-,

І:] Использовать внешний файл отладочных символов 605 Ц-Хо)

Сведения о версии
Ра зное
= ЁІ- Параметры компилятора

отладка

Пт'Т'*1

|:| Использовать модуль Нварсгс (проверка на наличие утечек памяти) ІІ-оп)

Режимы сборки

ОБРЕЕПТКЕ

ВНЄРЄІ ЦНЯ НП 1 =
: -- - --- -

- ,Беда

_

5

|:| Генерировать код для орг-:1Ґ ІІ-ро)
Ш Еіырезать символы из исполнимого файла І:-514511
Стиль компоновки

Рис_ 2.3. Настройки проекта
В разделе "Компоновка" снимите флажок "Генерировать отладочную
информацию для ОІЭВ", нажмите "ОК" и заново запустите программу
После того, как программа запустится, закройте ее и снова посмотрите
на полученный размер. Ну вот, теперь порядок, размер чуть больше
полутора мегабайт. Тоже немало, если разобраться, но вполне терпимо,
учитывая подключенные к проекту стандартные модули с поддержкой
кроссплатформенности_ В дальнейшем вы можете либо не обращать
внимания на размер учебных программ - снимать этот флажок (после
отладки, если она нужна) только для своих готовых реальных проектов,
либо снимать его в каждом новом проекте. Это на ваше усмотрение. А
если вам хочется получить совсем уж малый размер программы, то
МОЖНО

ДОПОЛНИТЕЛЬНО

ВОСПОЛЬЗОВЕІТЬСН

К-ЕІКІІІМ-НИОУДЬ

ПРОГРВММНЬІМ

26
m

В_ІО_ Ачкасов

упаковщиком_ АЅРас11е - Обычное окно `Иїі1тсІоу_т5_
І !овЅ івеТоо1Иіп - Строка заголовка более узкая, кнопки
свернутьіразвернуть отсутствуют, но можно менять размеры окна
мышью, ухвативтшась за край или угол окна.
І 1овТоо1Иіт1с!ои - Как Ь5ЅікеТоо1!/1/іп, но нельзя мышью менять
размеры окна.
Установите значение В _~з В і а 1 о 9 и запустите программу посмотрите на
внетщзий вид полученного окна.
Ропс - шрифт формы и всех компонентов на ней. Когда вы щелкаете по
свойству, в его правой части появляется кнопка с тремя точками:

3?
m

В_Ю_ Ачкасов

Программирование на Ьаеашз

ЕпаЬІесІ

Тше

І=огп':5І:уІе

Ґзтогтаі

"

Рис_ З_2_ Раскрывающее свойство Рош
Если щелкнуть по этой кнопке, откроется диалог выбора шрифта. Если
вы выберите, например, шрифт Тщтев Нек Вощап, обычный, размером
11 пикселей, то это скажется на всех компонентах, расположенных на
форме. Они все получат этот шрифт "в наследство", хотя для отдельных
компонентов затем можно будет выбрать и другой шрифт.
Неіолс - Высота формы_ Размер в пикселях от строки заголовка до
нижней границы формы_ Когда вы мышью меняете размеры формы,
автоматически меняется и это значение. Изменить высоту окна можно и
вручную, указав в этом свойстве нужный размер_ Не работает, если окно
показывается развернутым_
Ье-лїс - Левая граница формы_ Расстояние в пикселях от левой границы
рабочего стола до левой границы формы_ Не работает, если установлено
положение формы по центру рабочего стола (экрана), или окно
РЕ1ЗВЕРНуТО_

Ровісіоп
значения:

-

Положение

формы_

Может принимать

следующие

І ро Во Е ан 1 с - положение окна определяет !и.!і11 10;
Нотчет:
ЅЬоигМеева3е[5);
ево;

Как видите, внутри цикла выполняется два оператора, при этом
никаких скобок 1:›е.~, чтобы уменьпшть размер полученного файла.
7. Сохраняем проект, и заново его запускаем. В результате в папке
11-01 получаем требуемый файл МуС1ос1Сохранить - ~; для команды Файл>Выход можно использовать -=1їСо'1+О>. Откройте редактор главного
меню, выделяйте по очереди в меню Файл подпункты "Открыть",
"Сохранить как" и "Выход". Выберите для этих команд соответствующие
сочетания в свойстве Ѕт1о;г“сСоо. В результате меню приобретет такой
вид:
2??
m

В.ІО. дчкасов

Программирование на Ьакашэ

Окно

ЕЫЫИ

Открыть
СІ:гІ+О
Сохранить ка СІ:гІ+5

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

Панель инструментов
Самый простой способ организовать Панель инструментов установить обычную панель ТРапе1 с настройками свойств Аііоп =
а1Тор, Ап“соЅіяе = Ткие, и уже на эту панель установить кнопки
ТЅреес1Вштоп. И панель, и кнопки мы с вами изучали в лекции ГіІоЗ,
поэтому останавливаться на этом не будем. І/Ізучим друтой, более
профессиональный способ организации панели инструментов.
Для этого нам потребуется томпонент ТТоо1Ваг с вкладтот Сошшоп
Соптто]5 Палитры компонентов:

Проект

їапуск

Пакет
'

Сервис

Окно

пп
мпиццы:ипппмпппппппппппппп
1
пп
1мини:мцпппмпиццыппмпццпммппд_

Справка

"

'

'

' то-кг-1 Тдккігіппкі \З.:€.з.т:т2-П._Е_ет_Рг.з_'ё__ёИ теток Д геи о

[ікі

они

Рис. 16.13. Компонент ТГоо1Ваг
Просто установите его на форму и он сам займет нужное место растянется по всей вершей границе окна. Обрашу ваше внимание на
2?Б
m

Программирование на Ьакатоэ

В.ІО. Ачкасов
НЕКОТОРЫЕ СВОНСТБЕІ КОМПОНЕНТЫ, КОТОРЫЕ МОІЁП

ПРЕДСТЕІВЛЯТЬ ДЛЯ НЕІС

ИНТЕРЕС.

- ССЫЛКЕІ НЕ! СПИСОК І/ІЗООРЕІЪКЕНІ/ІН ДЛЯ КНОПОК

Ішаоеа

панели. Выполняет такую же функцию, как
соответствующее свойство меню.

- ссылка на список изображений, которые будут
привязаны к неактивным кнопкам. Чаще всего это
свойство оставляют пустым, в таком случае у
неактивных кнопок (у которых Е п ао- 1 есі =
Оіааоіеоїшаоеа
Ра 1 а е) будет такое же изображение, как у
активных, но только серого цвета. При желании
для неактивных юаолок можно подобрать
альтернативные изображения.

Нооїшаоеа

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

ЕооеВохоета

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

Ріас

- если Ткие, то кнопки плостоае, как в
современных панелях Ёдііттсїомгз, если Р а 1 а е выпуклые, как в старых программах. По
умолчанию равно Ткие, так лучше и оставить.
- если Ткие, то всплывающие подсказки будут
выходить, если Ра1 зе, то нет. С таким свойством
нам уже доводилось встречаться. На панели
ЕТЕР
m

В.ІО. дчкасов

Программирование на Ьакашэ
ИНСТРУМЕНТОВ ООЫЧНО ОТООРЕЕЖЗІ-ОТСЯ КНОПКИ С

5 Ьошні Ш:

изображениями, но без текста. Пользователь, если
только знакомится с вашей программой, поначалу
может и не сообразить, какая кнопка для чего
нужна. Поэтому в панели инструментов данную
подсказку лучше включать (по умолчанию
Ѕооиніпо = Еаіее). Затем в свойстве Ніос
юзопок вы пропитштте нужные подсказки, и
пользователь сможет их прочитать, тюгда подведет
указатель мыши к той или иной кнопке.

Сделаем на панели Тоо1Ваг1 следуюшие установки:
ЕооеБокоета

І

шаоее

- ВКЛЪОЧЕІЕМ ВСЕ ГРЕІНИЦЫ, ЕСЛИ ЕСТЬ ЖЕЛННИЕ. 191 ЕОООЩЕ

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

Интерфейсная часть
Интерфейсная часть - это открытая часть, начинается со служебного
235
m

В.ІО. Ачкасов

Программирование на Ьакашэ

слова іплет Еасеъ. Здесь можно объявлять глобальные типы,
константы, переменные, фунтщии и процедуры, которые будут доступны
для всех программ и модулей, к которым вы подсоедините данный
модуль. Здесь же при желании вы можете указать служебное слово леев,
после которого перечислить те модули, которые хотите подключить к
этому модулю. Пример (выполнять не нужно):
Ппіт Муїіліт;
ілтегїасе
леев мгіпсїомяв;
сопет
МуРІ = З.1415;
мат
МуСІоЬаГ\їагіаЬ1е: Ілтедег;
Ґштстіоп МуС1оЬа1Рлпс(а, Ь: зтгіпд): Ьоо1еап;
ргосеовге МуСІоЬа]Ргос;

Здесь мы создаем модуль с именем МуОпі*с, который нужно сохранить
в файл с именем МуПпі[.ра5. Далее, мы объявляем интерфейсную часть.
Тут с помощью служебного слова паев (англ. использовать) мы
указываем, что к этому модулю нужно еще подключить модуль
иіпсіока, который входит в стандартную поставку Ьакашв.
Далее, мы объявляем константу МуРІ, которой сразу присваиваем
значение, и переменную Муёіооаіїїатіаоіе. И ъюнстантой, и
переменной можно будет пользоваться извне - там, где будет
подключаться этот модуль.
Далее мы объявляем функцию и процедуру Обратите внимание: только
объявляем! Само описание (код) этих функции и процедуры будет в
разделе исполняемой части (или разделе реализации). В дальнейшем
этими процедурой и функцией мы также сможем пользоваться извне.
ИСПОЛНЯЕМЭЯ ЧЕІСТЬ

Исполняемая часть (раздел реализации) начинается со служебного слова
ітпр іешеплаліоп. Это закрытая часть. Тут описываются те
процедуры и функции, которые были объявлены в интерфейсной части,
235
m

В.ІО. Ачкасов
ПРИЧЕМ

Программирование на Ьакашэ
ЗЗГОЛОБКИ

ПРЕДЬІДУІЦЕМУ

ПОДПРОГРЕІММ ДОЛЖНЬІ

ООЪНВЛЕНИЪО.

ТЕІІОКЕ

ТУТ

В

ТОЧНОСТИ
МОЖНО

СООТВЕТСТВОВЗТЬ

ООЪНВЛНТЬ

ТИПЬІ,

константы и переменные, а также и подпрограммы, которые будут
видны только в этом модуле и не смогут использоваться извне. Пример:
іп1р1ешеп'таЦоо
леев МуО1бПлі[;
мат
МуЬоса1їагіаЬ1е: Ееа1;
Ґштстіоп МуС1оЬа1Рлпс(а, Ь: етгіпд): Ьоо1еал;
Ьедіп
епсї;
ргосеовге МуСІоЬа]Ртос;
Ьеділ
елб;

Как видно из примера, в исполняемой части таюке можно подключать
внешние
модули.
Здесь
же
мы
объявили
переменную
Му1.оса1\Еа1:іа1о1еъ, она является глобальной внутри этого модуля, то
есть, её можно использовать в функции и процедуре, однако извне она
не будет видна. Далее у нас идет реализация (описание) объявленных
ранее подпрограмм.

Инициирующая и завершающая части
ЭТИ ЧЕІСТИ МОДҐЕЛЯ НЕООЯЗЕІТЕЛЬНЬІ, ИХ МОЖНО НЕ УКЕІЗЬІВЗТЬ, КЕІК ПІЗЕІВИЛО,
ИХ И НЕ ИСПОЛЬЗУІ-ОТ.

Инициирующая
часть
начинается
служебным
словом
іпіліаііяасіоп и содержит код, который будет выполнен только
один раз - до передачи управления в основную программу Тут можно
сделать какую то подготовительную работу - открыть нужный файл,
присвоить значения каким то переменным и т.п.
23?
m

В.ІО. Ачкасов

Программирование на Ьакашэ

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

Конец модултя
Модуль завершается служебным словом епсі с точкой в 1-юнце. Это
единственный случай, когда после епсі ставится не точка с запятой, а
точка. Весь дальнейший текст, если он есть, компилятором будет
игнорирован. Кроме того, если дальнейший текст не соответствует
синтаксису; компилятор выведет сообщение об оллабке, и не даст
скомпилировать программу Так что, если вам нужно указать какие то
комментарии, например, с советами как пользоваться модулем,
рекомендую делать их между фигурными съюбками в самом начале
модуля, даже до служебного слова Опіс. Так обычно и делают. А вот
после ооо с точкой уже ничего писать не нужно.

Создание модуля
Ну вот, с теорией покончили, приступим к практике. Как уже
говорилось выше, сейчас мы с вами реализуем "защиту от дураков".
Допустим, в программе у нас имеются компоненты ТЕс1іс, в которые
пользователь должен вписать какое-то число - целое без знака, целое со
знаком или вещественное, которое еще называют действительным
числом. Должен то он должен, но кто может предположить, что он туда
на самом деле введет? Может быть, слово, скобки, знак процента пользователь непредсказуем! Как сказал один мудрый программист,
"Если есть хоть малейшая возможность ввести в программу
неправильные данные, пользователь эту возможность непременно
найдет". Наша с вами задача - предусмотреть всё и лишить его этой
возможности. Ведь нам в дальнейшем придется преобразовывать это
число из текстового формата в настоящие числа, используя
ЅстТоІпс { ) , Ѕ*схТоР1оас () и т.п. функции. Если же пользователь
ВВЕДЕТ ОПІИООЧНЬІЕ ДЕІННЬІЕ, ТО ПРОГРЕІММЕІ ВЬІЗОБЕТ

Посъюльку делать такие проверки программисту приходится довольно
283
m

В.ІО. Ачкасов

Программирование на Ьакашэ

часто, имеет смысл реализовать их в виде отдельного модуля, который
затем можно будет подключить к любой программе. И этот модуль будет
началом нашей библиотеки модулей, которую, как я надеюсь, вы будете
постоянно пополнять как своим, так и чужим кодом.
Модуль - это текстовый файл с расширением *.ра5, который можно
создать в любом текстовом редакторе. Однако будет удобней
воспользоваться Редактором кода Ьакагое - он подсвечивает синтаксис
кода, выводит подсказки, при нажатии выводит список с часто
используемым командами. Так что для начала откроем Ьакаге. Если там
загрузился предыдущий или новый проект, то командой меню Файл?-=~Закрыть закройте его. Далее, выберите команду Файл->Создать
модуль.
Сразу же появится заготовка модуля со следующим кодом:
ъшіт Шлі[1;
{$шобе оЬ]ҐрС} {$Н+}
іптетїасе
ивее
С1а55е5, Ѕу5ПШ5;
іп1р1ешеп'таЦоо
ево.

Имя модуля по умолчанию Опісі - оно ни о чем нам не говорит,
заменим его на лпшоете. Далее, идут директивы компилятору, затем
интерфейсная часть с двумя подключенными модулями - их отключать
не будем, постольку там могут содержаться описания глобальных
переменных, констант, подпрограмм, которые могут нам понадобиться.
В частности, для проверки правильности ввода разделителя в
вещественное число, мы используем системную переменную
Блэсіша1Ѕерака1:от, которая описана в одном из этих модулей, и
КОТОРУІ-О ОЕЗ НЕГО НЕ ПОЛУЧИТСН ИСПОЛЬЗОВЕІТЬ.

Целиком код модуля следующий (можете просто скопировать его
отсюда):
Л---- -- Начало модуля ------- -{В модуле описаны две функции, которые проверяют правильность ввс
239
m

В.Ю. дчкасов

Программирование на Ьакашэ

пользователем символа. Функция ТшеІп[Кеу5 проверяет целые числа и
параметры: кеу - введенный пользователем символ; ан - строка в ТЕс1іІ
зідл - если Тгие, то число со знаком, если Б`а]5е - без знака. Если пользователь ввел правильный символ, функция его не изменяет, иначе возву
символ #0 - то есть, ничего. Функция ТглеР1оаЪКеу5 аналогичным обра:
делает проверку вещественных чисел. Пример использования:
Кеу:: ТглеІптКеуе(Кеу, Ес1іІ1.Тех[, Тгое); І/целое со знаком
Кеу:: ТтлеІп[Кеуе(Кеу, Ес1іт1.Техт, Ра]5е); //целое без знака
Кеу:= ТглеР1оаЪКеу5(Кеу, Е(1іІ1.Тех[); //вещественное

}
лпіт Ышпіоегв;
{$шоІ_Пифровать" очень простой:
ргосеоше ТЁМаіп.СооегС ос1еСІіс1-{(Ѕелс1ег: ТОЬ]ес[);
Ьееіп
//сначала очистим ключ:
МуСгірІ.МуРа55и›*огс1:= ";
Ё Іпрц[Опе1'у(`Ввод клъоча', 'Введите ключевое слово [фразу):',
МуС гірІ.МуРаввмгогс1) Шел
Мел1о1.ТехІ:= МуСгір[.\^ігіІе(МуС гірІ.Елсгур[(Меп1о1.ТехІ));
321]
m

Б.Ю. Ачкасов

Программирование на Ьакашз

елсї;

Вначале мы очищаем ключ. Делается это на всякий случай, вдруг это
уже не первое шифрование, тогда в глобальной переменной
МуРаввиокс1 будет храниться предыдущий ключ. Или представьте
такую ситуацию: пользователь вводил личный текст, ему понадобилось
отлучиться, и он его заїшафровал. Если ключ в переменной сохраняется,
любой может подойти и расшифровать его. Элементарная безопасность
требует, чтобы мы всегда очищали ключ.
Затем, с помощью Іпрпсфпегу (} мы выводим запрос, в котором
пользователь может ввести пароль - ключевое слово или фразу Этот
ключ мы помещаем в переменную МуРав зыогсі, после чего вызываем
шифрацию текста Мешо так, как было указано в рекомендациях модуля
МуС1:ірс. Дешифрация ("Кодирование-31*-Дешифровать") происходит
похожим образом:
ргосеовге ТіМаїп.Сооег1Эесос1еС їїсІО программе", мы вернемся к
ней в другой лекции, где будем изучать многооконные приложения, так
что не удаляйте пока этот проект. Он нам также понадобится в лекциях
Е и Щ, где мы будем создавать для этого проекта справочную систему и
инсталлятор.

321
m

В.Ю. Ачкасов

Программирование на Ьакашз

Деревья
ЛЕКЦИН

ПСІСВЯЩЕНЕІ

РЕІБОТЕ

С

ДРЕВОВИДНЬІМИ

ИЕРЕІРШІЧЕСКИМИ

структурами данных, и компонентом ТТгееЧїемг. На практике показаны
все основные действия с компонентом.

Цель лекции
Применение компонента ТТ1:ее'\Ііеи для работы с древовидными
иерархическими данными.

Дерево ТТгее\/іетл
Компонент ТТгее*\їіе-и расположен на вкладке Сопллоп Солсгоїз
Палитры компонентов, и предназначен для отображения различных
древовидных иерархических структур:

Ёайл

Ш:-эвка

Поиск

Ёнд

Ш _±1* Е] чо Ё


Ёод

Проект

Ё-эпуск

Пакет

Ёёз.'чз"Е" діёётп

Ц.Е|,Ё_;Ё

Сервис

Окно

Ё

їч-зі
ІПШЁ

Рис. 19.1. Компонент ТТгее\Г1емг
Мы часто сталкиваемся с иерархической информацией. Это может быть
т.н. Дерево каталогов в стандартном Проводнике Иїіпсїомгз, которое
отображает в виде ветвей дерева внепшие и вложенные папки, и
файлы, которые там хранятся. Это может быть структура предприятия,
библиотечный каталогизатор, структура книги, реферата, курсовой... В
общем, самая разная информация, в которой присутствуют родительские
и дочерние (вложенные) объекты. Все подобные объекты можно
отобразить с помощью компонента ТТ гееїїіеи.
Объекты, которые содержаться в данном компоненте называются
узлами (англ. лосїе), а сам компонент представляет собой список узлов.
Подобно спискам ТЬів“сВ-ох и ТСотп1ооВох, с которыми мы уже
322
m

В.ІО. Ачкасов

Программирование на Ьакашз

знакомы, ТТгее*~.?іек имеет свойство Ісегпз - индексированный
список узлов. Каждый узел - это объект, который имеет тип
ТТ:г:ееЫосїе. И родительские, и вложенные в них дочерние элементы всё это узлы (объекты) типа ТТкее~І\Іосїе. Причем дочерний элемент
одновременно может быть родителем по отношению к другому узлу,
уровень вложенности неограничен.
Но давайте-ка всё по порядку Рассмотрим работу компонента на
примере библиотечного каталога. Откройте Ьаяапїв с новым проектом.
Как обычно, форму назовите ЁМаіл, проект сохраните под именем
Му1.ії:>1:аку в папку 19-01, модулю формы дайте имя Маїп. В свойстве
Сарліоп формы напишите Библиотечный каталог. Саму форму
немного растяните, пусть у нас будет высота 350, а їштрина 500
пикселей.
Далее, установим на форму простую панель ТРапе1, из нее мы
сделаем своеобразную Панель инструментов программы. У панели
очистите свойство Сарсіоп, в свойстве Аїі-оп установите а1І.е±Е*с,
в свойстве кїісісїч 12? пикселей.
Далее, на полученную Панель инструментов одну за другой установите
7 простых кнопок ТВї1поп. У всех кнопок в свойстве Ьеїс установите
значение 1, а в свойстве Ъчїісїсо - значение 125. Верхнюю кнопку
расположите повыше (Т ор = 1), остальные - чуть ниже, чтобы между
кнопками
было совсем небольшое расстояние.
Нам нужно
переименовать кнопки и сделать на них соответствующие надписи.
Сделайте следующие настройки кнопок:
Таблица 19.1. Настройки свойств
кнопок
Наше
ІоЫе±кІ×Іо,
и удерживая его, наберите 0169. Затем отпустите .
Например, пользователь ввел:
12 3.45

Как только он нажмет -=іЕлтег>, в переменную і попадет число 12, а в г
- число 3,45. Если пользователь введет некорректные данные, не
соответствующие типу переменной, то возникает опмбка и программа
аварийно завершает работу
Пользователь может ввести больше данных, чем указано переменных в
процедуре теасї. В этом случае, оставллаеся данные будут обработаны
следующей процедурой теасї. Например, пользователь ввел:
1 2З 455

и нажал . Эти данные могут быть обработаны следующими
инструкциями:
геас!(а, Ь);
геас!(с);

Процедура Еда-асі1л
если пользователь
лиїшаие данные в
обрубает их. То есть,

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

геас!1п(а, Ь);
35?
m

В.ЪО. Ачкасов

Программирование на Ьакашз

геас!(с);

то в а и Ь попадут числа 1 и 23, после чего программа будет ожидать
следующих данных, а число 456 потеряется_
Если указать хе.-эс! или 1:еао!1л без параметров, например, так:
геас!1п();

то программа просто перейдет в режим ожидания, пока пользователь не
введет . В конце консольных приложений всегда желательно
указывать такую пустую теас!1л, иначе программа просто мишет и
выключится, не дав пользователю увидеть результаты работы. Или
можно как-то иначе обеспечить работу программы до тех пор, пока
пользователь сам не захочет ее закрыть. Например, иногда
программисты выводят сообщение типа "Продолжить работу
программы? О-нет, 1-да". Если пользователь введет 0, то программа
заверлштся, а если 1, то продолжит работу Какой способ использовать дело ваше.
Чтобы пользователь понимал, чего от него хочет программа, перед
каждой инструкцией хеа-::1 или теас11л следует с помощью игісе
или кг і 1: е 1 л выводить поясняющий текст.
Вернемся к нашей программе, и немного изменим код (между Ьеоіл и
елсі . ):
Ьевіп
итї[е('Введите первое целое число: ');
геао1л(а);
\~тїге('Введите второе целое число: ');
геас!1л(Ь);
\~тї[е1п('Результат:');
\угіїе1п('Переменная а = `, а, '; переменная Ь = ', Ь);
геас!1л();
елсї.

355
m

В.ІО. Ачкасов

Программирование на Ьакатнэ

Теперь программа выводит запрос "Введите

первое

ЗЕІМИРЕІЕТ, ОРКИДЕІЯ ОТ ПОЛЬЗОВЕІТЕЛЯ ВВОДЕ1 ДЕІІ-ІНЬІХ.

число : ", и

ПОСЛЕ ТОГО, КЕІК ОН

ВВЕДЕТ ЧИСЛО И НЕІЁЁКМЕТ ЁЕПҐЕҐЕ, ПРОГРЕІММЕІ ТЕІКИМ ЖЕ ООРЕІЭОМ ЭЕІПРОСИТ
ВТОРОЕ

ЧИСЛО.

ЗЕІТЕМ

ОНЕІ

ВЬІВЕДЕТ

РЕЭЬЧІЬТЕІТ,

И

ОУДЕТ

ОЖИДНТЬ,

ПОКЕІ

ПОЛЬЭОВЕІТЕЛЬ НЕ НЄОКМЕТ '“їЕІ`ІїЕГ>І

Рис. 21.4. Результат работы программы
ПЕІРЕІМЕТРЬІ КОНСОЛЬНОГО ПРИЛОЖЕНИЯ

Нередко системные консольные программы вызываются с какими-то
параметрами. Например, в їдїїлсїоуув можно нажать "Пуск -із Выполнить"
и указать следующую команду:
рілд 12?.0.0.1 -г

В результате будет запущена консольная утилита ріпо . ехе, которая
делает трассировку (обмен данными) с указанным ІР-адресом. Таким
образом, проверяют, есть ли связь с данным адресом. В примере
программа запускается с двумя параметрами. Первым параметром
является ІР-адрес 127.О.0.1 - это адрес локальной машины, обращаясь к
127.0.0.1, вы обращаетесь к своему же компьютеру Вторым параметром
является

-1
Этот параметр указывает утилите, что не следует завершать обмен
данными, пока пользователь сам не прервет работу программы. Если не
указать -с., программа сделает 4 попытки отправить данные, после чего
заверїшгт свою работу С параметром -1: программа будет работать, пока
359
m

В.ІО. Ачкасов

Программирование на Ьакашз

пользователь не нажмет
Вставить". При этом все нужные компоненты появятся на форме на том
же самом месте. Кроме того, они сохранят свои имена и прочие
настройки. Подкорректируйте размер формы. Теперь переименуйте
формув ЁМаіп, в Сарсіоп напишите "Динамическое связывание
13:~Ь1.", в Во1: