Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Лекции - Delphi - файл 1.doc


Лекции - Delphi
скачать (1007 kb.)

Доступные файлы (1):

1.doc1007kb.17.11.2011 13:20скачать

содержание
Загрузка...

1.doc

Реклама MarketGid:
Загрузка...
Лабораторная работа №1

Тема: Характеристика среды разработчика в Delphi


Delphi - это комбинация нескольких важнейших технологий:

  • Высокопроизводительный компилятор в машинный код

  • Объектно-ориентированная модель компонент

  • Визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов

  • Масштабируемые средства для построения баз данных

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

В стандартную поставку Delphi входят основные объекты, которые образуют удачно подобранную иерархию из 270 базовых классов.


^ Основные понятия и принципы программирования


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

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

^ Взять значения, введенные пользователем в поля А1 и А2;

Вычислить сумму этих значений;

Поместить результат в поле А3

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

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


Среда Delphi 7


Среда Delphi 7 представляет собой интегрированную оболочку разработчика, в которую входит набор специальных программ, ответственных за разные этапы создания готового приложения (рис.1)

Главное окно

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

Проводник

Проектировщик форм

Окно редактора









Рис. 1 Основные окна системы Delphi 7


Исходный текст программы готовится в среде Delphi 7 с помощью встроенного редактора исходных текстов. Этот редактор специализирован. Он отличается гибкими возможностями цветового выделения различных элементов текста программы (ключевые слова, названия, операций, чисел строк) и предоставляет возможность быстрого ввода часто встречающихся конструкций.

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

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


^ Компонентный подход


На этапе проектирования форм программа как бы составляется из готовых компонентов - частей машинного кода, которые можно добавлять к ней с помощью всего нескольких щелчков мыши. Компоненты располагаются на палитре компонентов, разделенной на несколько самостоятельных панелей (рис. 2).




Рис. 2 Палитра компонентов


После запуска Delphi в верхнем окне горизонтально располагаются иконки палитры компонент. Если курсор задерживается на одной из иконок, под ней в желтом прямоугольнике появляется подсказка

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

Понятно, что поскольку в Delphi вы визуальным образом строите свою программу, все эти компоненты имеют свое графическое представление в поле форм для того, чтобы можно было бы ими соответствующим образом оперировать. Но для работающей программы видимыми остаются только визуальные компоненты. Компоненты сгруппированы на страницах палитры по своим функциям. К примеру, компоненты, представляющие Windows “common dialogs” все размещены на странице палитры с названием “Dialogs”.

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

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

Компоненты обладают набором свойств, характеризующими их отличительные особенности. Некоторые свойства имеются практически у всех компонентов – такого, например, свойства Name (Имя). Другие свойства, например Caption (Заголовок), имеются у большинства компонентов – ведь заголовок необходим и для окна, и для кнопки. Некоторые свойства уникальны для конкретных компонентов, например свойство SimpleText (Простой текст), содержащее текст для компонентов Строка состояния.

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

Значение любого свойства можно изменить, введя в соответствующее поле ^ Инспектора объектов новую строку или выбрав нужное значение в раскрывающемся списке доступных значений. Некоторые свойства содержат вложенные подсвойства, например, свойство Font (Шрифт) характеризуется размеров, стилем, цветом, гарнитурой. Такие свойства удобней редактировать с помощью специальных редакторов, как стандартные (шрифт), так и специально разработанных для конкретного компонента.

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

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

С помощью системы Delphi 7 можно создавать не только обычные программы (EXE-файлы), но и динамически подключаемые библиотеки DLL (своеобразные хранилища кода и ресурсов), новые элементы управления, а также компоненты, отвечающие требованиям различных стандартов на компонентные технологии (COM, ActiveX, CORBA и так далее).

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

Рассмотрим некоторые распространенные объекты.


^ Edit (панель Standard)


На форме размещаются объекты, соответствующие компонентам с палитры компонентов. Что бы создать на форме текстовое поле, надо:

  • Выбрать панель Standard (Стандартная);

  • Щелкнуть по кнопке Edit (текстовое поле);

  • Щелкнуть на том месте формы, где требуется поместить текстовое поле.

