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

Разработка прикладных программ для ОС WINDOWS с помощью интегрированных сред Delphi / C++Builder: Учебно-методическое пособие

Голосов: 2

Данное пособие предназначено для студентов II-V курсов, обучающихся или выполняющих лабораторные и практические задания по курсу "Прикладное программирование" или создающих программное обеспечение (ПО) общего класса в среде операционный системы (ОС) WINDOWS (все версии). Изложены основы создания WINDOWS-интерфейса прикладных программ с помощью RAD-систем (Rapid Application Design) Delphi и C++Builder фирмы Borland. Рассмотрены вопросы практического применения интерфейсных элементов WINDOWS для ввода и вывода пользовательских данных и управления выполнением программы. Приведена информация о Delphi-подобной RAD-системе Kylix (http://www.borland.ru/kylix/) для работы в среде ОС Linux. Данное пособие не является полным и всеобъемлющим руководством по созданию прикладных программ с помощью Delphi и C++Builder (для изучения конкретных вопросов следует обратиться к соответствующим литературным источникам); однако после изучения пособия имеющий некоторый опыт создания ДОС-программ, программирования на языке Pascal и C++ и навигации в WINDOWS пользователь вполне сможет разрабатывать простые интерфейсы в стиле WINDOWS.

Приведенный ниже текст получен путем автоматического извлечения из оригинального PDF-документа и предназначен для предварительного просмотра.
Изображения (картинки, формулы, графики) отсутствуют.
             МОСКОВСКАЯ ГОСУДАРСТВЕННАЯ АКАДЕМИЯ
МГАПИ       ПРИБОРОСТРОЕНИЯ И ИНФОРМАТИКИ



        Кафедра ‘Персональные компьютеры и сети’




                      В.М.Баканов




        Разработка прикладных программ для
             ОС WINDOWS с помощью
               интегрированных сред
                 Delphi / C++Builder




                        Москва
                         2000


                                      -2-


АННОТАЦИЯ

    Данное пособие предназначено для студентов II ÷ V курсов, обучающихся
или выполняющих лабораторные и практические задания по курсу 'При-
кладное программирование' или создающих программное обеспечение (ПО)
общего класса в среде операционный системы (ОС) WINDOWS (все версии).
    Изложены основы создания WINDOWS-интерфейса прикладных про-
грамм с помощью          RAD-систем (Rapid Application Design) Delphi и
C++Builder фирмы Borland. Рассмотрены вопросы практического примене-
ния интерфейсных элементов WINDOWS для ввода и вывода пользователь-
ских данных и управления выполнением программы. Приведена информация
о             Delphi-подобной                 RAD-системе             Kylix
(http://www.borland.ru/kylix/index.html) для работы в среде ОС Linux.
    Данное пособие НЕ ЯВЛЯЕТСЯ полным и всеобъемлющим руководством
по созданию прикладных программ с помощью Delphi и C++Builder (для
изучения конкретных вопросов следует обратиться к соответствующим лите-
ратурным источникам); однако после изучения пособия имеющий некото-
рый опыт создания ДОС-программ, программирования на языке Pascal и C++
и навигации в WINDOWS пользователь вполне сможет разрабатывать про-
стые интерфейсы в стиле WINDOWS.
     Требуемое аппаратное обеспечение для проведения работ - ПЭВМ клас-
са IBM PC не хуже АТ/586 с размером ОП более 32 Мбайт с твердым диском
объемом не менее нескольких Гбайт, дисплей класса не хуже VGA. Пакеты
Delphi и C++Builder требуют более 150 ÷ 250 Мбайт дискового пространст-
ва. Последняя версия данного методического пособия может быть получена
в виде файла http://pilger.mgapi.edu/metods/borland.zip.

Автор: доцент, к.т.н. Баканов В.М.
Рецензент: доцент, к.т.н. Гонихин О.Д.
Научный редактор: профессор, д.т.н. Михайлов Б.М.
Работа рассмотрена и одобрена на заседании кафедры
ИТ-4 МГАПИ ____________ 2001 года.


Заведующий кафедрой ИТ-4 профессор, д.т.н.                  Б.М.Михайлов


Предыдущие     ©   Разработка WINDOWS - интерфейса прикладных программ
издания:           в среде Borland DELPHI. -М.: МГАПИ, 1997, -63 С.
               ©   Разработка WINDOWS - интерфейса прикладных программ
                   с помощью интегрированных сред DELPHI / C++Builder. -М.:
                   МГАПИ, 1998, -69 С.


                                                              -3-


СОДЕРЖАНИЕ

Введение ......................................................................................................
1. Цель работы..............................................................................................
2. Модель программирования и концепция многозадачности в
  операционной системе WINDOWS........................................................
  2.1. WINDOWS - операционная система, управляемая событиями....
  2.2. Понятие о сообщениях WINDOWS и их обработке......................
  2.З. Два способа передачи сообщений...................................................
3. Интегрированные среды Delphi / C++Builder.......................................
  3.1. Считывание, сохранение и создание проектов..............................
  3.2. Oсновные файлы проекта Delphi.....................................................
4. Создание простых WINDOWS-приложений........................................
 4.1. Форма - основа разработки приложения в Delphi............................
    4.1.1. Настройка свойств формы..........................................................
    4.1.2. Настройка связи событий с процедурами их обработки.........
    4.1.3. Установка свойств во время выполнения приложения............
    4.1.4. Модальный и немодальный диалоги..........................................
    4.1.5. Стандартные формы-панели сообщений...................................
    4.1.6. Статическое и динамическое использование компонентов....
5. Часто используемые элементы WINDOWS и их применение............
  5.1. Полезные               невизуальные                      объекты                  Delphi                /
C++Builder...................
    5.1.1. Класс TStringList...........................................................................
    5.1.2. Класс ТТimer.................................................................................
  5.2. Компонент TEdit...............................................................................
  5.З. Компонент TMemo............................................................................
  5.4. Koмпонент TLabeL............................................................................
  5.5. Компонент TCheckBox......................................................................
  5.6. Компонент TListBox..........................................................................
  5.7. Компонент TComboBox....................................................................
  5.8. Компонент TRadioGroup...................................................................
  5.9. Koмпонент TPanel..............................................................................
  5.10. Компонент TBitBtn..........................................................................
  5.11. Компонент TMediaPlayer................................................................
  5.12. Koмпонент TDriveComboBox.........................................................
  5.13. Koмпонент TDirectoryListBox........................................................
  5.14. Koмпонент TFileListBox.................................................................
  5.15. Koмпонент TBiSwitch.....................................................................
  5.16. Koмпонент TSpinEdit......................................................................
  5.17. Koмпонент TDirectoryOutline.........................................................
  5.18. Koмпонент Tgauge...........................................................................


                                                            -4-


  5.19. Koмпонент Timage...........................................................................
  5.20. Стандартные диалоговые окна WINDOWS и их применение....
    5.20.1. Компонент TOpenDialog............................................................
    5.20.2. Koмпонент TSaveDialog.............................................................
    5.20.3. Компонент TFontDialog............................................................
     5.20.4. Компонент TColorDialog.........................................................
     5.20.5. Компонент TPrintDialog...........................................................
     5.20.6. Koмпонент TPrintSetupDialog.................................................
     5.20.7. Koмпонент TFindDialog...........................................................
     5.20.8. Koмпонент TReplaceDialog.....................................................
  5.21. Дополнительные компоненты Delphi и C++Builder....................
  5.22. Поддержка технологий DDE и OLE в Delphi и C++Builder........
6. Стандартные меню WINDOWS..............................................................
  6.1. Компонент ТМаinМеnu.....................................................................
  6.2. Компонент ТРорuрМеnu...................................................................
7. Рисование в Delphi и класс TCanvas......................................................
8. Печать в Delphi.........................................................................................
9. Некоторые полезные функции и приемы программирования
  в Delphi и C++Builder...............................................................................
  9.1. Часто используемые функции и процедуры...................................
  9.2. Приемы работы с командной строкой
       и процессами-потомками...................................................................
  9.3. Создание интерфейса, независимого от размеров окна................
  9.4. Oбработка ошибок и исключительных ситуаций..........................
  9.5. Шаблоны приложений и форм.........................................................
10. Пример создания реального приложения в Delphi............................
11. Возможность прямых системных вызовов WINDOWS....................
12. Использование компилятора с командной строкой...........................
13. 0сновные отличия синтаксиса C++Builder'a от Delphi......................
Заключение...................................................................................................
Список рекомендуемой литературы..........................................................




ВВЕДЕНИЕ


                                    -5-




    Известно, что до 50 ÷ 70% времени на создание (с помощью традиционных
средств) программного обеспечения (и часто столько же по объему) прихо-
дится на разработку интерфейсной части программы (функционирование
окон ввода и вывода данных, управление режимами функционирования про-
граммы etc). Современные операционные системы (например, ОС WIN-
DOWS, [1]), снабженные графическим интерфейсом и набором стандартных
интерфейсных элементов, значительно облегчают нелегкий (и часто непри-
ятный) процесс разработки интерфейса пользователя.
    С другой стороны пользователь не отказался бы от механизма, облегчаю-
щего рутинную работу по программированию повторяющихся участков кода
- таймеров, блоков обращения к базам данных, системам статистической об-
работки данных и разрешения стандартных математических уравнений, под-
системам сетевого доступа и многих других.
    Начало 90-х годов ознаменовалось значительным ростом аппаратных воз-
можностей персональных ЭВМ (ПЭВМ) и, в связи с этим, массовым перехо-
дом к использованию оболочки WINDOWS разработки Microsoft Corporation,
снабженной дружественным графическим интерфейсом и обладающей воз-
можностью многозадачности. Полное соответствие международным стандар-
там CUA (Common User Access), огромный набор системных процедур WIN-
DOWS и отсутствие ограничений на создание собственных (концепция DLL-
библиотек), возможность доступа к оперативной памяти практически неогра-
ниченного объема и многие другие поддерживаемые возможности обуслови-
ли применение WINDOWS почти на каждом оснащенном ПЭВМ рабочем
месте. Дальнейшее перерастание оболочки WINDOWS'3.1 в полноценную
операционную систему WINDOWS'9x/WINDOWS’NT еще более увеличило
интерес к ней (не всегда, впрочем, полностью оправданный).
    Однако переход к новому поколению программных средств разработки
прикладных пользовательских программ значительно (до 3 ÷ 5 лет) задержал-
ся - программирование под WINDOWS на 'старом добром' С (или Pascal'е)
более чем нерационально, работа на C++ непроста даже с использованием
библиотек классов MFCL (Microsoft Foundation Class Library) фирмы Micro-
soft Corp. и OWL (Object Windows Library) фирмы Borland. Явно необходим
был новый подход к созданию программного продукта уровня разработчика,
что позволяло самому широкому классу программистов включиться в беско-
нечную гонку создания собственных WINDOWS-приложений.
    Новый подход действительно был разработан; соответствующие системы
были названы RAD (Rapid Application Design - среды быстрой разработки
приложений); основа этих систем - соответствующая библиотека классов
VCL (Visual Components Library - библиотека визуализируемых классов). Ко-
нечно, RAD-системы не появились на пустом месте - одним из их 'прародит-
елей' была широко известная библиотека Turbo Vision (имеющаяся в С- и


                                    -6-


Pascal-вариантах разработки Borland), полностью основанная на плодотвор-
нейших идеях программирования конца 20 века - объектно-ориентированном
программировании (ООП). После внедрения Turbo Vision оставался лишь
один прямо напрашивающийся шаг - добавление возможностей работы с
объектами как с визуальными сущностями именно на этапе проектирования
интерфейса - DesignTime (используя естественную для WINDOWS
концепцию 'перетаскивания' - Drag&Drop), и этот шаг был сделан в основан-
ных на VCL-подходе RAD-системах.
   В первом пятилетии 90-х годов приблизительно одновременно появились
первые RAD-продукты - Visual Basic и Visual C++ (Microsoft Corp.), Delphi
(Borland), Optima C++ и некоторые другие.
   С точки зрения автора (давнего приверженца интегрированных сред фир-
мы Borland), наиболее удобным RAD-пакетом являются системы класса Del-
phi / C++Builder (http://www.borland.com.ru), обладающая удачным соот-
ношением между сложностью (а значит, и определенной негибкостью при
использовании) и широтой набора объектов (как визуальных, так и невизу-
альных, что как раз и определяет гибкость). Огромным преимуществом ин-
тегрированных сред (ИС) Delphi (http://www.borland.com.ru/delphi) и
C++Builder (http://www.borland.com.ru/cbuilder) является значительная от-
крытость системы - возможно добавление (и удаление) специфических объ-
ектов (в соответствии с требованиями конкретного разработчика - например,
разработчика баз данных, специалиста по численному моделированию, соз-
дателя малтимедиа-приложений etc); в настоящее время существуют (часто
бесплатно распространяемые) сотни мегабайт самых разнообразных объек-
тов, разработанных третьими фирмами и/или независимыми разработчиками.
Наличие компилятора с командной строкой в стиле MS-DOS, поставляемые в
комплекте EXPERT'ы (аналоги WIZARD'ов фирмы Microsoft Corp.), регу-
лярный выпуск новых версий Delphi делают Delphi не только удобным, но
перспективным продуктом разработчика.
   Недостатки Delphi - определенная 'раздутость' выполняемых файлов (все-
гда являющаяся оборотной стороной легкости этапа разработки); причем не-
возможность множественного наследования в базовом для Delphi языке про-
граммирования Borland Object Pascal 8.0 практически не ограничивает раз-
работчика.
   Весной 1997 году Borland выпустила полностью С-базированную версии
RAD / VCL-среды (получившую название Borland C++Builder), что позво-
лило включить в список сегодняшних клиентов фирмы Borland армаду С-
программистов. Есть надежды на достаточно быстрое и безболезненное вне-
дрение C++Builder'a в практику разработчиков WINDOWS-приложений (хо-
тя разработчики Borland не славятся эффективными С-компиляторами). На-
бор (палитра) компонентов C++Builder'a полностью соответствует таковой
для Delphi. Последние версии указанных пакетов отличаются мощной под-


                                    -7-


держкой разработки программных продуктов, предназначенных для эксплуа-
тации в сети InterNet и объектов ActiveX.
    В целом семейство интегрированных сред Delphi / C++Builder фирмы
Borland столь хороши, что более чем конкурентоспособны с (несколько запо-
здавшим) пакетом Developer Studio фирмы Microsoft Corp. На грани нового
21 века Borland предложила аналог Delphi для разработки приложений на
платформе      Linux      -     интегрированную      среду   Kylix   [14]
(http://www.borland.ru/kylix/index.html), существенно расширяющую область
применения ПО данной фирмы.
    Разработчики пакетов Delphi и C++Builder расширяют ассортимент своих
продуктов в иные области информационных технологий

 • Поддержка Java-ориентированных технологий многоплатформенных
   приложений - собственноразработанная интегрированная среда JBuilder
   (http://www.borland.com.ru/jbuilder).
 • Разработка средств управления и мониторинга объектных распределен-
   ных систем Inprise AppCenter (управление объектами технологии
   CORBA         и          Enterprise    Java    Beans   (EJB),    см.
   http://www.borland.com.ru/appcenter.
 • Применение интегрированного комплекса средств Inprise Application
   Server     (IAS)     на   основе    стандартов   CORBA     и   J2EE
   (http://www.borland.com.ru/appserver).
 • Внедрения многозвенной архитектуры MIDAS (MulIi-tier Distributed Ap-
   plication Services); данная технология расширяет возможности предло-
   женной ранее Microsoft Corp. технологии DCOM (Distributed Component
   Object Model) и поддерживается начиная с Delphi 3 и C++Builder 3
   (http://www.borland.com.ru/midas).

   Таким образом, в данной работе именно система Delphi выбрана базовой
для разработки пользовательских WINDOWS-приложений; в соответствую-
щих местах после заголовка абзаца C++Builder будут приведены данные по
пакету C++Builder; подробнее о различиях см. также раздел 13.
   На WEB-сайте http://imc.misa.ac.ru/pilger_roll автора данной работы
можно найти примеры разработок на Delphi и C++Builder, иллюстрирующие
некоторые особенности применения указанных ИС.
   Введение в возможности Delphi и C++Builder по работе с базами данных
приведено в методической разработке 'Введение в язык SQL запросов к базам
данных' того же автора.

1. ЦЕЛЬ РАБОТЫ

   Целью работы является дать первоначальные теоретические знания о


                                     -8-


функционировании ОС WINDOWS и рассмотреть практические основы соз-
дания приложений в системах Delphi / C++Builder. После ознакомления с
данным методическим руководством (желательно параллельно с работой на
ПЭВМ) пользователь сможет разрабатывать простые WINDOWS-
приложения; данная основа и постоянная практика позволят программисту
стать профессионалом.
    Для желающих самостоятельно изучать дополнительную литературу (а
это наряду с ежедневной работой на ЭВМ является единственным способом
приобрести профессиональные знания) можно рекомендовать литературные
источники [1] для ознакомления с идеологией функционирования WIN-
DOWS, [2] для знакомства с объектно-ориентированной версией языка Pas-
cal, источник [3] для освоения малтимедийных возможностей WINDOWS, [4]
для изучения функций WINDOWS API, [5,10] для создания приложений с
помощью Delphi, [6,7,10] для освоения возможностей Delphi по работе с ба-
зами данных, [7] для практики работы с Delphi (в частности, разработки соб-
ственных компонентов), [8] как прекрасный справочник по стандартным
компонентам Delphi и [9] в качестве руководства для продвинутых Delphi-
программистов.
    Для ознакомления с версией C++ для C++Builder'a можно рекомендовать
работу [11].

2. МОДЕЛЬ ПРОГРАММИРОВАНИЯ И КОНЦЕПЦИЯ
   МНОГОЗАДАЧНОСТИ В ОПЕРАЦИОННОЙ
   СИСТЕМЕ WINDOWS

   Принципиальная разница между программированием на стандартном
языке С и программированием в WINDOWS состоит в том, что все програм-
мы для WINDOWS разрабатываются на основе понятия передачи сообщений.
Каждая программа для WINDOWS имеет цикл ввода сообщений и (для каж-
дого из окон) - свою процедуру обработки сообщений.
   Таким образом, сущность программирования в WINDOWS состоит в при-
нятии сообщения (а при необходимости и генерации оного), пересылке его в
то окно, для которого оно предназначено, возможно быстрой обработке этого
сообщения и возврата к чтению следующего сообщения [1].
   Зачем передавать сообщения ? Дело в том, что WINDOWS - многозадач-
ная ОС, способная выполнять одновременно несколько программ; при этом
ни одна программа не должна захватывать центральный процессор (ЦП) на
слишком долгое время (так как это может вызвать ошибки в параллельно вы-
полняемых и чувствительных к замедлению программах). В приоритетных
многозадачных ОС (например, UNIX) выполнение программы прерывается
по истечению априорно отведенного ей кванта времени (даже если в этот
момент заканчивается важная и неотложная операция). В WINDOWS парал-


                                    -9-


лельное выполнение не является приоритетным - передача управления от
одной задачи к другой производится в явном виде самими этими задачами.
WINDOWS функционирует как многозадачная ОС каждый раз, когда при-
кладная программа анализирует очередь сообщений. Если предназначенных
данной программе сообщений не оказывается, WINDOWS начинает искать
сообщения для других активных в данный момент программ и передает
управление той, для которой сообщение имеется; далее процесс повторяется.
   При разработке предназначенной для WINDOWS программы ее необхо-
димо структурировать таким образом, чтобы она могла поддерживать пере-
дачу управления по вышеописанной схеме. Если не принять соответствую-
щих мер, внешне корректная вновь созданная программа, возможно, будет
работоспособной, но запущенные вместе с ней другие программы сильно
рискуют остановиться вовсе (программа монопольно займет ресурсы всей
ОС).
   Заметим, что вышеприведенный метод реализации многозадачности в
WINDOWS носит название кооперативной многозадачности (cooperative
multitasking) и является единственным для WINDOWS'3.1; в ОС
WINDOWS'9x (и, соответственно, WINDOWS’NT) реализован метод так на-
зываемой вытесняющей многозадачности (preemptive multitasking), при
этом ОС сама решает, у какой программы отобрать управление и какой его
передать (кооперативная многозадачность оставлена в WINDOWS'9x только
в целях поддержки 16-битных приложений). Каждое 32-битное приложение в
WINDOWS'9x имеет отдельную очередь сообщений и не зависит от того, как
другие задачи работают со своими очередями (поэтому ситуация 'повисания
системы' вследствие слишком редкой проверки очереди сообщений 16-
битным приложением теоретически невозможна).
   Кроме сказанного, 32-битные приложения в WINDOWS'9x могут исполь-
зовать особый механизм - многопоточность (multithreading). В принятой
для WINDOWS'9x терминологии исполняемое 32-битное приложение назы-
вается процессом (process); процесс состоит как минимум из одного потока.
   Поток (thread) - часть кода программы, которая может выполняться од-
новременно с другими частями кода; потоки в пределах одного процесса ис-
пользуют одно адресное пространство, описатели оьъектов и иные общие ре-
сурсы, но имеют отдельные счетчики команд; приоритетностью выполнения
потоков (как и процессов) управляет ядро ОС на основе системы приорите-
тов. Потоки являются средством обеспечения параллельности обработки
данных и часто используются для выполнения в программе асинхронных опе-
раций (asynchronous operations) - операций, которые могут быть инициали-
зированы в любое время безотносительно к основному течению программы
(лежащий на поверхности пример - периодическое сохранение редактируе-
мого документа или опрос устройства пользовательского ввода - например,
‘мыши’ или клавиатуры). Потоки требуют меньших издержек, создаются (и


                                    - 10 -


уничтожаются) быстрее процессов (поэтому их иногда называют ‘дегковес-
ными процессами’). В связи с использованием всеми потоками данного про-
цесса общей памяти (конечно, за исключением индивидуальных стеков и со-
держимого регистров) обмен данными между ними предельно прост; по этой
же причине создание использующего многопоточность приложения требует
особой тщательности вследствие возможности случайного ‘пересечения’ по
адресному пространству и/или нарушения последовательности операций
(например, чтения/записи). ИС Delphi и C++Builder предоставляют роди-
тельский класс (в смысле ООП) TThread для реализации потоков [10].
   Операционная система с симметричной мультипроцессорной обработкой
(symmetric multiprocessing, SMP); такая как WINDOWS’NT, может выпол-
нять на любом процессоре как код пользователя, так и код собственно ОС;
при превышении числом потоков числа процессоров поддерживается много-
задачность путем разделения времени каждого процессора между всеми ожи-
дающими потоками.
   Разработчики WINDOWS’NT ввели понятие волокон (fibers); волокном
называется небольшой (‘облегченный’) поток, планировку которого осуще-
ствляет приложение.

2.1. WINDOWS - ОПЕРАЦИОННАЯ СИСТЕМА,
    УПРАВЛЯЕМАЯ СОБЫТИЯМИ

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

2.2. ПОНЯТИЕ О СООБЩЕНИЯХ WINDOWS И ИХ ОБРАБОТКЕ

   Все сообщения в WINDOWS строятся в соответствии со строго опреде-
ленным и компактным форматом. Любители C++ могут заглянуть в файл
WINDOWS.H и проанализировать структуру сообщений MSG

/* структура сообщения WINDOWS */
typedef struct tag MSG
{
   HWND hwnd;
   WORD message;
   WORD wParam;
   LONG IParam;



    
Яндекс цитирования Яндекс.Метрика