Лекция "Структура проекта в Delphi."

  • Лекции
  • docx
  • 14.03.2017
Публикация на сайте для учителей

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

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

Главной частью приложения является файл проекта (.dpr) с которого начинается выполнение программы и который обеспечивает инициализацию других модулей. Проект Delphi представляет собой набор программных единиц – модулей. Модуль – автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и, возможно некоторые исполняемые операторы инициирующей части. Один из модулей – главный, содержит инструкции, с которых начинается выполнение программы. Главный модуль приложения полностью формируется Delphi.
Иконка файла материала билет 27 тема 2.docx
билет 27 тема 2 Структура проекта в Delphi. Проект Delphi состоит из форм, модулей, установок параметров проекта, ресурсов и т.д.  Вся эта информация размещается в файлах. Многие из этих файлов автоматически  создаются Delphi: Файл проекта  (.dpr) Этот текстовый файл используется для хранения информации о формах и  модулях. В ней содержатся операторы инициализации и запуска программ на выполнение Файл модуля  (.pas) Каждой создаваемой вами форме соответствует текстовый файл модуля,  используемый для хранения кода. Можно создавать модули, не связанные  с формами. Многие из функций и процедур Delphi хранятся в модулях. Файл формы  (.dfm) Это двоичный или текстовый файл, который создается Delphi для  хранения информации о ваших формах. Каждому файлу формы  соответствует файл модуля (.pas) В этом файле хранятся установки параметров проекта Файл  параметров  проекта(.dfo) Файл  ресурсов(.res) Этот бинарный файл содержит используемую проектом пиктограмму и  прочие ресурсы Файлы  резервных  копий (.~dp,  .~df, .~pa) Это соответственно файлы резервных копий для файлов проекта, формы  и модуля. Если что­то безнадежно испорчено в проекте, можно  соответственно изменить расширения этих файлов и таким образом  вернуться к предыдущему не испорченному варианту Файл  конфигурации  окон (.dsk) Исполняемый  файл (.exe) Объектный  файл модуля  Файл хранит конфигурацию всех окон среды разработки (раздел 2.3.9) Это исполняемый файл вашего приложения. Он является автономным  исполняемым файлом, для которого больше ничего не требуется, если  только вы не используете библиотеки, содержащиеся в DLL, OCX и т.д., а также если вы не используете поддержку пакетов времени выполнения  (раздел 7.6) Это откомпилированный файл модуля (.pas), который компонуется в(.dcu) окончательный исполняемый файл. Главной частью приложения является файл проекта (.dpr) с которого начинается  выполнение программы и который обеспечивает инициализацию других модулей. Проект Delphi представляет собой набор программных единиц – модулей.  Модуль – автономно компилируемая программная единица, включающая в себя различные  компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и,  возможно некоторые исполняемые операторы инициирующей части. Один из модулей – главный, содержит инструкции, с которых начинается выполнение  программы. Главный модуль приложения полностью формируется Delphi.  Помимо главного модуля каждая программа включает в себя еще как минимум один  модуль формы, который содержит описание стартовой формы приложения и  поддерживающих ее работу процедур. В Delphi каждой форме соответствует свой модуль.  Программа Delphi­это несколько связанных между собой файлов.  Главный файл проекта, изначально называется PROJECT1.DPR. Если необходимо  переименовать название проекта, нужно перезаписать этот файл, выбрав в меню File  команду Save Project As: При задании имени следует придерживаться правил задания имен  в Object Pascal. Имя не должно содержать пробелов (используйте в таком случае знак  подчеркивания), должно начинаться с буквы (цифры допустимы, но со второй позиции), не  должно содержать других символов, кроме букв и цифр. Под каким именем вы сохраняете  проект, под таким именем и будет создаваться исполняемый EXE файл, который вы всегда сможете самостоятельно переименовать.  Модуль программы, который автоматически появляется в начале работы Unit1. Файл  называется UNIT1.PAS по умолчанию, но его можно назвать любым другим именем, вроде  MAIN.PAS. Это делается аналогично переименованию названия проекта. Необходимо  выбрать в меню File команду Save As: Сохраняется активный модуль в редакторе кода.  Файл главной формы, который по умолчанию называется UNIT1.DFM, используется для  сохранения информации о внешнем виде формы (окна разрабатываемого приложения). При переименовании названия модуля автоматически меняет свое название. Файл  PROJECT1.RES изначально содержит иконку для проекта. Создается автоматически.  Имеет одноименное название с названием проекта. Файл PROJECT1.DSK содержит  информацию о состоянии рабочего пространства. Состояние окон во время разработки  приложения. Исполняемый EXE файл, который создается в процессе компиляции проекта.  Разумеется, если сохранить проект под другим именем, то изменят название и файлы с  расширением RES и DSK. После компиляции программы получаются файлы с  расширениями:DCU ­ скомпилированные модули PAS для последующей быстрой  компиляции некоторые файлы не перезаписываются  EXE ­ исполняемый файл  ~PA, ~DP ­ backup файлы редактора. Автоматически создаются и содержат информацию,  перед последним сохранением.И так, любая программа всегда состоит из уже знакомого нам файла проекта(такой файл  имеет расширение .dpr) и одного или нескольких модулей(файлы с расширением .pas) Файл проекта не предназначен для редактирования пользователем и создаётся автоматически  самой системой программирования Delphi. Для того, чтобы увидеть содержимое файла  проекта, необходимо выполнить команду Project|View Source.Содержимое файла проекта  может быть,например,следующим:  program Project1; uses   Forms, unit in 'Unit1.pas' {Form}; {$R *.RES} begin   Application.Initialize;   Application.CreateForm(TForm1, Form1);   Application.Run; end. Файл проекта(главный модуль) начинается словом program,за которым следует имя  программы,совпадающее с именем проекта. Далее за словом uses следуют имена  используемых модулей:стандартного модуля Forms и модуля формы Unit1. Похожая на  комментарий директива {$R *.RES} указывает компилятору,что нужно использовать файл  ресурсов,который содержит описание ресурсов  приложения,например,пиктограммы.Звездочка указывает,что имя файла ресурсов такое  же,как и у файла проекта,но с раширением .res. Исполняемая часть главного модуля  находится между операторными скобками begin:end.Операторы исполняемой части  обеспечивают инициализацию приложения и вывод на экран стартового окна.Помимо  главного модуля каждая программа включает как минимум один модуль формы,который  содержит описание стартовой формы приложения и поддерживающи* * *аботу процедур.В Delphi каждой форме соответствует свой модуль.Для переключения между формой и  окном редактора кода,содержащего соответствующий модуль,следует нажать на клавишу  F12.Модули­это программные единицы,служащие для размещения фрагментов  программ.При помощи содержащихся в них текстов программ и реализуется решаемая  пользователем задача.  Методы  Методами называются инкапсулированные в классе процедуры и функции. Например:  type   TChildClass = classFone: Integer;     Ftwo: string;     Fthree: Tobject;     function FirstFuns(x: real): real;     procedure SecondProc;   end Для того чтобы обратиться к методам,как и для полей,необходимо использовать составные имена:  var   MyObject: TChildClass;   y: real;begin   MyObject.SecondProc;   y := MyObject.FirstFunc(3.14); end; Методы,определенные в классе,могут быть статическими,виртуальными,динамическими  или абстрактными.Тип метода определяется механизмом перекрытия его в потомках. Для  статических методов перекрытие осуществляется компилятором. Например,пусть у нас  имеется описание родительского класса Tbase и его потомка Tdescedant, содержащих  одноименный метод  MyJoy: type   Tbase = class     procedure MyJoy;   end;   Tdescedant = class(Tbase)     procedure MyJoy;   end; var   FirstObject: Tbase;   SecondObject: Tdescedant; begin   FirstObject.MyJoy;   SecondObject.MyJoy; end; В соответствии с принципом полиморфизма в операторе FirstObject.MyJoy; вызывается  метод, описанный в классе Tbase,а в операторе SecondObject.MyJoy; Вызывается  метод,описанный в классе Tdescedant.По умолчанию все методы,описанные в  классе,являются статическими.Динамические и виртуальные методы отличаются от  статических тем,что замещение родительских методов методами потомков происходит на  этапе выполнения прогрммы.Для обьявления виртуального метода в родительском классе  необходимо использовать зарезервированное слово virtual,а для обьявления динамического  метода­зарезервированное слово dynamic.В классе­потомке в загаловке замещающего  метода должно быть указано зарезервированное слово override. Например:  type   TBase = class     Procedure MyJoy; virtual;   end;   Tdescedant = class(TBase)     procedure MyJoy; override;   end; var   FirstObject: Tbase;   SecondObject: Tdescedant; begin   FirstObject.MyJoy;   SecondObject.MyJoy; end;Если бы мы захотели,чтобы метод MyJoy в классе Tbase был динамическим, слово virtual в  заголовке процедуры следует заменить словом dynamic.Различие между виртуальными и  динамическими методами невилико и связано с особенностями реализации их  вызовов.Можно сказать,что виртуальные методы более эффективны с точки зрения затрат  времени,а динамические методы позволяют более рационально использовать оперативную  память.Абстрактными называются виртуальный или динамические методы,которые  определены в классе,но не содержат никаких действий,никогда не вызываются и  обязательно должны быть переопределены в классах­потомках.Обьявляется абстрактный  метод при помощи зарезервированного слова abstract,расположенного после слов virtual  или dynamic,например:procedure MyMetod; virtual; abstrat; Основное предназначение  абстрактных методов­быть родоначальником иерархий конкретных методов в классах­ потомках. В любом классе содержатся два специальных метода­конструктор и деструктор. Эти методы содержатся в классе­родоначальнике всех остальных классов­Tobject  и,следовательно,наследуются потомками. Как и другие методы,они могут быть изменины в  классах­потомках,т.е.перекрыты. В классе Tobject и в большинстве его потомков  конструктор и деструктор называются Create и Destroy соответственно. Конструкторы  предназначены для создания и инициализации обьекта. Дело в том,что обьект в языке  Object Pascal является динамической структурой и переменная­обьект содержит не сами  данныые, а ссылку на них. Конструктор распределяет обьект в динамической памяти и  присваивает полям обьекта начальные значения. При этом поля порядковых типов в  качестве начального значения получают 0, строкового­пустую строку, поля­указатели­ значения nil,поля­варианты­Unassigned. Кроме того,конструктор помещает ссылку на  созданный обьект в переменную Self,которая автоматически обьявляется в классе. Из  сказанного следует,что обращение к полям, свойствам и методам обьекта должно  осуществляться только после вызова конструктора. Деструктор освобождает динамическю память и разрушает обьект. Для обьявления конструктора и деструктора используются  зарезервированные слова constructor и destructor соответственно. Например:  type   Tsample = classText: string;   constructor Create;   destructor Destroy; end; Для того,чтобы создать обьект,необходимо применить метод­конструктор к классу  обьекта: varMyObject : TSample;  begin   MyObject := TSample.Create; end; Если создается класс­потомок и при его создании планируется осуществить некоторые  дополнительные действия,отсутствующие у класса­родителя, то в конструкторе класса­ потомка следует сначала вызвать конструктор своего родителя, а уже потом осуществлять  дополнительные действия. Вызвать любой перекрытый метод родительского класса можно  при помощи зарезервированного слова inherited(унаследованный). Например, если в классе  TDescedant имеется свой собственный конструктор typeTDescedant = class(TBase)FMark :  Boolean;  constructor Create(Mark: Boolean); end; то его реализация могла бы быть такой: constructor TDescedant.Create(Mark:Boolean);begin   inherited Create;   Emark := Mark; end; где вызов родительского конструктора осуществляется оператором inherited Create; а  оператор Emark := Mark; Осуществляет дополнительные действия. Кроме деструктора  Destroy,в базовом классе Tobject определен метод Free, который прежде проверяет, был ли  обьект на самом деле реализован и только потом вызывает метод Destroy. Если обьект не  был создан конструктором, то обращение к деструктору,приведет к генерации  исключительной ситуации. Следовательно,для уничтожения ненужного обьекта удобнее  использовать метод Free, например: MyObject.Free; В классе могут быть определены  методы, которые могут вызываться без создания и инициализации обьекта. Эти методы  называются методами класса,и для их обьявления используется зарезервированное слово  class. Например:  type   TChildClass = class(Tobject)     class function ChildClassInfo: string;   end;   vary: string; begin   y := ChildClassInfo; end; Как правило, методы класса предназначены для справочной информации о классе­имени  класса, предке класса, размере класса и т.д.  События  Событие­это то,что происходит в процессе работы программы. В Delphi определенно  несколько десятков типовых событий. Рассмотрим,что представляют собой события с  точки зрения языка Object Pascal. Событие­это свойство процедурного типа,и его  значением является указатель на некоторый метод. Присвоить такому свойству значение  означает указать адрес метода, который будет выполняться в момент наступления  события.Такие методы называются обработчиками событий. В качестве примера  рассмотрим,как описаны стандартные события OnDblClick (возникает при двойном щелчке левой кнопкой мыши), OnMouseDown(возникает при нажатии кнопки мыши) и  OnMouseMove (возникает при перемещении мыши) в классе TControl:Tcontrol =  class(Tcomponent) Private FonDblClick: TnotifyEvent;FonMouseDown:TmouseEvent;  FonMouseMove:TmouseMoveEvent protected property OnDblClick: Tnotify read FonDblClick  writeFonDblClick; Property OnMouseDown: TmouseEvent read FonMouseDown writeProperty  OnMouseMove: TmouseMoveEvent read FonMouseMove writeFonMouseMove; end;  Назначение зарезервированных слов private и protected мы рассотрим позже, а пока  отметим следующее. Поля FonDblClick,FonMouseDown и FonMouseMove, используемые  при описании свойств­событии, предназначенны для хранения указателя на метод,  являющийся обработчиком соответствующего события. Используемые при описаний полей  процедурные типы определяются следующим образом: TypeTnotifyEvent = procedure  (Sender: Tobject) of object; TmouseEvent = procedure(Sender:Tobject;Button: TmouseButton;  Shift: TshiftState; x, y: Integer) of object; TmouseMoveEvent = procedure(Sender:Tobject;  Shift: TshiftState;X, y:Integer) of object; Общим для всех процедурных типов является  параметр Sender, содержащий указатель на обьект­источник события. Параметр Buttonсодержит информацию,какая клавиша мыши была нажата. Параметр Shift содержит код  клавиши,нажатой на клавиатуре.x и y ­текущие координаты мыши в пределах компонента.  Поля  Полями называются инкапсулированные в классе данные. Поля класса подобны полям  записи, но в отличие от них могут быть любого типа, в том числе классами, например: type  TchildClass = class Fone : Integer; Ftwo : String; Fthree : TObject; end; Исходя из принципа  инкапсуляции,обращение к полям должно осуществляется при помощи методов и свойств  класса. Вместе с тем, в Object Pascal допускается обращаться к полям и  непосредственно .Для того чтобы обратиться к полю, необходимо записать составные имя,  состоящее из имени класса и имени поля,разделенных точкой,например: var MyObject :  TChildClass; begin MyObject.Fone := 16; MyObject.Ftwo := 'Некоторое строковое значение';  end; Обычно имя поля такое же, как и имя соответствующего свойства, но к имени поля в  качестве первой буквы добавляют букву F.  81 Управление проектами в Delphi. Еремин Андрей В каком виде сохраняются созданные программы? Этот вопрос возникает у любого  начинающего программиста. Эта тема заслуживает отдельного внимания. Как известно, в  Windows любая программа представляет собой exe­файл, который является исполняемым,  т.е. может быть запущен как отдельное приложение. Понятно, что разрабатывая  программу, в итоге нужно получить именно exe­файл, чтобы его можно было запустить на  компьютере, где не установлена среда, в которой эта программа была создана. В языках  программирования для DOS, в частности Turbo Pascal, всё довольно просто ­ весь  программный код сохраняется в один­единственный файл, а в итоге получается exe­файл.  Довольно просто и удобно. При переходе в Windows всё становится гораздо сложнее.  Оконное приложение Windows не может быть сохранено в одном файле. Если в среде DOS  программы можно называть именно программами, то в объектно­ориентированном  программировании они называются проектами. Почему проектами? Всё достаточно просто  ­ программа представляет собой совокупность некоторого числа файлов различного типа,  определённым образом связанных между собой. Очевидно, что всю эту группу логично  назвать проектом. В этой статье мы познакомимся с самыми основными типами файлов, которые включены в  любой проект, созданный на Delphi. На самом деле типов файлов гораздо больше, но эти ­  базовые. *.dpr ­ файл проекта Это главный файл всего проекта. Если этот файл отсутствует, запустить программу будет  невозможно. В файле хранятся все основные параметры приложения, а также информация  об окнах, которые в приложение включены. Файл представляет собой свободно читаемый  код. Посмотреть содержимое этого файла можно командой меню Project ­> View Source . *.dfm ­ файл описания формы В этом файле содержится описание всех объектов, которые расположены на форме, а  также информация обо всех их свойствах. При этом в этот файл сохраняются только те  свойства объектов, которые были принудительно изменены. Это объясняется тем, что все  свойства любого объекта имеют значения по умолчанию (т.е. заранее установленные).  Соответственно нет смысла хранить значения абсолютно всех свойств ­ достаточно  запомнить только те, которые имеют значение, отлиное от начального. Все остальныесвойства принимают своё исходное значение и таким образом вся форма  восстанавливается. *.pas ­ модуль (самостоятельный, либо модуль формы) Именно этот файл больше всего похож на файл программ Turbo Pascal. В этом файле  находится код программы. Модули могут быть отдельными от конкретных проектов ­ в  этом случае их можно подключить к любому проекту и использовать. Как правило, в  отдельных модулях находятся вспомогательные функции, либо какие­либо объекты.  Помимо этого модуль есть у каждой формы. В результате *.pas­файл неразрывно связан с  файлом *.dfm, а форма соответственно описывается этими двумя файлами ­ один  содержит её состояние и объекты, а второй ­ код программы, относящийся к этой форме.  Следует отметить, что модули значительно облегчают процесс написания программы и  ориентацию в больших модулях ­ отдельные элементы большого модуля можно вынести в  несколько модулей и просто подключить их к проекту. *.res ­ файл ресурсов Это дополнительный файл. В нём находятся данные различных типов ­ это могут быть  тексты, изображения, звуки и т.д. К примеру, для проекта этот файл создаётся  автоматически и в нём сохраняется иконка (значок) приложения, а также некоторая  информация о проекте. Вот и все основные файлы, информацию о которых обязательно нужно знать. Чтобы  перенести проект, достаточно следующих файлов: *.dpr, *.dfm и *.pas. Имея эти файлы  проект можно восстановить, а программу ­ запустить. Желательно также наличие *.res­ файла(ов), но тем не менее это не обязательно. Если *.res­файл, сопоставленный проекту  будет отсутствовать, то при открытии проекта Delphi предупредит, что файл не найден и  спросит, что нужно сделать. Достаточно проигнорировать сообщение и файл будет создан  автоматически при следующем запуске программы. Работа с проектом Ну а теперь пришло время рассказать о базовых операциях с проектом, так как ранее речь  об этом не шла. Рассмотрим всё по порядку. Создание нового проекта Для создания "чистого листа" следует  выбрать в меню File ­> New ­>  Application . В разных версиях Delphi  содержимое подменю New может  немного отличаться, но всё основное  присутствует всегда. После этого  создаётся новый проект, такой, какой  появляется при запуске Delphi.   Открытие существующего проекта  (или файла) Для этого существует команда File ­>  Open... Выбрав файл *.dpr , откроется  Меню File содержит все основные команды управления проектомпроект, а выбрав какой­либо другой  файл (например, *.pas или *.dfm )  откроется что­либо другое (например,  отдельная форма). Сохранение С сохранением есть несколько  тонкостей. Исходя из того, что проект  представляет собой совокупность  нескольких файлов, можно сделать  вывод, что сохранять нужно все эти  файлы, а не какой­то в отдельности.  Выбрав File ­> Save , Вы сохраните  только текущую форму, но не более  того, а проект останется "висеть в  воздухе". File ­> Save As... ­  стандартный пункт, который делает то  же самое, что и Save , только  Железное правило: каждый проект должен быть сохранён в отдельном каталоге! Если в один каталог сохранить несколько проектов, то все файлы перемешаются и можно  отправлять всё в корзину. Этого нельзя делать ни в коем случае! Запуск и остановка программы Теперь, когда проект сохранён, программу можно и запустить и посмотреть, что же  получилось. Ещё одно правило, которое желательно соблюдать: перед запуском программы проект нужно сохранить. Мгновенный вопрос: зачем? Конечно, делать это или нет ­ решать  Вам, но бывают случаи, когда программа зависает (по вине самого программиста  например), а с ней зависает и оболочка Delphi. В этом случае ничего не остаётся делать,  как "убивать" Delphi через Диспетчер задач Windows. Понятно, что изменения, которыебыли внесены в проект, теряются. Однако не всё так плохо. Случаи зависания Delphi IDE  достаточно редки. Как правило, если программа зависает, Delphi позволяет её просто  уничтожить из памяти и продолжить работу. Процесс сохранения проекта перед запуском  можно поручить оболочке: меню Tools ­> Environment Options... , вкладка Preferences , блок Autosave options ­ опция Editor files. Запомните следующие основные горячие клавиши: Ctrl+F9 ­ компиляция программы. Что такое компиляция? Говоря простым языком ­  создание выходного (exe) файла программы. Следует отметить, что имя выходного файла  совпадает с именем проекта, т.е. именем *.dpr­файла и не может быть изменено. Выходной  файл создаётся в том же каталоге, где расположение *.dpr­файл. Однако компиляция  просто "собирает" всю программу, но не запускает её. F9 ­ запуск. В отличие от компиляции, это уже полноценный запуск программы из  оболочки Delphi, однако не совсем такой, каким является запуск приложения из Windows.  Запуск происходит под отладчиком. Но об этом позже. Ctrl+F2 ­ остановка выполнения программы. Это именно то, о чём сказано чуть выше. Если нужно экстренно завершить работу программы, нужно активировать какое=­либо из окон  оболочки Delphi и нажать это сочетание клавиш. Программа будет остановлена и можно  будет безболезненно продолжить работу. Все эти команды доступны и напрямую из меню: Run ­> Run , Project ­> Compile , Run ­>  Program Reset . Все основные команды управления проектом вынесены также в виде кнопок на панели  инструментов: Свойства проекта Для проекта можно установить  множество разнообразных параметров.  Все они находятся в окне Project ­>  Options . В частности, на вкладке  Application можно указать заголовок  проекта, который будет отображаться  на кнопке программы на панели задач.  Совет: всегда прописывайте заголовок  своей программе, не оставляйте  стандартного " Project1 " ­ это резко  бросается в глаза. На этой же вкладке  можно выбрать иконку (значок) для  приложения ­ файл *.ico размером  32х32 пикселя. В блоке Output settings  можно указать расширение выходного  файла. Заполнять это поле не  обязательно ­ по умолчанию файлу    Окно свойств проектаприсваивается расширение .exe .  Однако в некоторых случаях эта  настройка бывает полезной. Например,  экранные программы­заставки  представляют собой те же  исполняемые exe­файлы, только имеют  расширение .scr . Неудобно каждый раз  после внесения изменений в программу, Заключение В этой статье рассмотрены все базовые навыки для управления проектами. Теперь можно  приступить непосредственно к изучению языка и исследованию объектов.