В этом месте появится новый элемент управления. Черные маркеры по контору объекта указывают, что он выделен. Эти маркеры предназначены для изменения размеров объекта с помощью мыши. По умолчанию в Delphi 7 принято, что название нового объекта совпадает с его заголовком. Это название дается средой Delphi по следующему принципу. Берется название компонента, и к нему добавляется порядковый номер, начиная с единицы. Если теперь на форму поместить еще одно текстовое поле, то его название будет Edit2. если теперь взглянуть на исходный текст класса TMyForm, то окажется, что в разделе Private появилось новое поле:

Edit1: TEdit;

Оно было добавлено средой Delphi 7 в описание класса TMeForm автоматически.

У компонента TEdit (текстовое поле) свойства Caption (Заголовок) нет. Вместо него активно используется свойство Text (Текст), относящееся в инспекторе объектов к категории Localizable (настраиваемые). Это свойство содержит введенные пользователем данные в текстовом виде (тип String). Первоначально это свойство содержит строку, совпадающую с именем элемента управления (Edit1, Edit2). Текущее содержимое свойства Text (текст) каждого текстового поля формы лучше удалить и ввести вместо этого строки «0».


^ TButton (панель Standard)


Аналогичным способом на форме размещается кнопка (компонент TButton). Надпись на кнопке – это ее заголовок, свойство Caption (Заголовок). В нем можно указать подпись «Сложить». С учетом сказанного выше соответствующую строку надо ввести так: &Сложить. При этом на форме первая буква подписи на кнопке окажется подчеркнутой.


^ TLabel (панель Standard)


Надо подготовить элемент управления, в котором будет показываться результат сложения чисел, введенных в поля Edit1, Edit2. для такой цели лучше всего использовать компонент TLable (Надпись).

В заголовке этого объекта (свойство Caption) можно указать строку «0». Размер объекта Label1 при этом изменится. Это связанно с тем, что некоторые компоненты Delphi 7 имеют свойство AutoSize (автомасштабирование), относящееся к категории Visual (Внешний вид). Это свойство определяет, что размер объекта подстраивается под размер своего содержимого, в данном случае строки. Если это не нужно, значение свойства AutoSize надо изменить с True на False, после чего задать нужный размер вручную.


^ Компонент Список (TlistBox) (панель Standard)


Компонент Список (TlistBox) очень часто применяется в программах для Windows. Он позволяет выбрать одну или несколько строк в списке.

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

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

Число столбцов задается в свойстве Columns. Если оно больше 0, то на каждую колонку отводится часть общей ширины списка (значение свойства Width, деленное на число столбцов). Список может принадлежать к одному из трех возможных типов (свойство Style (см. табл.)).


Значение

Стиль списка

lbStandard

Стандартный список (стиль по умолчанию)

lbOwnerDrawFixed

Каждый элемент списка имеет фиксированную высоту, но способ его отображения определяется программистом

lbOwnerDrawVariable

Кроме способа рисования в тексте программы необходимо явно задавать размер каждого элемента списка (что позволяет создавать списки с элементами разных размеров)


Если значение свойства Style не равно lbStandard, программист должен сформировать для списка обработчик событий OnDrawItem, в котором самостоятельно организовать отсортировку содержимого. Такой список может содержать не только текст, но и другие объекты, например рисунки. Узнать высоту элемента в пиксилях можно, обратившись к свойству ItemHeight.

Выбирать элементы в списке можно по одному, а можно и по несколько одновременно. Свойство MultiSelect (тип Boolean) позволяет выбирать несколько элементов, если его значение равно True. Выделить сразу группу элементов можно, если при щелчке на последний из них держать нажатой клавишу Shift. Такая возможность появляется, если свойство ExtendedSelect занесено значение True.

Свойство SelCount (оно доступно только для чтения и не может быть изменено в тексте программы) содержит число выделенных строк списка. Чтобы определить, выделен ли конкретный элемент, надо, используя его номер, обратиться к свойству Selected, представляющему собой массив типа Boolean. Значение выражения


ListBox.Selected[4]


будет равно True, если пятый элемент (отсчет ведется с нуля) в списке выделен.

Если выделение нескольких элементов не разрешено, то узнать, какой элемент выделен, можно, обратившись к свойству ItemIndex, хранящему номер единственного выделенного элемента.

Содержимое списка хранится в свойстве Item. Строки можно задавать на этапе проектирования, в специальном редакторе, а можно и во время работы программы с помощью метода Add.

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

Для очистки всего содержимого списка используется метод Clear:


ListBox1.Clear

Для удаления конкретного элемента служит метод DeleteString:


ListBox1.DeleteString(4);


При этом конечно, помимо перерисовки списка вносятся соответствующие изменения в свойство Items.


^ Компонент Фрейм (TFrame) (панель Standard)


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

Фрейм предназначен для более гибкого и эффектного объединения и хранения групп объектов. Он может использоваться как заготовка (шаблон) для быстрого создания новых фреймов нужной структуры. Допускаются неограниченные вложения фреймов друг в друга. При этом если вносятся изменения в шаблон, то автоматически изменяются все фреймы, созданные на его основе и применяемых в разрабатываемых программах.

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

Чтобы добавить к проекту новый фрейм, надо выполнить команду File→New→Frame (Файл→Создать→Фрейм). При этом в менеджере проектов возникает новый модуль Unit4, только вместо формы в нем будет фрейм.

Однако ссылка на переменную, описывающую фрейм, в модуле Unit4.pas не появится. Это связанно с тем, что каждый фрейм обязательно должен быть привязан к конкретной форме.

Фрейм располагается на форме, когда на панели Standard выбирается значок Frames и выполняется щелчок на нужной форме. При этом отображается список всех доступных в программе (созданных ранее) фреймов, из которых надо выбрать подходящий. Исходно фрейм можно сделать невидимым, установив значение свойства Visible равным False. Тогда отображаемый фрейм можно по щелчку на кнопке Button1 с помощью метода Show.


^ Компонент Кнопка с картинкой (TBitBtn) (панель Additional)


Этот компонент предназначен для создания кнопки с картинкой. В системе имеется набор готовых шаблонов.

Каждая картинка может состоять из 1 – 4 частей, равных по ширине. Первая часть – изображения кнопки в обычном состоянии, вторая – изображение «отключенной» недоступной кнопки (свойство Enabled имеет значение False), третья – изображение на кнопке после щелчка мыши, четвертая – изображение на «нажатой» кнопке. Число составных частей изображения задается свойством NumGlyphs (от 1 до 4). Расстояние от картинки до границ кнопки (в пикселях) можно указать в свойстве Margin.

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


Значение

Действие

bkCustom

Реакция кнопки определена программистом

bkOK

Закрытие формы стандартным действием. В свойстве ModalResult записывается значение mrOk

bkCancel

Закрытие формы с отказом от изменений. В свойство ModalResult записывается значение mrCansel

bkYes

Подтверждение изменений. В свойство ModalResult записывается значение mrYes

bkNo

Отказ от изменений. В свойство ModalResult записывается значение mrNo

bkHelp

Вызов раздела справочной системы в соответствии со значением, записанным в свойство HelpContext

bkClose

Закрытие формы

bkAbort

Прерывание. Форма не закрывается

bkRetry

Повтор попытки

bkIgnore

Игнорирование возникшей ситуации

bkAll

Подтверждение всех изменений


Для каждого из видов кнопки, за исключением bkCustom, в системе Delphi 7 имеется особая картинка. С помощью свойства Layout можно создать расположение картинки по отношению к тексту (заголовку) кнопки. Возможные значения указаны ниже.


Значение

Расположение

bkGlyphLeft

Слева

bkGlyphRight

Справа

bkGlyphTop

Вверху

bkGlyphBottom

Внизу


Расстояние между картинкой и текстом (в пикселях) задается в свойстве Spacing. У класса TBitBtn имеется новый метод Click, который моделирует щелчок на кнопке. Он используется, когда надо закрыть форму одним из стандартных способов.


^ Компонент текстовое поле с подписью (TLabeledEdit) (панель Additional)

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

По своим свойства Текстовое поле с надписью практически полностью совпадает с компонентом TEdit, но на нем появляется новое свойство EditLabel, представляющее собой вложенный компонент TLabel, которые автоматически привязан к местоположению поля ввода. Название (подпись) редактируется именно в этом вложенном объекте – в свойстве Caption.

^ Компонент Текстовая область (TMemo)


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

При вводе текста для перехода на новую строку (к новому абзацу) обычно используется клавиша Enter. Однако в диалоговых окнах Windows эта клавиша часто применяется для завершения ввода. Способ использования клавиши Enter определяется значением свойства WantReturns. Если оно имеет значение True, то клавиша Enter позволяет переходить к новой строке внутри текстовой области, в противном случае она служит для завершения ввода и перехода к следующему элементу, а для перехода к новой строке применяется комбинация клавиш Ctrl+Enter.

Главное свойство данного компонента – Lines (Строки), имеющие тип TStrings. В нем хранится список строк, введенных пользователем. Эти строки можно обрабатывать всеми методами, доступными в классе TString, например, сохранять в файле:

Memo1.Lines.SaveToFile (‘c:\Memo.TXT’);

Наличие у текстовой области полос прокрутки задается свойством ScrollBars.


Значение

Вид текстовой области

ssNone

Полосы прокрутки отсутствуют

ssHorizontal

Имеется горизонтальная полоса прокрутки

ssVertical

Имеется вертикальная полоса прокрутки

ssBoth

Имеются два полосы прокрутки


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

При выделении фрагмента текста в текстовой области в свойство SelStart записывается позиция первого выделенного символа, а в свойство SelLength – число выделяемых символов. Выделенный текст доступен через свойство SelText (тип String). Для выделения всего текста применяется метод SelectAll, для удаления выделенного текста – метод ClearSelection.

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

Группа методов предназначена для работы с буфером обмена Windows. Для копирования выделенного текста в буфер обмена применяется метод CopyToClipboard, для вырезания текста – метод CutToClipboard, для вставки текста из буфера – метод PastFromClipboard.

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


^ Компонент шаблона ввода (TMaskEdit) (панель Additional)


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

После размещения компонента на форме для него надо задать структуру маски (шаблона, по которому будет осуществляться ввод) и начальное значение поля. Структура маски может быть сформирована двумя способами: с помощью редактора, вызываемого из контекстного меню объекта – пункт Input Mask Editor (редактор маски ввода), - или программно, заданием нужного значения для свойства EditMask, которое хранит структуру маски в текстовом виде. Рассмотрим второй способ.

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


Символ

Значение

!

Если этот символ присутствует в маске, то необязательные символы вставляются перед маской. Если отсутствует – необязательные символы вставляются после маски

>

Все последующие символы автоматически приводятся к верхнему регистру

<

Все последующие символы автоматически приводятся к нижнему регистру

<>

Прекращение преобразования регистра

\

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

L

В данную позицию разрешен только ввод букв

I

В данную позицию разрешен только ввод букв, но ее можно оставить пустой

A

В данную позицию разрешен только ввод букв или цифр

а

В данную позицию разрешен только ввод букв или цифр, но ее можно оставить пустой

C

В данную позицию разрешен ввод произвольного символа

с

В данную позицию разрешен ввод произвольного символа, но ее можно и оставить пустой

0

В данную позицию разрешен только ввод цифры

9

В данную позицию разрешен только ввод цифры, но ее можно оставить пустой

#

В данную позицию разрешен только ввод цифры или символов +/-. позицию можно оставить пустой

:

В данную позицию вставляется символ, который в текущей версии Windows используется для разделения часов, минут и секунд при записи времени

_

В данную позицию автоматически вставляется пробел


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

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

Отключить использование маски можно, записав в свойство IsMasked значение False. В такой ситуации можно задать значение свойства MaxLength, определяющего максимально допустимую длину вводимого текста. Для получения текущей длины содержимого текстового поля во время работы программы (которое реально отличается от содержимого свойства EditText, форматируемого автоматически), надо обратиться к методу GetTextLen.

Метод ValidaEdit выполняет проверку корректности введенной пользователем информации и генерирует исключительную ситуацию EDBEditError в случае несоответствия введенного текста указанной маске.


^ Компонент Изображение (TImage) (панель Additional)


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

После размещения объекта Image на форме появится пунктирная рамка, которая задает (по умолчанию) размеры будущей картинки. Эти размеры желательно заранее указать в свойствах Width и Height. Выбрав в Инспекторе объектов свойство Picture, можно вызвать специальный редактор, с помощью которого можно загрузить изображение в форматах .BMP, .ICO, .JPG или в одном из форматов графического метафайла Windows.


^ Компонент Список с флажками (TCheckListBox) (панель Additional)


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

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


Свойство

Назначение

AllowGrayed

Имеет значение True, если флажки списка могут находиться в промежуточном («сером») состоянии

Checked

Массив состояний флажков. Отслеживаются только два состояния: включен (True) и выключен («серое» состояние считается выключенным).

Flat

Имеет значение True, если форма флажков плоская

ItemEnabled

Массив допустимых состояний флажков. Если для конкретного флажка задано значение True, то его состояние можно менять, в противном случае флажок недоступен для изменения

State

Массив состояний флажков, элементы которого принимают одно из трех значений: cbUnchecked (выключен), cbChecked (включен), cbGrayed («серый»)


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


^ Структура проекта




Рис. 3 Окно проекта


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

Главный модуль представляет собой файл с расширением dpr. Для того чтобы увидеть текст главного модуля приложения, нужно из меню Project выбрать команду View Source.

uses

Forms,vrun1 in 'vrunl.pas' {Form1};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

Начинается главный модуль словом program, за которым следует имя программы, совпадающее с именем проекта. Имя проекта задается в момент сохранения проекта, и оно определяет имя создаваемого компилятором исполняемого файла программы. Далее за словом uses следуют имена используемых модулей: библиотечного модуля Forms и модуля формы vrunl.pas.

Строка {$R *.RES}, которая похожа на комментарий, — это директива компилятору подключить файл ресурсов. Файл ресурсов содержит ресурсы приложения: пиктограммы, курсоры, битовые образы и др. Звездочка показывает, что имя файла ресурсов такое же, как и у файла проекта, но с расширением res.

Файл ресурсов не "является текстовым файлом, поэтому просмотреть его с помощью редактора текста нельзя. Для работы с файлами ресурсов используют специальные программы, например, Resource Workshop. Можно также применять входящую в состав Delphi утилиту Image Editor, доступ к которой можно получить выбором из меню Tools команды Image Editor.

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

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


^ Структура модуля


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




Рис. 4 Окно модуля


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

Модуль состоит из следующих разделов:

  • интерфейса;

  • реализации;

  • инициализации.

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

Начинается раздел реализации директивой {$R *.DFM}, указывающей компилятору, что в процессе генерации выполняемого файла надо использовать описание формы. Описание формы находится в файле с расширением dfm, имя которого совпадает с именем модуля. Файл описания формы генерируется средой Delphi на основе внешнего вида формы.

За директивой ($R *.DFM} следуют процедуры обработки событий для формы и ее компонентов. Сюда же программист может поместить другие процедуры и функции.
Раздел инициализации позволяет выполнить инициализацию переменных модуля. Инструкции раздела инициализации располагаются после раздела реализации (описания всех процедур и функций) между begin и end. Если раздел инициализации не содержит инструкций (как в приведенном примере), то слово begin не указывается.

Следует отметить, что значительное количество инструкций модуля формирует Delphi. Например, Delphi, анализируя действия программиста по созданию формы, генерирует описание класса формы (после слова type). В приведенном примере инструкции, набранные программистом, выделены фоном. Очевидно, что Delphi выполнила значительную часть работы по составлению текста программы.


Контрольные вопросы


  1. Какие технологии включает Delphi?

  2. Что такое компьютерная программа?

  3. какие возможности дает встроенный редактор исходных текстов в Delphi 7?

  4. Какие виды компонентов Вы знаете?

  5. Как установить свойства объектов?

  6. Что можно создавать с помощью системы Delphi 7?

  7. Чем отличаются реализация и инициализация в модуле?

  8. для чего необходима директива {$R *.DFM}в модуле?


Практическое задание к лабораторной работе №1

Тема: Задачи на линейную структуру программ


^ Задание: Решить следующие задачи по образцу:

Теоретический материал


При линейном программировании одни операторы идут строго за другими. На практике редко встречаются задачи, алгоритм решения которых является линейным. Часто оказывается, что алгоритм решения даже элементарной задачи не является линейным. Например, пусть надо вычислить по формуле ток в электрической цепи. Если предположить, что пользователь всегда будет вводить верные данные, то алгоритм решения этой задачи действительно является линейным. Однако полагаться на то, что пользователь будет вести себя так, как надо программе, не следует. Формула расчета предполагает, что величина сопротивления не равна нулю. А что будет, если пользователь введет 0? Ответ простой: возникнет ошибка "Деление на ноль", и программа аварийно завершит работу. Можно, конечно, возложить ответственность за это на пользователя, но лучше внести изменения в алгоритм решения, чтобы расчет выполнялся только в том случае, если введены верные данные.


Задача № 1


Постановка задачи:


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


^ Математическая модель:


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

a

h


b

b = a * 2 ^ 0.5

b = 2 * h

По теореме Пифагора получаем:

a^2 = h^2 + h^2

По данной формуле находим длины катетов треугольника, а по формуле b = 2 * h находим длину гипотенузы.


Блок-схема:





^ Описание интерфейса:





В таблице показаны свойства объектов


Объекты и их свойства


Объект

Свойство

Устанавливаемое значение

Label1

Caption


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

Image1

Picture



Label2

Caption

Введите длину высоты:

Edit1

Text

“ ”

Button1

Caption

Вычислить длины сторон треугольника

WordWrap

True

Label3

Caption

^ Длина катетов:

Label4

Caption

Длина гиипотенуза:

BitBtn1

Kind

bkClose


^ Текст программы:


unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons;


type

TForm1 = class(TForm)

Label1: TLabel;

Image1: TImage;

BitBtn1: TBitBtn;

Label2: TLabel;

Edit1: TEdit;

Button1: TButton;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Form1: TForm1;


implementation


{$R *.dfm}

var h, a, gip : real;

var a1,gip1: string;

procedure TForm1.Button1Click(Sender: TObject); // Щелчек по командной кнопке

begin //Начать работу

h := StrToFloat(Form1.Edit1.Text); //Высоту h берем из текстового поля и переводим в вещественный тип

a := h*sqrt(2); //Вычисляем длину катета

gip:= 2*h; // ычисляем длину гипотенузы

a1:=FloatToStr(a); // Переводим вещественные величины в строковые

gip1:=FloatToStr(gip); // Переводим вещественные величины в строковые

Form1.Label5.Caption := a1; //Выводи результат на форму

Form1.Label6.Caption := gip1 //Выводи результат на форму

end;


end.


Тестирование:





Задача № 2


Постановка задачи:


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


Математическая модель:


  1. От 100% отнять процент экономии за счет нового карбюратора

  2. Оставшейся процент взять за 100%, и решить пропорцию

  3. От оставшегося процента полученного в п. 1 отнять результат полученный в п.2

  4. повторить пункты 2 и 3



Блок-схема:





Описание интерфейса:




В таблице показаны свойства объектов


^ Объекты и их свойства

Объект

Свойство

Устанавливаемое значение

Label1

Caption


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

Label3

Caption

% топлива будет фактически сэкономленно

Label4

Caption

Процент экономии за счет нового карбюратора::

Button2

Caption

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

Button1

Caption

Расчитать экономию по условию задачи

Label5

Caption

Процент экономии за счет новой системы зажигания:

Label4

Caption

Процент экономии за счет нового карбюратора:

Label6

Caption

Процент экономии за счет нового поршневого кольца:

Button1

Caption

Расчитать экономию

Label11

Caption

% топлива бедут сэкономлена

BitBtn1

Kind

bkClose


^ Текст программы:


unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Buttons, StdCtrls;


type

TForm1 = class(TForm)

Label1: TLabel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

BitBtn1: TBitBtn;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Form1: TForm1;


implementation


{$R *.dfm}

var Karb, Zazhig, Kolca,x4: string;

var x,x1,x2,x3, x0 : Real;


procedure TForm1.Button1Click(Sender: TObject);

begin

ShowMessage('Конечно же, автомобиль не сможет ездить без топлива!'); //Выводим сообщение

// Вычисляем результат по условию задачи

x0:=50;

x:= (50*30)/100;

x1:= 50-x ;

x2:= 35*20/100 ;

x3:=x0+x+x2 ;

x4:= FloatToStr(x3);

// Выводим результат не форму

Form1.Label2.Visible:= true;

Form1.Label3.Visible:= true;

Form1.Label2.Caption := x4


end;


procedure TForm1.Button2Click(Sender: TObject);

begin

// Вводим произвольные проценты

Karb:=inputbox('Ввод', 'Введите процент экономии за счет нового карбюратора', '');

Zazhig:=InputBox('Ввод','Введите процент экономии за счет новой системы зажигания','');

Kolca:=InputBox('Ввод','Введите процент экономии за счет новых поршневых колец','');

//Записываем их на форму

Form1.Label7.Caption:=karb+'%';

Form1.Label8.Caption :=Zazhig+'%';

Form1.Label9.Caption := Kolca+'%';

// Делаем расчеты

x0:=StrToFloat(karb);

x:=((100-strToFloat(karb))*StrToFloat(zazhig))/100;

x1:=100-StrToFloat(karb)-x;

x2:=(x1*StrToFloat(kolca))/100;

x3:=x0+x+x2;

//Выводим результат на форму

Form1.Label10.Caption := FloatToStr(x3);

end;


end.


Тестирование:


При нажатии на кнопку «рассчитать экономию по условию задачи» появляется сообщение:





При нажатии на кнопку «Ввести проценты» последовательно появляются окна которые необходимо заполнить:










Введем в каждое окно поочередно цифры, например: 8, 5, 6. Получаем результат:





Задача № 3


Постановка задачи:


Заданы уравнения двух пересекающихся прямых на плоскости: y=k1*x+b1; y=k2*x+b2. Найти угол между ними.


^ Математическая модель:


Что бы найти угол между двумя прямыми надо найти тангенс угла по формуле:



Для того, что бы найти значение угла , надо найти значение arctg ().


Блок-схема:





Описание интерфейса:




В таблице показаны свойства объектов


^ Объекты и их свойства

Объект

Свойство

Устанавливаемое значение

Label1

Caption


Заданы уравнения двух пересекающихся прямых на плоскости: y=k1*x+b1; y=k2*x+b2. Найти угол между ними.

Label2

Caption

Введите значения:

Label3

Caption

k1

Button1

Caption

Вычислить

Label5

Caption

k2

Label4

Caption

b1

Label6

Caption

b2

Button1

Caption

Расчитать экономию

Edit1

Text




Edit2

Text




Edit3

Text




Edit4

Text




BitBtn1

Kind

bkClose


^ Текст программы:


unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons;


type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

BitBtn1: TBitBtn;

Button1: TButton;

Label7: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Form1: TForm1;


implementation


{$R *.dfm}

var k1,k2,b1,b2, rez: real;

var rez1: string;


procedure TForm1.Button1Click(Sender: TObject);

begin

//Переводим необходимые для расчета величины в вещественный тип

k1:=StrToFloat(Form1.Edit1.Text);

k2:=StrToFloat(Form1.Edit3.Text);

//расчет

rez:= ((k2-k1)/(1+k1*k2));

rez:= Arctan(rez);

//переводим результат в градусы

rez:=57*rez;

//Переводим необходимые величины в строковый тип

rez1:=floatToStr(rez);

//выводим результат на форму

Form1.Label7.Caption := rez1

end;


end.

Тестирование:


Введем произвольные числа в ячейки, нажмем на кнопку «Вычислить» получаем результат:





Скачать файл (1007 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации