Инфоурок · web viewi СЕМЕСТРЛекция 1 Тема Элементы...

101
I СЕМЕСТР Лекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы Запускается Delphi обычным образом, т. е. выбором из меню Borland Delphi 7 команды Delphi 7. Вид экрана после запуска Delphi несколько необычен. Вместо одного окна на экране появляются пять: главное окно — Delphi 7; окно стартовой формы — Form 1; окно редактора свойств объектов — Object Inspector; окно просмотра списка объектов — Object TreeView; окно редактора кода — Unitl.pas. Окно редактора кода почти полностью закрыто окном стартовой формы. Рис. Вид экрана после запуска Delphi В главном окне находится меню команд, панели инструментов и палитра компонентов. Окно стартовой формы (Forml) представляет собой заготовку главного окна разрабатываемого приложения. Программное обеспечение принято делить на системное и прикладное. Системное программное обеспечение — это все то, что составляет операционную систему. Остальные программы принято считать прикладными. Для краткости прикладные программы называют приложениями.

Upload: others

Post on 09-Mar-2021

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

I СЕМЕСТРЛекция 1

Тема Элементы интерфейса Delphi.

1. Начало работы2. Форма

1. Начало работыЗапускается Delphi обычным образом, т. е. выбором из меню Borland Delphi 7 команды Delphi

7.Вид экрана после запуска Delphi несколько необычен. Вместо одного окна на экране

появляются пять:главное окно — Delphi 7;окно стартовой формы — Form 1;окно редактора свойств объектов — Object Inspector;окно просмотра списка объектов — Object TreeView;окно редактора кода — Unitl.pas.Окно редактора кода почти полностью закрыто окном стартовой формы.

Рис. Вид экрана после запуска DelphiВ главном окне находится меню команд, панели инструментов и палитра компонентов.Окно стартовой формы (Forml) представляет собой заготовку главного окна

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

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

Рис. Главное окноОкно Object Inspector — окно редактора свойств объектов предназначено для редактирования

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

Page 2: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

др.). Свойства объекта — это характеристики, определяющие вид, положение и поведение объекта. Например, свойства width и Height задают размер (ширину и высоту) формы, свойства тор и Left — положение формы на экране, свойство caption — текст заголовка.

Рис. На вкладке Properties перечислены свойства объекта и указаны их значения

Рис. Окно редактора кодаВ окне редактора кода, которое можно увидеть, отодвинув в сторону окно формы, следует

набирать текст программы. В начале работы над новым проектом это окно редактора кода содержит сформированный Delphi шаблон программы.2. Форма

Работа над новым проектом, так в Delphi называется разрабатываемое приложение, начинается с создания стартовой формы. Так на этапе разработки программы называют диалоговые окна.

Стартовая форма создается путем изменения значений свойств формы Form1 и добавления к форме необходимых компонентов (полей ввода и вывода текста, командных кнопок).

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

Для просмотра и изменения значений свойств формы и ее компонентов используется окно Object Inspector. В верхней части окна Object Inspector указано имя объекта, значения свойств которого отображается в данный момент. В левой колонке вкладки Properties (Свойства) перечислены свойства объекта, а в правой — указаны их значения.

Page 3: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Таблица. Свойства формы (объекта mform)Свойство ОписаниеName Имя формы. В программе имя формы используется для управления

формой и доступа к компонентам формыCaption Текст заголовкаWidth Ширина формыHeight Высота формыTop Расстояние от верхней границы формы до верхней границы экранаLeft Расстояние от левой границы формы до левой границы экранаBorderStyle Вид границы. Граница может быть обычной (bsSizeable), тонкой (bs

Single) или отсутствовать (bsNone). Если у окна обычная граница, то во время работы программы пользователь может при помощи мыши изменить размер окна. Изменить размер окна с тонкой границей нельзя. Если граница отсутствует, то на экран во время работы программы будет выведено окно без заголовка. Положение и размер такого окна-во время работы программы изменить нельзя

Borderlcons Кнопки управления окном. Значение свойства определяет, какие кнопки управления окном будут доступны пользователю во время работы программы. Значение свойства задается путем присвоения значений уточняющим свойствам biSystemMenu, biMinimaze, biMaximaze И biHelp. Свойство biSystemMenu определяет доступность кнопки Свернуть и кнопки системного меню, biMinimaze— кнопки Свернуть, biMaximaze— кнопки Развернуть, biHelp — кнопки вывода справочной информации

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

Icon Значок в заголовке диалогового окна, обозначающий кнопку вывода системного меню

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

При создании формы в первую очередь следует изменить значение свойства caption (Заголовок). В нашем примере надо заменить текст Form1 на "скорость бега". Чтобы это сделать, нужно в окне Object Inspector щелкнуть мышью на строке Caption, в результате чего будет выделено текущее значение свойства, в строке появится курсор, и можно будет ввести текст "скорость бега" (рис. В12).

Аналогичным образом можно установить значения свойств Height и width, которые определяют высоту и ширину формы. Размер формы и ее положение на экране, а также размер других элементов управления и их положение на поверхности формы задают в пикселах, т. е. точках экрана. Свойствам Height и width надо присвоить значения 250 и 330 соответственно.

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

Page 4: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Рис. Установка значения свойства путем ввода значенияПоложение диалогового окна на экране после запуска программы соответствует положению

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

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

Некоторые свойства являются сложными, т. е. их значение определяется совокупностью значений других (уточняющих) свойств. Перед именами сложных свойств стоит значок "+", при щелчке на котором раскрывается список уточняющих свойств. Например, свойство BorderIcons определяет, какие кнопки управления окном будут доступны во время работы программы. Так, если свойству biMaximize присвоить значение False, то во время работы программы кнопки Развернуть в заголовке окна не будет.

Лекция 2Тема Визуальные компоненты Delphi и их общие свойства.

1. Стандартные компоненты2. Страница Additional3. Страница System

1. Стандартные компоненты На первой странице Палитры Компонент размещены 14 объектов (рис.8) определенно важных

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

Рис.8: Компоненты, расположенные на первой странице Палитры.Стандартные компоненты Delphi перечислены ниже с некоторыми комментариями по их применению. При изучении данных компонент было бы полезно иметь под рукой компьютер с тем, чтобы посмотреть, как они работают и как ими манипулировать.

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

Page 5: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

TMainMenu позволяет Вам поместить главное меню в программу. При помещении TMainMenu на форму это выглядит, как просто иконка. Иконки данного типа называют "невидимыми компонентом", поскольку они невидимы во время выполнения программы. Создание меню включает три шага: (1) помещение TMainMenu на форму, (2) вызов Дизайнера Меню через свойство Items в Инспекторе Объектов, (3) определение пунктов меню в Дизайнере Меню.

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

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

TEdit - стандартный управляющий элемент Windows для ввода. Он может быть использован для отображения короткого фрагмента текста и позволяет пользователю вводить текст во время выполнения программы.

TMemo - иная форма TEdit. Подразумевает работу с большими текстами. TMemo может переносить слова, сохранять в ClipBoard фрагменты текста и восстанавливать их, и другие основные функции редактора. TMemo имеет ограничения на объем текста в 32Кб, это составляет 10-20 страниц. (Есть VBX и “родные” компоненты Delphi, где этот предел снят).

TButton позволяет выполнить какие-либо действия при нажатии кнопки во время выполнения программы. В Delphi все делается очень просто. Поместив TButton на форму, Вы по двойному щелчку можете создать заготовку обработчика события нажатия кнопки. Далее нужно заполнить заготовку кодом:procedure TForm1.Button1Click(Sender: TObject);beginMessageDlg('Are you there?',mtConfirmation,mbYesNoCancel,0);end;

TCheckBox отображает строку текста с маленьким окошком рядом. В окошке можно поставить отметку, которая означает, что что-то выбрано. Например, если посмотреть окно диалога настроек компилятора (пункт меню Options | Project, страница Compiler), то можно увидеть, что оно состоит преимущественно из CheckBox’ов.

TRadioButton позволяет выбрать только одну опцию из нескольких. Если Вы опять откроете диалог Options | Project и выберете страницу Linker Options, то Вы можете видеть, что секции Map file и Link buffer file состоят из наборов RadioButton.

TListBox нужен для показа прокручиваемого списка. Классический пример ListBox’а в среде Windows - выбор файла из списка в пункте меню File | Open многих приложений. Названия файлов или директорий и находятся в ListBox’е.

TComboBox во многом напоминает ListBox, за исключением того, что позволяет водить информацию в маленьком поле ввода сверху ListBox. Есть несколько типов ComboBox, но наиболее популярен спадающий вниз (drop-down combo box), который можно видеть внизу окна диалога выбора файла.

TScrollbar - полоса прокрутки, появляется автоматически в объектах редактирования, ListBox’ах при необходимости прокрутки текста для просмотра.

TGroupBox используется для визуальных целей и для указания Windows, каков порядок перемещения по компонентам на форме (при нажатии клавиши TAB).

Page 6: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

TRadioGroup используется аналогично TGroupBox, для группировки объектов TRadioButton.

TPanel - управляющий элемент, похожий на TGroupBox, используется в декоративных целях. Чтобы использовать TPanel, просто поместите его на форму и затем положите другие компоненты на него. Теперь при перемещении TPanel будут передвигаться и эти компоненты. TPanel используется также для создания линейки инструментов и окна статуса.Это полный список объектов на первой странице Палитры Компонент. Если Вам нужна дополнительная информация, то выберите на Палитре объект и нажмите клавишу F1 - появится Справочник с полным описанием данного объекта.2. Страница AdditionalНа странице Standard представлены управляющие элементы, появившиеся в Windows 3.0. На странице Additional размещены объекты, позволяющие создать более красивый пользовательский интерфейс программы.

Список компонент:

TBitBtn - кнопка вроде TButton, однако на ней можно разместить картинку (glyph). TBitBtn имеет несколько предопределенных типов (bkClose, bkOK и др), при выборе которых кнопка принимает соответствующий вид. Кроме того, нажатие кнопки на модальном окне (Form2.ShowModal) приводит к закрытию окна с соответствующим модальным результатом (Form2.ModalResult).

TSpeedButton - кнопка для создания панели быстрого доступа к командам (SpeedBar). Пример - SpeedBar слева от Палитры Компонент в среде Delphi. Обычно на данную кнопку помещается только картинка (glyph).TTabSet - горизонтальные закладки. Обычно используется вместе с TNoteBook для создания многостраничных окон. Название страниц можно задать в свойстве Tabs. Но проще это сделать в программе при создании формы (OnCreate) :TabSet1.Tabs := Notebook1.Pages;А для того, чтобы при выборе закладки страницы перелистывались нужно в обработчике события OnClick для TTabSet написать:Notebook1.PageIndex := TabSet1.TabIndex;TNoteBook - используется для создания многостраничного диалога, на каждой странице располагается свой набор объектов. Используется совместно с TTabSet.

TTabbedNotebook - многостраничный диалог со встроенными закладками, в данном случае - закладки сверху.

TMaskEdit - аналог TEdit, но с возможностью форматированного ввода. Формат определяется в свойстве EditMask. В редакторе свойств для EditMask есть заготовки некоторых форматов: даты, валюты и т.п. Спец. символы для маски можно посмотреть в Справочнике.

TOutline - используется для представления иерархических отношений связанных данных. Например - дерево директорий.

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

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

TImage - отображает графическое изображение на форме. Воспринимает форматы BMP, ICO, WMF. Если картинку подключить во время дизайна программы, то она прикомпилируется к EXE файлу.

Page 7: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

TShape - служит для отображения простейших графических объектов на форме: окружность, квадрат и т.п.

TBevel - элемент для рельефного оформления интерфейса.

THeader - элемент оформления для создания заголовков с изменяемыми размерами для таблиц.

TScrollBox - позволяет создать на форме прокручиваемую область с размерами большими, нежели экран. На этой области можно разместить свои объекты.3. Страница System

Страница представляет набор компонент для доступа к некоторым системным сервисам типа таймер, DDE, OLE и т.п.

TTimer - таймер, событие OnTimer периодически вызывается через промежуток времени, указанный в свойстве Interval. Период времени может составлять от 1 до 65535 мс.

TPaintBox - место для рисования. В обработчики событий, связанных с мышкой передаются относительные координаты мышки в TPaintBox, а не абсолютные в форме.

TFileListBox - специализированный ListBox, в котором отображаются файлы из указанной директории (св-во Directory). На названия файлов можно наложить маску, для этого служит св-во Mask. Кроме того, в св-ве FileEdit можно указать объект TEdit для редактирования маски.

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

TDriveComboBox - специализированный ComboBox для выбора текущего диска. Имеет свойство DirList, в котором можно указать TDirectoryListBox, который будет отслеживать переход на другой диск.

TFilterComboBox - специализированный ComboBox для выбора маски имени файлов. Список масок определяется в свойстве Filter. В свойстве FileList указывается TFileListBox, на который устанавливается маска.!!!! С помощью последних четырех компонент (TFileListBox, TDirectoryListBox, TDriveComboBox, TFilterComboBox) можно построить свой собственный диалог выбора файла, причем для этого не потребуется написать ни одной строчки кода.

TMediaPlayer - служит для управления мултимедйными устройствами (типа CD-ROM, MIDI и т.п.). Выполнен в виде панели управления с кнопками Play, Stop, Record и др. Для воспроизведения может понадобиться как соответствующее оборудование, так и программное обеспечение. Подключение устройств и установка ПО производится в среде Windows. Например, для воспроизведения видео, записанного в формате AVI, в потребуется установить ПО MicroSoft Video (в Windows 3.0, 3.1, WFW 3.11).

TOLEContainer - контейнер, содержащий OLE объекты. Поддерживается OLE 2.02 Подробнее об этом - в последующих уроках.

Лекция 3Тема Состав приложений.

1. Консольное приложение2. Обмен информацией3. Сохранение программы

Page 8: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

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

Чтобы создать консольное приложение, надо дать команду File >• New >• Other (Файл > Создать > Другое) и в диалоговом окне New Items (Создание программы) выбрать значок Console Application (Консольное приложение).

Система Delphi автоматически сгенерирует в текстовом редакторе исходный код – заготовку будущего приложения.

program Projectl; {$APPTYPE CONSOLE} uses sysutils;begin{TODO -oUser -cConsole Main Insert code here} end.

Код начинается с заголовка программы, состоящего из ключевого слова program и атоматически сгенерированного названия Projectl1.

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

Деректива {$APPTYPE CONSOLE} говорит компилятору, что данная программа представляет собой консольное приложение.

Следующая строка задает подключение стандартного модуля SysUtils с помощью ключевого слова uses.

Далее идет собственно программа — для нее подготовлен логический блок, внутри которого система Delphi 7 добавила комментарий Insert user code here (Вставьте сюда свой исходный текст).

2. Обмен информациейТак как создаваемая программа — консольная, общаться с пользователем с помощью

графического интерфейса она не может. Для этого нужны более простые средства обмена информацией с человеком.

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

Процедура ReadLn требует, чтобы человек после окончания ввода нажал клавишу ENTER. а процедура WriteLn после окончания вывода значений осуществляет перевод курсора на следующую строку. Другая процедура вывода, Write, не выполняет такого перевода и продолжает вывод данных в текущую строку.

У процедуры ReadLn может не быть ни одного параметра. Тогда при ее выполнении программа просто ожидает, когда пользователь нажмет клавишу ENTER. Если не указан ни один параметр процедуры WriteLn, то на экране произойдет пропуск одной пустой строчки.

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

beginReadLn end.

Page 9: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Обратите внимание: точку с запятой перед ключевым словом end можно не ставить.3. Сохранение программыПеред первым запуском программы ее исходный текст необходимо сохранить. Для этого

щелкните на командной кнопке Save Alt (Сохранить все) на панели инструментов.Система Delphi 7 попросит указать место для сохранения главного файла Projectl. Укажите

любую подходящую папку.Компиляция и запуск программыЧтобы откомпилировать и сразу запустить данную программу, достаточно нажать клавишу F9. В

папке, где был сохранен файл с исходным текстом, появится исполнимый файл программы — Projectl.exe. Она будет тут же автоматически запущена та среды Delphi 7, На экране откроется окно консольного приложения.

После нажатия клавиши ENTER управление будет передано обратно в оболочку Delphi 7.

Лекция 4Тема Программирование линейных алгоритмов.

1. Числовые типы данных2. Символьный и строковый типы данных3. Переменные и константы4. Математические функции

1. Числовые типы данныхЯзык Delphi поддерживает семь целых типов данных: shortint, smailint, Longint, Int64, Byte,

word и Longword, описание которых приведено в табл. 1.1.Тип Диапазон ФорматShortint -128-127 8 битовSmallint -32 768 - 32 767 16 битовLongint -2 147 483 648 - 2 147 483 647 32 битаInt64 -263- 263 - 1 64 битаByte 0-255 8 битов, беззнаковыйWord 0-65 535 16 битов, беззнаковыйLongword 0 - 4 294 967 295 32 бита, беззнаковый

Object Pascal поддерживает и наиболее универсальный целый тип - Integer, который Эквивалентен Longint.

 Вещественный типЯзык Delphi поддерживает шесть вещественных типов: Reai48, single, Double, Extended, comp,

Currency. Типы различаются между собой диапазо-ном допустимых значений, количеством значащих цифр и количеством байтов, необходимых для хранения данных в памяти компьютера (табл. 1.2).Тип Диапазон Значащих цифр БайтовReal48 2.9x 10-39-1.7x1038 11-12 06Single 1.5 x 10-45-3.4х 1038 7-8 04Double 5.0x10-324 -1.7x10308 15-16 08Extended 3.6x10-4951 -1.1 х104932 19-20 10Comp 263+1 - 263-1 19-20 08Currency -922 337 203 685 477.5808 --

922 337 203 685 477.580719-20 08

Page 10: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Язык Delphi поддерживает и наиболее универсальный вещественный тип - Real, который э квивалентен Double2. Символьный и строковый типы данныхЯзык Delphi поддерживает два символьных типа: Ansichar и Widechar:тип Ansichar — это символы в кодировке ANSI, которым соответствуют числа в диапазоне от 0 до 255;тип widechar — это символы в кодировке Unicode, им соответствуют числа от 0 до 65 535.Object Pascal поддерживает и наиболее универсальный символьный тип - Char, который эквивалентен Ansichar.Строковый типЯзык Delphi поддерживает три строковых типа: shortstring, LongstringWideString:тип shortstring представляет собой статически размещаемые в памяти компьютера строки длиной от 0 до 255 символов;тип Longstring представляет собой динамически размещаемые в памяти строки, длина которых ограничена только объемом свободной памяти;тип WideString представляет собой динамически размещаемые в памяти строки, длина которых ограничена только объемом свободной памяти. Каждый символ строки типа WideString является Unicode-символом.В языке Delphi для обозначения строкового типа допускается использование идентификатора string. Тип string эквивалентен типу shortstring.3. Переменные и константы

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

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

Следует обратить внимание на то, что компилятор языка Delphi не различает прописные и строчные буквы в именах переменных, поэтому имена SUMMA, Summa и summa обозначают одну и ту же переменную.

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

В общем виде инструкция объявления переменной выглядит так:Имя : тип; Пример:а : Real; b : Real; i : Integer;а,b,с : Real; x1,x2 : Real;КонстантыВ языке Delphi существует два вида констант: обычные и именованные. Обычная константа — это целое или дробное число, строка символов или отдельный символ,

логическое значение.Именованная константаИменованная константа — это имя (идентификатор), которое в программе используется

вместо самой константы.Именованная константа, как и переменная, перед использованием должна быть объявлена. В

общем виде инструкция объявления именованной константы выглядит следующим образом:константа = значение; Именованные константы объявляются в программе в разделе объявления констант, который

начинается словом const. Ниже приведен пример объявления именованных констант (целой, строковой и дробной).

constBound = 10;Title = 'Скорость бега';pi = 3.1415926;

Page 11: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

В отличие от переменной, при объявлении константы тип явно не указывают. Тип константы определяется ее видом, например:

125 — константа целого типа;0.0 — константа вещественного типа;' выполнить ' — строковая константа;' \' — символьная константа.

4. Математические функцииТаблица 1.6. Математические функции Функция ЗначениеАbs (n) Абсолютное значение nSqrt (n) Квадратный корень из nSqr (n) Квадрат nSin (n) Синус nCos (n) Косинус nArctan (n) Арктангенс nЕхр(n) Экспонента nLn(n) Натуральный логарифм nRandom(n) Случайное целое число в диапазоне от 0 до n- 1

Функции преобразованияФункции преобразования (табл. 1.7) наиболее часто используются в инструкциях,

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

Например, инструкция Labeii.caption := FioatTostr(x) выводит значе-ние переменной х в поле Labeii.Таблица 1.7. Функции преобразования

Функция Значение функцииChr(n) IntToStr (k) Символ, код которого равен n Строка, являющаяся

изображением целого kFloatToStr (n) Строка, являющаяся изображением вещественного nFloatToStrF(n, f , k,m) Строка, являющаяся изображением вещественного п. При

вызове функции указывают: f — формат (способ изображения); k — точность (нужное общее количество цифр); m — количество цифр после десятичной точки

StrToInt (s) Целое, изображением которого является строка sStrToFloat (s) Вещественное, изображением которого является строка sRound (n) Целое, полученное путем округления n по известным правиламTrunc (n) Целое, полученное путем отбрасывания дробной части nFrac(n) Дробное, представляющее собой дробную часть вещественного

nInt (n) Дробное, представляющее собой целую часть вещественного n

Page 12: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Лекция 5Тема Программирование линейных алгоритмов.

1. Ввод данных2. Вывод результатов3. Вывод в поле диалогового окна

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

редактирования (компонент Edit).А) Ввод из окна вводаОкно ввода — это стандартное диалоговое окно, которое появляется на экране в результате

вызова функции inputBox. Значение функции inputBox — строка, которую ввел пользователь.В общем виде инструкция ввода данных с использованием функции inputBox выглядит так:Переменная := InputBox(Заголовок, Подсказка, Значение); где:Переменная — переменная строкового типа, значение которой должно быть получено от

пользователя;Заголовок — текст заголовка окна ввода; П подсказка — текст поясняющего сообщения;Значение — текст, который будет находиться в поле ввода, когда окно ввода появится на

экране.Ниже в качестве примера приведена инструкция, используя которую можно получить

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

s:=InputBox('Фунты-килограммы','Введите вес в фунтах','0');

Рис. 1.5. Пример окна ввода Если во время работы программы пользователь введет строку и щелкнет на кнопке ОК, то

значением функции inputBox будет введенная строка. Если будет сделан щелчок на кнопке Cancel, то значением функции будет строка, переданная функции в качестве параметра значение.

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

s := InputBox('Фунты-килограммы1,'Введите вес в фунтах',''); funt := StrToFloat(s);б) Ввод из поля редактирования

Поле редактирования — это компонент Edit. Ввод данных из поля редактирования осуществляется обращением к свойству Text.

Рис. 1.6. Компонент Edit1 используется для ввода данных На рис. 1.6 приведен вид диалогового окна программы пересчета веса из фунтов в

килограммы. Компонент Editl используется для ввода исходных данных. Инструкция ввода данных в этом случае будет иметь вид:

Funt := StrToFloat(Editl.Text);

Page 13: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

поле вывода (компонент Label) диалогового окна.Вывод в окно сообщенияОкна сообщений используются для привлечения внимания пользователя. При помощи окна

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

Вывести на экран окно с сообщением можно при помощи процедуры ShowMessage или функции MessageDlg.

Процедура ShowMessage выводит на экран окно с текстом и командной кнопкой ОК.В общем виде инструкция вызова процедуры ShowMessage выглядит так:ShowMessage(Сообщение);где сообщение — текст, который будет выведен в окне.На рис. 1.7 приведен вид окна сообщения, полученного в результате выполнения инструкции:ShowMessage('Введите вес в фунтах.');

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

ShowMessage, указано название приложения, которое задается на вкладке Application окна Project Options. Если название приложения не задано, то в заголовке будет имя исполняемого файла.

Функция MessageDig более универсальная. Она позволяет поместить в окно с сообщением один из стандартных значков, например "Внимание", задать количество и тип командных кнопок и определить, какую из кнопок нажал пользователь. На рис. 1.8 приведено окно, выведенное в результате выполнения инструкции

r:=MessageDlg('Файл '+ FName + ' будет удален.', mtWarning, [mbOk,mbCancel] , 0) ;

Рис. 1.8. Пример окна сообщения Значение функции MessageDlg — число, проверив значение которого, можно определить,

выбором какой командной кнопки был завершен диалог.В общем виде обращение к функции MessageDig выглядит так:Выбор: = MessageDlg( Сообщение, Тип, Кнопки, КонтекстСправки) где:Сообщение — текст сообщения;Тип — тип сообщения. Сообщение может быть информационным, предупреждающим или

сообщением о критической ошибке. Каждому типу сообщения соответствует определенный значок. Тип сообщения задается именованной константой (табл. 1.8);

Кнопки — список кнопок, отображаемых в окне сообщения. Список может состоять из нескольких разделенных запятыми именованных констант (табл. 1.9). Весь список заключается в квадратные скобки.

Таблица 1.8. Константы функции MessageDlg Константа Тип сообщения ЗначокmtWarning Внимание

Page 14: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

mtError Ошибка

mt Information Информация

mtConfirmation Подтверждение

mtCustom Обычное Без значка

  Таблица 1.9. Константы функции MessageDlg Константа Кнопка Константа КнопкаmbYes Yes mb Abort AbortmbNo No mbRetry RetrymbOK OK mblgnore IgnorembCancel Cancel mbAll AllmbHelp Help

Например, для того чтобы в окне сообщения появились кнопки ОК и Cancel, список Кнопки должен быть таким:

[mbOK,mbCancel]Кроме приведенных констант можно использовать константы: mbokcancel, mbYesNoCancel и

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

контекстСправки — параметр, определяющий раздел справочной системы, который появится на экране, если пользователь нажмет клавишу <F1>. Если вывод справки не предусмотрен, то значение параметра КонтекстСправки должно быть равно нулю.

Значение, возвращаемое функцией MessageDig (табл. 1.10), позволяет определить, какая из командных кнопок была нажата пользователем.

Таблица 1.10. Значения функции MessageDlg Значение функции MessageDig Диалог завершен нажатием кнопкиmrAbort AbortmrYes YesmrOk OkmrRetry RetrymrNo NomrCancel CancelmrIgnore IgnoremrAll All

3. Вывод в поле диалогового окнаЧасть диалогового окна, предназначенная для вывода информации, называется полем вывода,

или полем метки. Поле вывода — это компонент Label.Содержимое поля вывода определяется значением свойства Caption. Изменить значение

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

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

На рис. 1.9 изображено диалоговое окно программы пересчета веса из фунтов в килограммы. Окно содержит два компонента Label. Компонент Label1 обеспечивает вывод информационного сообщения, компонент Label2 — вывод результата работы программы.

Page 15: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Рис. 1.9. Поле Label2 предназначено для вывода результата работы программы Свойство Caption символьного типа. Поэтому для того, чтобы во время работы программы

вывести в поле метки числовое значение, нужно преобразовать число в строку, например, При при помощи фуекции FloatToStr или IntToStr.

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

Label2.Caption:= FloatToStr(kg)+' кг';

Page 16: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Лекция 6Тема Программирование разветвляющихся алгоритмов.

1 Инструкция if 2. Инструкция case

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

Выбор осуществляется в зависимости от выполнения условия.В общем виде инструкция if записывается так:

if условие thenbegin// здесь инструкции, которые надо выполнить, // если условие истинно. endelse begin// здесь инструкции, которые надо выполнить, // если условие ложно. end;Обратите внимание, что перед else (после end) точка с запятой не ставится.

Пример1Рассмотрим программу вычисления стоимости междугородного телефонного разговора.Стоимость междугородного разговора по телефону в выходные дни ниже, чем в обычные.

Если день недели — суббота или воскресенье, то стоимость уменьшается на величину скидки. Цена минуты разговора и величина скидки задаются в тексте программы как константы. Вид диалогового окна программы приведен на рис. 1

Компонент НазначениеEdit1 Edit2 Label1, LabelLabel3Button1

Для ввода длительности разговора в минутах Для ввода номера дня недели 2 Для вывода пояснительного текста о назначении полей вводаДля вывода результата вычисления — стоимости разговора Для активизации процедуры вычисления стоимости разговора

Листинг . Вычисление стоимости телефонного разговораimplementation($R *.DFM}procedure TForm1.Button1Click(Sender: TObject); constPAY =0.15; // цена одной минуты разговора 0.15 рубля DISCOUNT = 0.2; // скидка 20 процентов var

Page 17: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Time:Real; // длительность разговора Day:integer; // день недели Summa:real; // стоимость разговора begin// получить исходные данные Time:=StrToFloat(Editl.Text) ;Day:=StrToInt(Edit2.Text);// Вычислить стоимость разговора Summa:= PAY*Time;// Если день суббота или воскресенье, то уменьшить // стоимость на величину скидки if (Day = 6) OR (Day = 7)then Surama:=Summa*(1 - DISCOUNT);// вывод результата вычисления label3.caption:='K оплате '+ FloatToStr(Summa) + 'руб.'; end;end.

Пример2Программа запрашивает вес и рост, вычисляет оптимальное значение, сравнивает его с

реальным весом и выводит соответствующее сообщение.

Листинг.Контроль веса implementation($R *.DFM}procedure TForml.ButtonlClick(Sender: TObject); varw:real; { вес } h:real; { рост } opt:real;{ оптимальный вес } d:real; { отклонение от оптимального веса } beginw:=StrToFloat(Editl.text);h:=StrToInt(Edit2.Text);opt:=h-100; if w=opt thenLabel3.caption:='Bu в хорошей форме!' elseif w < opt thenbegind:=opt-w;Labels.caption:='Вам надо поправиться, на '+ FloatToStr(d)+ 'кг.'; end elsebegind:=w-opt;

Page 18: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Labels.caption:='Haдo немного похудеть, на '+ FloatTostr(d)+ ' кг.';end;end;end.В приведенном примере множественный выбор реализован при помощидвух инструкций if, одна из которых "вложена" в другую.

2 Инструкция case В языке Delphi есть инструкция case, которая позволяет эффективно реализовать

множественный выбор. В общем виде она записывается следующим образом:case Селектор of список1: begin{ инструкции 1 } end; список2: begin{ инструкции 2 } end; списокМ: begin{ инструкции N } end;elsebegin{ инструкции ) end;end;где:Селектор — выражение, значение которого определяет дальнейший ход выполнения

программы (т. е. последовательность инструкций, которая будет выполнена);Список N — список констант. Если константы представляют собой диапазон чисел, то вместо

списка можно указать первую и последнюю константу диапазона, разделив их двумя точками. Например, список 1, 2, 3, 4, 5, 6 может быть заменен диапазоном 1..6.

Выполняется инструкция case следующим образом:1. Сначала вычисляется значение выражения-селектора.2. Значение выражения-селектора последовательно сравнивается с константами из списков

констант.3. Если значение выражения совпадает с константой из списка, то выполняется

соответствующая этому списку группа инструкций. На этом выполнение инструкции саsе завершается.

4. Если значение выражения-селектора не совпадает ни с одной константой из всех списков, то выполняется последовательность инструкций, следующая за else.

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

Алгоритм, реализуемый инструкцией case Ниже приведены примеры инструкции case. case n_day of1,2,3,4,5: day:='Рабочий день. ' ;6: day:='Cyббoтa!';7: day:='Воскресенье!'; end;case n_day of1..5: day:='Рабочий день.';6: day:='Суббота!';7: day:='Воскресенье!'; end;

Page 19: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

case n_day of6: day:='Суббота!';7: day:='Воскресенье!';else day:='Рабочий день.'; end;

Лекция 7Тема Программирование циклических алгоритмов

1. Инструкция For2. Инструкция While3. Инструкция Repeat

1. Инструкция forИнструкция for используется в том случае, если некоторую последовательность действий

(инструкций программы) надо выполнить несколько раз, причем число повторений заранее известно.В общем виде инструкция for записывается следующим образом: for счетчик := нач_знач to кон_знач do begin// инструкции, которые надо выполнить несколько раз endПеременная счетчик, выражения нач_знач и кон_знач должны быть целого типа.Количество повторений инструкций цикла можно вычислить по формуле(кон_знач — нач_знач + l).Примеры:for i:=l to 10 do beginlabel1.caption:=label1.caption + '*'; end; for i: =1 to n do s := s+i;Примечание Если между begin и end находится только одна инструкция, то слова begin и end можно не

писать.Задача1: Пусть нужно написать программу, которая вычисляет значение функции у = 5х2 - 7

в точках —1, -0.5, 0, 0.5 и 1Процедура, обеспечивающая решение поставленной задачи, может выглядеть так:procedure TForm1.ButtonlClick(Sender: TObject); varу: real; // значение функции x: real; // аргумент функции dx: real; // приращение аргумента st: string; // изображение таблицы i : integer; // счетчик циклов beginst:=''; x := -1; dx := 0.5;for i:=l to 5 do beginу := 5*x*x -7;st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13); x :=x + dx; end;Label1.Caption := st; end;

Задача2Рассмотрим программу, которая вычисляет сумму первых 10 элементов ряда: 1 + + 1/3 + ...

(значение i-го элемента ряда связано с его номером формулой 1//). Диалоговое окно программы должно содержать, по крайней мере, два компонента: поле метки (Label1) и командную кнопку (Buttonl).

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

Page 20: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

выводит в поле Labell номер элемента и его значение в поле метки формы, предназначенное для вывода результата.

procedure TForm1.ButtonlClick(Sender: TObject);vari:integer; { номер элемента ряда } elem:real; { значение элемента ряда } summ:real; { сумма элементов ряда ) beginsumm:=0;label Leapt ion: = ' ' ; for i:=l to 10 do beginelem:=l/i;label1.caption:=labell.caption+IntToStr(i)+' '+FloatToStr(elem)+#13; sunrn: =summ+elem; end; label1.caption:=label1.caption+'Сумма ряда:'+FloatToStr(summ); end;Если в инструкции for вместо слова to записать downto, то после очередного выполнения

инструкций тела цикла значение счетчика будет не увеличиваться, а уменьшаться.2. Инструкция whileИнструкция (цикл) while используется в том случае, если некоторую последовательность

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

Типичными примерами использования цикла while являются вычисления с заданной точностью, поиск в массиве или в файле.

В общем виде инструкция while записывается следующим образом:while условие do begin// инструкции, которые надо выполнить несколько раз endгде условие — выражение логического типа, определяющее условие выполнения инструкций

цикла.1. Инструкция while выполняется следующим образом:2. Сначала вычисляется значение выражения условие.3. Если значение выражения условие равно False (условие не выполняется), то на этом

выполнение инструкции while завершается.4. Если значение выражения условие равно True (условие выполняется), то выполняются

расположенные между begin и end инструкции тела цикла. После этого снова проверяется выполнение условия. Если условие выполняется, то инструкции цикла выполняются еще раз. И так до тех пор, пока условие не станет ложным (False).

Алгоритм, соответствующий инструкции while, представлен на рис. 2.14.Внимание! Для того чтобы инструкции цикла while, которые находятся между begin и end,

были выполнены хотя бы один раз, необходимо, чтобы перед выполнением инструкции while значение выражения условие было истинно.Для того чтобы цикл завершился, нужно, чтобы последовательность инструкций между begin и end влияла на значение выражения условие (изменяла значения переменных, входящих в выражение условие).

3. Инструкция repeatИнструкция repeat, как и инструкция while, используется в программе в том случае, если

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

Page 21: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

В общем виде инструкция repeat записывается следующим образом:repeat// инструкции unti1 условие где условие — выражение логического типа, определяющее условие завершения цикла.Инструкция repeat выполняется следующим образом:1. Сначала выполняются находящиеся между repeat и until инструкции тела цикла.2. Затем вычисляется значение выражения условие. Если условие ложно (значение выражения

условие равно False), то инструкции тела цикла выполняются еще раз.3. Если условие истинно (значение выражения условие равно True), то выполнение цикла

прекращается.Таким образом, инструкции цикла, находящиеся между repeat и unti1, выполняются до тех

пор, пока условие ложно (значение выражения условие равно False).

Внимание! Инструкции цикла, находящиеся между repeat и until, выполняются как минимум один раз.

Для того чтобы цикл завершился, необходимо, чтобы инструкции цикла, располагающиеся между repeat и until, изменяли значения переменных, входящих в выражение условие.

В качестве примера использования инструкции repeat рассмотрим программу, которая проверяет, является ли введенное пользователем число простым (как известно, число называется простым, если оно делится только на единицу и само на себя). Например, число 21 — обычное (делится на 3), а число 17 — простое (делится только на 1 и на 17).

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

Форма приложения Простое число изображена на рис. 2.17, программа приведена в листинге 2.7.

Рис. 2.17. Форма приложения Простое числоЛистинг 2.7. Простое число unit simple_;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;typeTForm1 = class(TForm)Button1: TButton; // кнопка Проверить Label1: TLabel;Edit1: TEdit; // поле ввода числа Label2: TLabe1; // поле вывода результата procedure ButtonlClickfSender: TObject); private{ Private declarations } public

Page 22: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

{ Public declarations } end; varForm1: TForm1; implementation{$R *.DFM}procedure TForm1.ButtonlClick(Sender: TObject) ; varn: integer; // проверяемое число d: integer; // делитель r: integer; // остаток от деления п на d beginn:=StrToInt(Editl.text);d := 2; // сначала будем делить на два repeatr := n mod d;if r <> 0 // n не разделилось нацело на d then d := d + 1;until r = 0; // найдено число, на которое п разделилось без остатка label2.caption:=Edit1.text; if d = nthen Iabel2.caption:=label2.caption + ' — простое число.' else label2.caption:=label2.caption + ' — обычное число.'; end; end.

Лекция 8Тема Примеры разработки программ.

1. Инструкция goto2. Задачи

1. Инструкция gotoИнструкции if и case используются для перехода к последовательности инструкций программы в зависимости от некоторого условия. Поэтому их иногда называют инструкциями условного перехода. Помимо этих инструкций управления ходом выполнения программы существует еще одна — инструкция безусловного перехода goto.

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

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

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

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

используется для завершения процедуры в том случае, если пользователь введет неверные данные.Листинг. Простое число (использование инструкции goto) procedure TForm1.Button1Click(Sender: TObject);label // раздел объявления меток bye; varn: integer; // проверяемое число d: integer; // делитель r: integer; // остаток от деления п на d

Page 23: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

beginn:=StrToInt(Editl.text); if n <= 0 then beginMessageDlg('Число должно быть больше нуля.',mtError, [mbOk] , 0) ; Editl.text:= ";goto bye; end;// введено положительное число d:= 2; // сначала будем делить на два repeatr:= n mod d;if r <> 0 // n не разделилось нацело на d then d:= d + 1;unti1 r = 0;label2.caption:=Editl.text;if d = nthen label2.caption:=label2.caption+ ' — простое число.'else label2.caption:=label2.caption+' — обычное число.'; bye:end;В литературе по программированию можно встретить суждения о недопустимости

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

Задача Рассмотрим программу, которая вычисляет значение числа л с точностью, задаваемой пользователем во время работы программы. В основе алгоритма вычисления лежит тот факт, что сумма ряда 1 - 1/3 + 1/5 -1/7 + 1/9 + ... приближается к значению л/4 при достаточно большом количестве членов ряда.

Каждый член ряда с номером n вычисляется по формуле: 1/(2*n - 1) и умножается на минус один, если n четное (определить, является ли п четным, можно проверкой остатка от деления п на 2). Вычисление заканчивается тогда, когда значение очередного члена ряда становится меньше, чем заданная точность вычисления.

Вид диалогового окна программы во время ее работы приведен на рис. 2.15. Пользователь вводит точность вычисления в поле ввода (Editi). После щелчка на командной кнопке Вычислить (Buttonl) программа вычисляет значение числа л и выводит результат в поле метки (Labeii).

Рис. 2.15. Диалоговое окно программы Вычисление ПИЛистинг 2. 6. Вычисление числа пunit pi_; interfaceusesWindows, Messages, SysUtils, Classes, Graphics,Controls, Forms, Dialogs, StdCtrls;type

Page 24: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

TForm1 = class(TForm)Edit1: TEdit; // точность вычисления Button1: TButton; // кнопка Вычислить Label1: TLabel;Label2: TLabel; // поле вывода результата procedure ButtonlClick(Sender: TObject); private{ Private declarations } public{ Public declarations ) end; varForm1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject); varpi:real; // вычисляемое значение ПИ t:real; // точность вычисления n:integer; // номер члена ряда elem:real; // значение члена ряда beginpi := 0; n := 1; t := StrToFloat(editl.text) ; elem := 1; // чтобы начать цикл while elem >= t do beginelem := 1 / (2*n - 1) ; if n MOD 2=0then pi := pi — elem else pi := pi + elem; n := n + 1; end;pi: = pi * 4; labell.caption:= 'ПИ равно '+ FloatToStr(pi) + #13+ 'Просуммировано '+IntTostr(n)+' членов ряда.'; end;end.2. Задачи1.Вычмслить значение функции у=x2+\x-5\.2. Вычислить стоимость 10 дисков, если стоимость за 1 диск 5 рублей, а при наличие

дисконтной карты скидка 15%.3. Используя инструкцию case, вывести название дня недели в зависимости от его номера..4 Вычислить значение функции у=sin(x), в точках. 5 Определить является ли введенное число простым.

Лекция 9Тема Массивы. Записи.

1. Объявление массива2. Вывод массива3. Ввод массива4. Поиск максимального (мини)

1. Объявление массиваИмя: array [нижний_индекс. .верхний_индекс] of тип где:имя — имя массива;array — зарезервированное слово языка Delphi, обозначающее, что объявляемое имя является

именем массива;

Page 25: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

нижний_индекс и верхний_и«декс — целые константы, определяющие диапазон изменения индекса элементов массива и, неявно, количество элементов (размер) массива;

тип — тип элементов массива. Примеры объявления массивов:temper:array[1..31] of real; коef:array[0. .2] of integer; name:array[1..30] of string[25];Для того чтобы в программе использовать элемент массива, надо указать имя массива и номер

элемента (индекс), заключив индекс в квадратные скобки. В качестве индекса можно использовать константу или выражение целого типа, например:

team [ 1] := 'Зенит';ShowMessage(name[n+1]);temper[i] := StrToFloat(Edit1.text);2 Вывод массиваВ качестве примера на рис. 1 приведено диалоговое окно приложения, которое демонстрирует

инициализацию и процесс вывода значений элементов массива в поле метки. Программа выводит пронумерованный список футбольных команд. Следует обратить внимание, что для того чтобы список команд выглядел действительно как список, свойству Label1.AutoSize нужно присвоить значение False (присвойте свойству Label1.AutoSize значение True и посмотрите, как будет работать программа). Текст программы приведен в листинге 5.1.

Рис.1. Форма и диалоговое окно приложения Вывод массива Листинг 1. Инициализация и вывод массиваimplementation($R *.dfm}constNT = 5;varteam: array[1..NT] of string[10] =('Зенит','Динамо','Ротор','Спартак','СКА'procedure TForml.ButtonlClick(Sender: TObject); varst:string; // список команд

i:integer; // индекс, номер элемента массива begin// формирование списка для отображения в форме for i:=l to NT do st := st + IntToStr(i)+ ' '+ team[i] + #13; // вывод списка Label1.Caption := st; end;3. Ввод массиваОчевидно, что последовательность чисел удобно вводить в строку таблицы, где каждое число

находится в отдельной ячейке. Ниже рассматриваются два варианта организации ввода массива с использованием компонентов StringGrid И Memo.

Использование компонента StringGrid Для ввода массива удобно использовать компонент StringGrid. Значок компонента StringGrid

находится на вкладке Additional

Компонент StringGrid представляет собой таблицу, ячейки которой содержат строки символов. В табл. 1 перечислены некоторые свойства компонента StringGrid.

Таблица 1. Свойства компонента StringGrid Свойство Определяет

Page 26: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

ColCount Количество колонок таблицыRowCount Количество строк таблицыCells Соответствующий таблице двумерный массив. Ячейка

таблицы, находящаяся на пересечении столбца номер col и строки номер row определяется элементом cells [col, row]

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

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

Options . goEditing Признак допустимости редактирования содержимого ячеек таблицы. True — редактирование разрешено, False — запрещено

Options . goTab Разрешает (True) или запрещает (False) использование клавиши <Таb> для перемещения курсора в следующую ячейку таблицы

Options GoAlways- Show Editor

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

DefaultColWidth Ширину колонок таблицыDefaultRowHeight Высоту строк таблицыGridLineWidth Ширину линий, ограничивающих ячейки таблицыLeft Расстояние от левой границы поля таблицы до левой границы

формыTop Расстояние от верхней границы поля таблицы до верхней

границы формыHeight Высоту поля таблицыWidth Ширину поля таблицыFont Шрифт, используемый для отображения содержимого ячеек

таблицыParentFont Признак наследования характеристик шрифта формы

В качестве примера использования компонента stringGrid для ввода массива рассмотрим программу, которая вычисляет среднее арифметическое значение элементов массива. Диалоговое окно программы приведено на рис. 2. Компонент stringGrid используется для ввода массива, компоненты Label1 и Label2 — для вывода пояснительного текста и результата расчета, Buttoni — для запуска процесса расчета.

Добавляется компонент stringGrid в форму точно так же, как и другие компоненты. После добавления компонента к форме нужно выполнить его настройку в соответствии с табл. 2. Значения свойств Height и width следует при помощи мыши установить такими, чтобы размер компонента был равен размеру строки.

Таблица 5.2. Значения свойств компонента StringGrid1 Свойство ЗначениеColCount 5FixedCols 0

Page 27: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

RowCount 1DefaultRowHeight 24Height 24DefaultColWidth 64Width 328Options . goEditing TrueOptions . AlwaysShowEditing TrueOptions .goTabs True

Листинг 2. Ввод и обработка массива целых чиселimplementation{$R *.dfm}procedure TForml.ButtonlClick(Sender: TObject); vara : array[1..5] of integer; // массив summ: integer; // сумма элементов sr: real; // среднее арифметическое i: integer; // индекс begin// ввод массива // считаем, что если ячейка пустая, то соответствующий // ей элемент массива равен нулю for i:= 1 to 5 doif Length(StringGridl.Cells[i-1, 0]) <>0then a[i] := StrToInt(StringGridl.Cells[i-1,0])else a[i] := 0;// обработка массива summ := 0;for i :=1 to 5 dosumm := summ + a[i]; sr := summ / 5;У вывод результата Label2.Caption :='Сумма элементов: ' + IntToStr(summ)+ #13+ 'Среднее арифметическое: ' + FloatToStr(sr); end;end.Использование компонента Memo В некоторых случаях для ввода массива можно использовать компонент Memo. Компонент

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

Таблица .3. Свойства компонента Memo Свойство ОпределяетName Имя компонента. Используется в программе для доступа к свойствам

компонентаText Текст, находящийся в поле Memo. Рассматривается как единое целоеLines Текст, находящийся в поле Memo. Рассматривается как совокупность

строк. Доступ к строке осуществляется по номеруLines .Count Количество строк текста в поле MemoLeft Расстояние от левой границы поля до левой границы формыTop Расстояние от верхней границы поля до верхней границы формыHeight Высоту поляWidth Ширину поляFont Шрифт, используемый для отображения вводимого текстаParentFont Признак наследования свойств шрифта родительской формы

Page 28: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

При использовании компонента Memo для ввода массива значение каждого элемента массива следует вводить в отдельной строке и после ввода каждого элемента массива нажимать клавишу <Enter>.

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

Основной цикл процедуры ввода символьного массива из компонента Memo может выглядеть так:

for i:=l to SIZE doa [ i ]:= Memol.Lines[i];где:SIZE — именованная константа, определяющая размер массива;а — массив; Memol — имя Memo-компонента;Lines — свойство компонента Memo,

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

Листинг 5. Ввод массива строк из компонента Memo implementation($R *.DFM}procedure TForml .ButtonlClick(Sender: TObject);constSIZE=5; // размер массива vara:array[l..SIZE]of string[30]; //массивn: integer; // количество строк, введенных в поле Memo i:integer; // индекс элемента массива st:string; beginn:=Memo1.Lines.Count;if n = 0 then beginShowMessage('Исходные данные не введены!');Exit; // выход из процедуры обработки события end;// в поле Memo есть текст if n > SIZE then beginShowMessage('Количество строк превышает размер массива.'); n:=SIZE; // будем вводить только первые SIZE строк end; for i:=1 to n doa[i]:=Form1.Memol.Lines[i-1]; // строки Memo пронумерованы с нуля // вывод массива в окно сообщения if n > 0 then beginst:='Введенный массив:'+#13;for i: =1 to n dost:=st+IntToStr(i)+' '+ a[i]+f13; ShowMessage(st);end;end; end.Основную работу выполняет процедура TForm1.Button1Click, которая сначала проверяет, есть

ли в поле Memo1 текст. Если текст есть (в этом случае значение свойства Lines.Count больше нуля), то процедура сравнивает количество введенных строк и размер массива. Если это количество превышает размер массива, то программа изменяет значение п, тем самым подготавливает ввод только первых SIZE строк.

Page 29: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Рис. 7. Массив, введенный из Memo-поля  4. Поиск минимального (максимального) элемента массиваСначала делается предположение, что первый элемент массива является минимальным

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

Диалоговое окно приложения поиска минимального элемента массива содержит соответствующим образом настроенный компонент stringGridi, который применяется для ввода элементов массива, два поля меток (Label1 и Labeia), использующиеся для вывода информационного сообщения и результата работы программы, и командную кнопку (Buttonl), при щелчке на которой выполняется поиск минимального элемента массива. В табл. приведены значения свойств компонента stringGridi.

Таблица Значения свойств компонента stringGrid1Свойство ЗначениеColCount 005FixedCols 000RowCount 001DefaultRowHeight 024Height 024DefaultColWidth 064Width 328Options . goEditing TrueOptions . AlwaysShowEditing TrueOptions .goTabs True

Листинг. Поиск минимального элемента массива procedure TForm1.ButtonlClick(Sender: TObject);constSIZE=5;vara:array[l..SIZE]of integer; // массив целых min:integer; // номер минимального элемента массива i:integer; // номер элемента, сравниваемого с минимальным begin// ввод массива for i:=1 to SIZE doa[i]:=StrToInt(StringGridl.Cells[i-1,0]);// поиск минимального элемента min:=1; // пусть первый элемент минимальный for i:=2 to SIZE doif a[i]< a[min]then min:=i;// вывод результата

Page 30: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

label2.caption:='Минимальный элемент массива:'+IntToStr(a[min] +#13+'Номер элемента:'+ IntToStr(min);end;end.Поиск в массиве заданного элемента Поиск осуществляется последовательным сравнением элементов массива с образцом до тех

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

Алгоритм простого перебораЦикл завершается, если в массиве обнаружен элемент, равный образцу (в этом случае

значение переменной found равно true), или если проверены все элементы массива. По завершении цикла по значению переменной found можно определить, успешен поиск или нет.

Щелчок на командной кнопке Поиск (Buttoni) запускает процедуру TForm1.Button1Click (ее текст приведен в листинге 5.7), которая из компонента stringGridi вводит массив, а из поля редактирования Edit2 — число (образец). Затем выполняется проверка, содержит ли массив введенное число. После завершения проверки процедура showMessage выводит сообщение о результате поиска.

Листинг 5.7. Поиск в массиве procedure TForml.ButtonlClick(Sender: TObject);constSIZE=5; vara: array[1..SIZE] of integer; //массив obr: integer; // образец для поиска found: boolean; // TRUE — совпадение образца с элементом // массива i: integer; // индекс элемента массива begin// ввод массива for i:=l to SIZE doa[i] := StrToInt(StringGridl.Cells[i-1,0]);// ввод образца для поиска obr := StrToInt(edit2.text);// поиск found := FALSE; // пусть нужного элемента в массиве нет i:= 1;repeatif a[i] = obrthen found := TRUE else i := i+1;until (i > SIZE) or (found = TRUE);if foundthen ShowMessage('Совпадение с элементом номер '+IntToStr(i)+#13+'Поиск успешен.') else ShowMessage('Совпадений с образцом нет.'); end;end.

Page 31: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Лекция 10Тема Многомерные массивы

1. Описание двумерного массива2. Действия с несколькими массивами.3. Обработка двумерного массива

1 Описание двумерного массиваВ повседневной жизни довольно часто приходится иметь дело с информацией, которая

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

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

В общем виде инструкция объявления двумерного массива выглядит так:Имя: array[ НижняяГраница1..ВерхняяГраница1, НижняяГраница2..ВерхняяГраница2] of Тип где:Имя — имя массива;array — слово языка Delphi, указывающее, что объявляемый элемент данных является

массивом;НижняяГраница1, ВерхняяГраница1, НижпяяГраница2, ВерхняяГраница2 — целые

константы, определяющие диапазон изменения индексов и, следовательно, число элементов массива;

Тип — тип элементов массива.Пример:itog: array [1..12, 1..6] of integerКоличество элементов двумерного массива можно вычислить по формуле:(ВГ1-НГ1+1) х (ВГ2-НГ2+1):где:ВГ1 и ВГ2 — верхняя граница первого и второго индексов; НГ1 и НГ2 — нижняя граница первого и второго индексов. Таким образом, массив itog

состоит из 60 элементов типа integer.Для того чтобы использовать элемент массива, нужно указать имя массива и индексы

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

s := 0;for j := 1 to 12 dos := s + itog[2,j];Следующий фрагмент программы вычисляет сумму элементов массива s:=0;for i := 1 to 6 do // шесть моделей автомобилей for j := 1 to 12 do //12 месяцев s := s + itog[i,j];В приведенном фрагменте программы каждый раз, когда внутренний цикл (цикл по j)

завершается, во внешнем цикле значение i увеличивается на единицу и внутренний цикл выполняется вновь. Таким образом, к текущему значению переменной s последовательно прибавляются значения элементов массива itog: itog[l,l], itog[l,2], ..., itog[l,12], itog[2,l], itog[2,2], ..., itog[2,12] и т. д.2 Действия с несколькими массивамиОрганизовать сложение элементов двух массивов.procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);var n: integer;

Page 32: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

begin n := strtoint(Edit1.Text); StringGrid1.ColCount := n; StringGrid2.ColCount := n; StringGrid3.ColCount := n;end;

procedure TForm1.Button1Click(Sender: TObject);var i: integer; r: extended;begin for i:=0 to StringGrid1.ColCount-1 do begin r := strtofloat(StringGrid1.Cells[i,0]) + strtofloat(StringGrid2.Cells[i,0]); StringGrid3.Cells[i,0] := FloatToStrF(r,ffGeneral,8,4); end; end; end.

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

Таблица 1. Значения свойства компонента StringGrid1 Свойство Значение

Name Tab1ColCount 6RowCount 14FixedCols 0FixedRows 1Options . goEditing TRUEDefaultColWidth 65DefaultRowHeight 14GridLineWidth 1

procedure TForm1.FormActivate(Sender: TObject);

Page 33: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

begin tabl.Cells[0,0]:='Страна'; tabl.Cells[1,0]:='Золотых'; tabl.Cells[2,0]:='Серебряных'; tabl.Cells[3,0]:='Бронзовых'; tabl.Cells[4,0]:='Всего'; tabl.Cells[5,0]:='Баллов'; tabl.Cells[0,1]:='Австралия'; tabl.Cells[0,2]:='Белоруссия'; tabl.Cells[0,3]:='Великобритания'; ……………………… tabl.Cells[0,13]:='Япония';end;procedure TForm1.Button1Click(Sender: TObject);var c,r:integer; // номер колонки и строки таблицы s:integer; // всего медалей у команды p:integer; // очков у команды m:integer; // номер строки с максимальным количеством очков buf:array[0..5] of string; // буфер для обмена строк i:integer; // номер строки используется во время сортировкиbegin for r:=1 to tabl.rowcount do // обработать все строки begin s:=0; // вычисляем общее кол-во медалей for c:=1 to 3 do if tabl.cells[c,r] <> '' then s:=s+StrToInt(tabl.cells[c,r]) else tabl.cells[c,r]:='0'; // вычисляем количество очков p:=7*StrToInt(tabl.cells[1,r])+6*StrToInt(tabl.cells[2,r])+5*StrToInt(tabl.cells[3,r]); // вывод результата tabl.cells[4,r]:=IntToStr(s); // всего медалей tabl.cells[5,r]:=IntToStr(p); // очков end; // сортировка таблицы по убыванию в соответствие с количеством баллов (по содержимому 5-ого столбца), сортировка методом выбора for r:=1 to tabl.rowcount-1 do begin m:=r; // максимальный элемент - в r-ой строке for i:=r to tabl.rowcount-1 do if StrToInt(tabl.cells[5,i])>StrToInt(tabl.cells[5,m]) then m:=i; if r <> m then begin // обменяем r-ую и m-ую строки таблицы for c:=0 to 5 do begin buf[c]:=tabl.Cells[c,r]; tabl.Cells[c,r]:=tabl.Cells[c,m]; tabl.Cells[c,m]:=buf[c]; end; end; end; end; end.

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

Page 34: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

На рис. 2 приведено диалоговое окно программы после завершения процесса обработки массива.

Рис. 2. Окно программы Итоги олимпиады

Лекция 11Тема Программирование алгоритмов с использованием строк.

1. Символы2. Строки

СимволыДля хранения и обработки символов используются переменные типа Ansichar и wideChar. Тип

Ansichar представляет собой набор ANSI-символов, з котором каждый символ кодируется восьмиразрядным двоичным числом (байтом). Тип wideChar представляет собой набор символов в кодировке Unicode, в которой каждый символ кодируется двумя байтами.

Для обеспечения совместимости с предыдущими версиями поддерживается тип Char, эквивалентный AnsiChar.

Значением переменной символьного типа может быть любой отображаемый символ:буква русского или латинского алфавитов;цифра;знак препинания;И специальный символ, например, "новая строка".Переменная символьного типа должна быть объявлена в разделе объявления переменных.

Инструкция объявления символьной переменной в общем виде выглядит так:Имя: char;где:имя — имя переменной символьного типа;char — ключевое слово обозначения символьного типа.Примеры:otv: char; ch: char;Как и любая переменная программы, переменная типа char может получить значение в

результате выполнения инструкции присваивания. Если переменная типа char получает значение в результате выполнения операции присваивания, то справа от знака := должно стоять выражение типа char, например, переменная типа char или символьная константа — символ, заключенный в кавычки.

В результате выполнения инструкций c1 := '*';с2 := c1;

Page 35: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

переменная c1 получает значение присваиванием значения константы, а переменная с2 — присваиванием значения переменной cl (предполагается, что переменные c1 и с2 являются переменными символьного типа).

Переменную типа char можно сравнить с другой переменной типа char или с символьной константой. Сравнение основано на том, что каждому символу поставлено в соответствие число (см. приложение 2), причем символу 'о' соответствует число меньшее, чем символу У, символу 'А' — меньшее, чем 'в', символу V — меньшее, чем а. Таким образом, можно записать:

'0'<'1'<..<'9'<..<'A'<'B'<..<'Z'<'a'<'b'<..<'z'Символам русского алфавита соответствуют числа большие, чем символам латинского

алфавита, при этом справедливо следующее:'А'<'Б'<'В'<..<'Ю'<'Я'<'а'<'б'<'в'<...<'э'<'ю'<'я'В тексте программы вместо символа можно указать его код, поставив перед числом оператор

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

В программах обработки символьной информации часто используют функции chr и Ord. Значением функции chr является символ, код которого указан в качестве параметра. Например, в результате выполнения инструкции c:=chr(32) переменной с будет присвоено значение пробел. Функция ord позволяет определить код символа, который передается ей в качестве параметра. Например, в результате выполнения инструкции k:=ord('*') переменная k будет содержать число 42 — код символа *.

Программа, текст которой приведен в листинге, выводит таблицу кодировки букв русского алфавита. Вид окна программы представлен на рис..

Основную работу выполняет процедура обработки события OnActivate, которая формирует и выводит в поле метки (Label1) таблицу. Событие OnActivate происходит при активизации формы приложения, и поэтому процедура TForm1.FormActivate выполняется автоматически, сразу после появления формы на экране.

Рис. Форма приложения во время работыЛистинг. Таблица символов implementation{$R *.DFM}procedure TForm1.FormActivate(Sender: TObject);varst:string; // таблица формируется как строка символов dec: byte; // код символа i,j:integer; // номер строки и колонки таблицы beginst:='';dec:=192;for i:=0 to 15 do // шестнадцать строк begindec:=i + 192;

Page 36: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

for j:=1 to 4 do // четыре колонки beginst:=st+chr(dec)+'-'+IntToStr(dec)+' '; dec:=dec + 16;end;st:=st + #13; // переход к новой строке экрана end;Label1.caption:=st; end;end.Форма приложения Таблица символов содержит только один компонент -поле метки

(Label1l). Для того чтобы колонки таблицы имели одинаковую ширину, свойству Label1.Font.Name следует присвоить имя шрифта, у которого все символы имеют одинаковую ширину, например, courier New cyr.

Вид окна приложения во время работы приведен на рис.2. СтрокиСтроки могут быть представлены следующими типами: shortstring, Longstring и widestring.

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

Переменной типа shortstring память выделяется статически, т. е. до начала выполнения программы, и количество символов такой строки не может превышать 255. Переменным типа Longstring и widestring память выделяется динамически — во время работы программы, поэтому длина таких строк практически не ограничена.

Помимо перечисленных выше типов можно применять универсальный cтроковый тип String. Тип String эквивалентен типу Shortstring.

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

Имя: String;или Имя: String [длина] где:имя — имя переменной;string — ключевое слово обозначения строкового типа;длина — константа целого типа, которая задает максимально допустимую длину строки.Пример объявления переменных строкового типа:name: string[30];buff: string;Если в объявлении строковой переменной длина строки не указана, то ее длина задается

равной 255 символам, т. е. объявленияstroka: string [255]; stroka: string;эквивалентны.В тексте программы последовательность символов, являющаяся строкой (строковой

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

parol:= 'Большой секрет';илиparol:= '2001';Следует обратить внимание, что инструкция parol:=2001; неверная, т.к. тип константы не

соответствует типу переменной. Во время компиляции этой инструкции будет выведено сообщение: incompatible types: 'Char' and 'Integer' (типы Char и Integer несовместимы).

Используя операции =, <, >, <=, >= и о, переменную типа string можно сравнить с другой переменной типа string или со строковой константой. Строки сравниваются посимвольно, начиная с первого символа. Если все символы сравниваемых строк одинаковые, то такие строки считаются равными. Если в одинаковых позициях строк находятся разные символы, большей считается та

Page 37: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

Таблица . Сравнение строк Строка 1 Строка 2 Результат сравненияИванов Иванов Строки равныВасильев Васильев Строка 1 больше строки 2Алексеев Петров Строка 1 меньше строки 2Иванова Иванов Строка 1 больше строки 2

Кроме операции сравнения, к строковым переменным и константам можно применить операцию сложения, в результате выполнения которой получается новая строка. Например, в результате выполнения инструкций

f irst__name: ='Иван' ;last_name:='Иванов';ful_name:=first_name+last_name;переменная fui_name получит значение 'Иван Иванов'.Операции со строкамиВ языке Delphi есть несколько полезных при работе со строками функций и процедур. Ниже

приведено их краткое описание и примеры использования.Функция length Функция length возвращает длину строки. У этой функции один параметр — выражение

строкового типа. Значением функции length (целое число) является количество символов, из которых состоит строка.

Например, в результате выполнения инструкцийn:=length('Иванов');m:=length(' Невский проспект ');значение переменных n и m будет равно 6 и 20.Процедура delete Процедура delete позволяет удалить часть строки. В общем виде обращение к этой процедуре

выглядит так:delete(Строка, р, п) где:Строка — переменная или константа строкового типа;р — номер символа, с которого начинается удаляемая подстрока;п — длина удаляемой подстроки.Например, в результате выполнения инструкцийp:='Город Санкт-Петербург'; delete(s,7,6);значением переменной s будет строка ' город Петербург'.Функция роs Функция роз позволяет определить положение подстроки в строке. В общем виде обращение

к функции выглядит так:pos (Подстрока,Строка) ; где Подстрока — строковая константа или переменная, которую надо найти в строковой

константе или переменной строка.Например, в результате выполнения инструкциир := pos('Пе','Санкт-Петербург');значение переменной р будет равно 7. Если в строке нет искомой подстроки, то значение

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

пробелы из строки st.while(pos(' ',st) = 1) and(length(st) > 0) do delete (st,1,1);Пробелы удаляет инструкция delete (st, i, i), которая выполняется в цикле до тех пор, пока

первым символом строки является пробел (в этом случае значение роs (' ',st) равно единице).

Page 38: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Необходимость проверки условия length (st) > 0 объясняется возможностью того, что введенная строка состоит только из пробелов.

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

сору выглядит так:сору( Строка, р, п ) где:строка — выражение строкового типа, содержащее строку, фрагмент которой надо получить;р — номер первого символа, с которого начинается выделяемая подстрока;n — длина выделяемой подстроки. Например, в результате выполнения инструкцийst:= 'Инженер Иванов'; fam:=copy(st, 9, 6) ;значением переменной fam будет строка 'Иванов1.

Лекция 12Тема Обработка ошибок

1. Исключительные ситуации2. Ошибки при использовании массивов

1 Исключительные ситуацииНачальная стадия разработки программ неизбежно связана с ошибками. Особенно часты в

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

В Ое1рhi предусмотрен механизм обработки любых ошибок исполнения — логических, математических, ошибок памяти и даже отказов в работе аппаратуры. Ве1рhi воспринимает ошибки как исключительные ситуации. Разработчик имеет возможность создавать собственные типы исключительных ситуаций и обрабатывать их. Обработка ошибок исполнения — это, по существу, оборонительная техника программирования. Важное значение при обсуждении данного вопроса имеет понятие «исключительная ситуация».

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

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

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

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

Ое1рhi-программа обрабатывает исключения с помощью специальных языковых конструкций. В языке определены два типа таких конструкций: Тгу...Ехсерt и Тгу...Fina11у.

Page 39: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

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

Чтобы заставить Ое1рhi-программу использовать механизм управления исключениями, разработчик должен разместить выполняемые команды внутри блока Тгу. Если разработчик хочет предусмотреть безопасное завершение программы при возникновении исключения, он может воспользоваться блоком Тгу..Fina11у, который выполняет операцию Fina11у вне зависимости от того, появилась исключительная ситуация или нет. Это могут быть обычные операции закрытия таблиц, освобождения файловых переменных или выделенной задаче памяти.

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

Синтаксис блока Тгу...Finа11у можно схематически изобразить следующим образом:Операторы, расположенные за словом Тгу, — возможные источники исключений. Команды,

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

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

Операторы, следующие за словом Тгу, представляют собой потенциальный источник исключительных ситуаций. После слова Ехсерt записаны специальные операторы для обработки конкретных видов исключений. Оператор после слова Е1sе — обработчик ошибок по умолчанию.

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

Таблица 1

Обработчикr Причина Сообщение

EOutOf Memory Нехватка памяти Out Of Memory

EFileNotFound Файл не найден File Not Found

EinvalidFileName Неверное имя файла Invalid File Name

ETooManyOpenFiles Много открытых файлов Too Many Open Files

EInvalidInput Ввод не верного числа значений

Invalid Input

EDivZero Деление на ноль Div Zero

EInvalidOp Не верная операция с плавающей точкой

Invalid Op

EInvalidCast Не верное преобразование типов

Invalid Cast

2 Ошибки при использовании массивов

Page 40: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

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

day : array[0..6] of string[ll],то во время компиляции программы инструкцияday [7] := 'Воскресенье';будет помечена как ошибочная.Если для доступа к элементу массива в качестве индекса используется переменная или

выражение, то возможно возникновение ошибки (исключения) времени выполнения программы. Например, если в программе объявлен массив

tab1: array [1..N] of integer;то инструкцияfor i:=0 to N do tab1[i] := 5;формально является верной, и ее компиляция будет успешно выполнена.Однако во время выполнения программы, при попытке присвоить значение

несуществующему нулевому элементу массива tab, на экран будет выведено сообщение об ошибке. Вид окна и текст сообщения зависит от того, откуда запущена программа.

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

Рис. 1. Сообщение об ошибке при обращении к несуществующему элементу массива (программа запущена из Delphi)

Если программа запущена из Windows, то при попытке присвоить значение несуществующему элементу массива на экран будет выведено сообщение Range check error (ошибка контроля диапазона). В заголовке окна будет указано имя приложения, в процессе выполнения которого произошла ошибка (рис. 2).

Рис. 2 Сообщение об ошибке при обращении к несуществующему элементу массива (программа запущена из Windows)

Лекция 13Тема ОСНОВНЫЕ ОТЛИЧИЯ РАЗЛИЧНЫХ ВЕРСИЙ DELPHI

1. Версия12. Версия23. Версия34. Версия45. Версия56. Версия6

Page 41: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

За сравнительно небольшой срок корпорация Borland выпустила 6 основных версий и несколько модификаций Delphi.

1. ВЕРСИЯ 1Первая версия появилась в мае 1995 г., когда еще не существовала Windows 95 (но тем не

менее существовала Windows NT). Это единственная версия, работающая под управлением 16-разрядной Windows 3.1 (3.11). В ней впервые была опробована новая модель объектов, позаимствованная из различных объектно-ориентированных языков, и главным образом, из языка C++. Эта модель оказалась настолько революционной, что существовавшие в то время в поздних версиях Turbo Pascal объекты стали не нужны (их возможности полностью поглотила новая модель), а сама новая модель получила название классов.

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

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

введена внутренняя для функции переменная Result и разрешено игнорировать возвращаемый функцией результат;

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

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

вновь разработанной системы: программирование баз данных. С этой целью первая и все последующие версии Delphi снабжаются специальным инструментом доступа к данным -BDE (Borland Database Engine - машина баз данных корпорации Borland), а также сервером баз данных InterBase (этот сервер производится филиалом Borland - компанией InterBase Software Corporation) и соответствующими средствами конфигурации сервера, его контроля и связи с ним.

Палитра компонентов первой версии состоит из 9 страниц и содержит 79 компонентов. В качестве дополнительных утилит поставлялись система генерации отчетов ReportSmith v.2.5 и входящая в ее состав автономно запускаемая утилита ReportSmith Run Time Viewer, утилита доступа к данным DatabaseDesktop v.5.1 и утилита конфигурации BDE - Database Engine Configuration v.2.5. Кроме того, утилиты WinSighte и WinSpecter предназначались для упрощения отладки разрабатываемых программ в среде 16-разрядных ОС Windows 3-х.

1.2. ВЕРСИЯ 2Вторая и все последующие версии Delphi предназначены для работы под управлением 32-

разрядных ОС Windows 95/98/2000/NT (Windows 32). В нее были внесены многочисленные изменения, связанные с переходом на качественно новую ОС, в том числе:

введена поддержка 16-битных (“широких”) символов и составленных из них строк; введен новый формат строк “обычных” 8-битных символов произвольной длины; введены новые типы данных - variant и currency; введен механизм фильтрации в табличные наборы данных TTable. Начиная с версии 2, Delphi поставляется в нескольких комплектациях, отличающихся

набором инструментальных средств и компонентов. Это соответствует более гибкой ценовой политике: минимальная по возможностям комплектация стоит 200-300 долларов, в то время как цена наиболее мощной комплектации может достигать нескольких тысяч. Во 2-й версии таких комплектов было 3: Desktop, Professional и Client/Server Suite. Далее описываются возможности наиболее мощной комплектации Client/Server Suite.

Среда разработки обогатилась Репозиторием Объектов и множеством полезных программ-экспертов (Wizards).

К утилитам добавлена весьма эффективная программа SQL Explorer v.1.02, существенно облегчающая операции с базами данных, и программа переноса данных Data Migration Expert, упрощающая переход к архитектуре клиент-сервер. Утилиты ReportSmith и DatabaseDesktop представлены более совершенными версиями 3.0 и 7.1 соответственно. Утилита Database Engine Configuration предыдущей версии переименована в BDE Configuration v.3.0. Введена утилита Image

Page 42: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

На 12 страницах галереи компонентов расположены 114 стандартных компонентов. В том числе на странице QReport размещены удобные компоненты для создания отчетов по хранящимся в базах данным. Эти компоненты оказались значительно эффективнее специальной утилиты ReportSmith, в связи с чем эта утилита не входит в поставку версии 3 и выше.

1.3. ВЕРСИЯ 3Мне довелось довольно долго работать с вышедшей в июне 1997 г. версией 3, и у меня

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

использования компонентов; улучшенные свойства редактора кода: построение фрагментов кода по образцу; оперативная

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

поддержка шаблонов компонентов; поддержка технологий СОМ, ActiveX, OLEnterprice и (частично) CORBA. Третья версия поставлялась в 4 комплектациях: Standard, Professional, Client/Server Suite и

Enterprise.Состав утилит комплектации Client/Server Suite не изменился по сравнению с предыдущей

версией, но изменились названия некоторых из них: BDE Configuration в этой и последующих версиях называется BDE Administrator, a Data Migration Expert - Data Migration Wizard. Ha 13 страницах галереи компонентов размещены 148 стандартных компонента. В модификации 3.5 введены дополнительные компоненты для реализации многозвенных баз данных.

1.4. ВЕРСИЯ 4Появившаяся в июле 1998 г. 4-я версия Delphi быстро завоевала широкую популярность как

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

К основным нововведениям этой версии относятся:изменения в языке: динамические массивы, перегружаемые методы, умалчиваемые

параметры подпрограмм, новые типы int64, Real48 и Real как аналог Double; изменения в кодовом редакторе: автоматическое завершение кодовых заголовков свойств и

методов; свойства браузера для поиска исходного кода; простой переход от заголовка метода к его реализации и обратно;

технология “причаливания” инструментальных панелей Drag&Dock; механизм “действий” Action для унификации внешнего вида и поведения одинаковых по

функциональному назначению интерфейсных элементов; улучшенная поддержка многозвенной архитектуры БД и распределенных вычислений. На 14 страницах палитры компонентов размещены 182 стандартных компонента. В поставке

Client/Server Suite утилита Data Migration Wizard получила название Data Pump.1.5. ВЕРСИЯ 5В июле 1999 г. вышла пятая по счету версия Delphi, основная особенность которой - попытка

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

Для этого, во-первых, в Delphi 5 включена поддержка технологии ADO (ActiveX Data Objects - объекты данных, построенные как объекты ActiveX), которая усиленно развивается корпорацией Microsoft.

Во-вторых, сотрудники Borland и его подразделения InterBase Software Corporation разработали серию компонентов облегченного доступа к данным, хранящимся в таблицах сервера InterBase v.5.5 и выше (страница InterBase палитры компонентов). Эти компоненты также не требуют BDE и, таким образом, создают “облегченное” клиентское место.

Page 43: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Менее значительные изменения, внесенные в версию 5:включен эксперт создания и настройки произвольных модулей данных с расширенными

возможностями представления взаимосвязи данных; улучшена технология MIDAS: для более гибкой работы с Microsoft Transaction Server введен

повторно-входимый (stateless) брокер данных; упрощен процесс разработки интранет-приложений за счет компонентов новой страницы InternetExpress;

значительные изменения внесены в интегрированную среду разработчика ИСР; в том числе: для улучшения координации коллективной работы над одним проектом введен новый

инструмент - список To-Do; программист теперь может при желании использовать несколько вариантов настройки

основных окон Delphi - например, для режима кодирования на экране могут не присутствовать отладочные окна, которые, наоборот, могут понадобиться в отладочном режиме; нужный вариант настройки легко выбирается новыми интерфейсными элементами в главном окне Delphi;

введены фильтрующие свойства в окне Инспектора Объектов, упрощающие выбор нужного свойства;

опции Инспектора Объектов теперь могут снабжаться небольшими пиктограммами, облегчающими правильный выбор нужной опции (например, радом с названием каждого цвета показывается небольшой прямоугольник, заполненный этим цветом, рядом с названием курсора - его вид и т. п.); существенно усилены возможности встроенного отладчика: точки отладочного останова можно группировать и сделать доступной или недоступной сразу группу точек; с каждой точкой останова можно связать одно или несколько действий, которые будут выполняться при достижении этой точки; с помощью команды Run | Attach to process можно отлаживать процесс, запущенный в другом экземпляре ИСР (эта возможность существенно упрощает отладку многозвенных приложений); с помощью выбора Run | Run Until Return в главном меню можно продолжить пошаговую отладку после завершения текущей подпрограммы и т. д.;

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

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

внесены изменения в кодовый редактор, позволяющий настраивать используемые в нем “горячие” клавиши;

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

наиболее мощной комплектации Enterprise на 20 страницах расположены 218 стандартных компонентов). Версия поставляется в 3 комплектациях: Standard, Professional и Enterprise. Состав утилит, входящих в комплектацию Enterprise, полностью соответствует утилитам комплектации Client/Server Suite предыдущей версии.

1.6. ВЕРСИЯ 6Версия 6 вышла в мае 2001 г., т. е. почти через 2 года после выхода 5-й версии. Эту задержку

можно объяснить тем, что параллельно с работой над новой версией Delphi шла разработка варианта Delphi для ОС Linux - эта система программирования вышла в феврале 2001 г. и получила название Kylix. В результате 6-я версия Delphi имеет уникальную особенность: она способна создавать так называемые'межплатформенные приложения, т. е. программы, которые одинаково успешно могут работать как под управлением Windows 32, так и под Linux.

Напомню читателю предысторию, связанную с этой ОС. Еще в самом начале 70-х годов в Bell Laboratories была создана переносимая система UNIX. Переносимость системы, т. е. ее способность миграции на различные аппаратные платформы, обеспечивалась тем, что практически вся она была написана на специально для этой цели разработанном языке С. Более того, почти весь компилятор этого языка был также написан на С! В результате для переноса ОС на новую аппаратную среду нужно было закодировать лишь сравнительно небольшой машинно-зависимый участок С, после чего транслировался исходный код компилятора, а затем и системы в целом. Таким образом, ОС UNIX принципиально существовала в исходных текстах, доступных широкому кругу программистов. Это обстоятельство использовали многие фирмы, создав собственные версии UNIX-подобных ОС, но уже не предоставляя пользователям исходные коды (например, ОС Solaris фирмы Sun).

Page 44: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

До появления Kylix единственными средствами программирования для Linux были системы на языках C/C++, Basic, Fortran. Kylix, а следом за ней - Delphi 6, открывают богатейшие возможности VCL (вариант которой под Linux/Windows называется CLX - Borland Component Library for Cross-Platform Application) для разработки прикладных программ для Linux, что позволяет говорить об этой ОС как о потенциальном и весьма опасном конкуренте Windows.

Две другие особенности Delphi 6 также достойны особого упоминания: в ней сделаны дальнейшие шаги для поддержки Web-программирования (архитектура websnap) и разработаны драйверы и компоненты для максимально быстрой связи клиентских мест с некоторыми популярными промышленными серверами баз данных без BDE (компоненты страницы dbExpress).

Архитектура WebSnap продолжает и развивает ранее существовавшую в версиях 4 и 5 технологию Web Broker для создания Web-приложений. В ее основе лежит использование протокола SOAP (Simple Object Access Protocol - простой протокол доступа к объекту). В сочетании с бесплатно распространяемым Web-сервером Apache эта технология позволяет отказаться от дорогостоящих средств Windows NT Server и Internet Information Server в пользу связки Linux + Apache.

Таким образом, основной идей Delphi 6 является обеспечение перехода от дорогих патентованных решений корпорации Microsoft к бесплатным (или почти бесплатным) решениям на базе Linux.

На 27 страницах палитры компонентов размещены 387 компонентов (в режиме CLX - 211 компонентов на 21 странице).

Лекция 14Тема Другие языки объектно-ориентированного программирования

1. Си́мула-672. Java3. А́да4. Visual DataFlex 1. Си́мула-67 (Simula 67) — первый объектно-ориентированный язык программирования.

Разработан в конце 60-х сотрудниками Норвежского Вычислительного Центра (Осло) Кристеном Нюгором и Уле-Йоханом Далем для моделирования сложных систем.

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

Тем не менее этот язык активно использовался в образовательном процессе высших учебных заведений, особенно в Скандинавии. В современной терминологии Simula 67 можно охарактеризовать как объектное расширение Algol 60. Более всего в Simula 67 поражает сходство с современными языками: пожалуй, единственными существенными лакунами по сравнению с Java являются отсутствие интерфейсов и невозможность для объекта иметь более одного конструктора.

2. Java — объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems с 1991 года и официально выпущенный 23 мая 1995 года. Многие люди, говоря на русском, называют язык «Ява» по аналогии с географическим названием.

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

Изначально новый язык программирования назывался Oak (James Gosling) и разрабатывался для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания приложений и серверного программного обеспечения.

Программы на Java могут быть транслированы в байт-код, выполняемый на виртуальной java-машине (JVM) — программе, обрабатывающей байтовый код и передающей инструкции оборудованию, как интерпретатор, но с тем отличием, что байтовый код в отличие от текста обрабатывается значительно быстрее.

Page 45: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Достоинство подобного способа выполнения программ — в полной независимости байт-кода от ОС и оборудования, что позволяет выполнять Java приложения на любом устройстве, которое поддерживает виртуальную машину. Другой важной особенностью технологии Java является гибкая система безопасности, благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание. Это позволяет пользователям загружать программы, написанные на Java, на их компьютеры (или другие устройства, например, мобильные телефоны) из неизвестных источников, при этом не опасаясь заражения вирусами, пропажи ценной информации, и т. п.

Часто к недостаткам этого подхода относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований: применение технологии JIT (Just-In-Time compilation), позволяющей переводить байт-код в машинный код во время исполнения программы с возможностью сохранения версий класса в машинном коде, широкое использование native-кода в стандартных библиотеках, а также аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

Внутри Java существуют три основных семейства технологий:J2EE или Java EE (начиная с v1.5) — Java Enterprise Editon, для создания программного

обеспечения уровня предприятия; J2SE или Java SE (начиная с v1.5) — Java Standard Editon, для создания пользовательских

приложений, в первую очередь — для настольных систем; J2ME, Java ME или Java Micro Edition, для использования в устройствах, ограниченных по

вычислительной мощности, в том числе мобильных телефонах, PDA, встроенных системах Самыми популярными считаются серверные технологии семейства J2EE. Здесь Java

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

безопасности, улучшение поддержки XML и скриптового языка Mozilla Rhino, улучшена интеграция с рабочим столом, добавлены некоторые новые возможности в создании графических интерфейсов.

Прежняя версия JVM от Microsoft (аналог SUN JVM v.1.1.3) во многом отступает от стандартов языка, предложенных Sun Microsystems, с целью проприетарной поддержки платформы Windows. Впоследствии это явилось поводом для судебных исков со стороны Sun Microsystems к Microsoft. Суд принял сторону компании Sun Microsystems. В настоящее время между двумя компаниями достигнуты договорённости вплоть до снятия взаимных судебных претензий и произведено взаимное кросс-лицензирование технологий. По версии Microsoft будет поддерживаться спецификация MS-J# соответствующая спецификации SUN-JVM J2SE.

Следующие успешные проекты реализованы с привлечением Java (J2EE) технологий: Amazon, eBay, Flickr, Google (Gmail), Yandex, LinkedIn.

Следующие компании в основном фокусируются на Java (J2EE) технологиях, а не на .NET, хотя имеют дело также и с последними: SAP, IBM, Oracle.

3. А́да (Ada) — язык программирования, созданный в 1979—1980 годах в результате проекта, предпринятого Министерством обороны США с целью разработать единый язык программирования для так называемых встроенных систем (то есть систем управления автоматизированными комплексами, работающими в реальном времени). Имелись в виду, прежде всего, бортовые системы управления военными объектами (кораблями, самолётами, танками, ракетами, снарядами и т. п.). Перед разработчиками не стояло задачи создать универсальный язык, поэтому решения, принятые авторами Ады, нужно воспринимать в контексте особенностей выбранной предметной области.

Особенности языкаАда — это структурный, модульный, объектно-ориентированный язык программирования,

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

Page 46: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

логичным. Ада — язык со строгой типизацией, в нём исключена работа с объектами, не имеющими типов, а автоматические преобразования типов сведены к абсолютному минимуму.

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

включает две разные директивы: одну для подключения другого модуля (with), другую — для импорта его описаний (use).

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

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

Развитая система типов, как встроенных, так и порождаемых программистом. Есть множество способов создания новых типов, язык поддерживает два разных понятия: «подтип» и «производный тип». Переменные типа и подтипа совместимы, переменные типа и его производного типа — нет.

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

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

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

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

Для удовлетворения требованиям надёжности язык построен таким образом, чтобы как можно большее количество ошибок обнаруживалось на этапе компиляции. Кроме того, одним из требований при разработке языка была максимально лёгкая читаемость текстов программ, даже в ущерб лёгкости написания. Результатом такого подхода стал несколько «тяжеловесный» синтаксис и множество ограничений, отсутствующих в наиболее распространённых промышленных языках (С и C++) и часто воспринимаемых профессиональными программистами как избыточные, например, та же строгая типизация. Это привело к формированию представления об Аде как о сложном, малопонятном и неудобном в использовании языке.

ИсторияРазработка языка была проведена в рамках международного конкурса, организованного и

профинансированного министерством обороны США. Целью разработки было получение языка программирования, который мог бы стать единым для разработки проектов по заказам военного ведомства, главным образом, для разработки встроенных систем военного назначения и для больших военных компьютеров (на базе процессора iAPX 432 от Intel). Работа началась в 1975 году, с формированию набора требований к языку, который бы в полной мере удовлетворил разработчиков систем указанного типа. Первоначальный список требований, выпущенный под кодовым наименованием «Соломенный», был представлен на рецензию в ряд организаций и фирм, в течение двух лет последовательно уточнялся, в конечном счёте превратившись в итоговый документ под названием «Стальной».

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

Page 47: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

1977 году, разработчикам было предложено базироваться на одном из трёх языков: Паскаль, Алгол-68 или PL/1.

Из представленных на конкурс 15 проектов было отобрано 4 (все основаны на Паскале). Эти проекты были отправлены на дальнейшую доработку. На следующем этапе из 4 проектов отобрали два, из которых, после очередной доработки, был выбран один. Этот язык получил наименование «Ада» — разработавшая его группа под руководством француза Жана Ишбиа дала языку название в честь Огасты Ады Кинг Лавлейс (дочери поэта Дж. Байрона), которая считается первым программистом в мире за разработку программ для вычислительной машины Бэббиджа.

В 1983 году язык был официально стандартизован ANSI. Стандарт языка ANSI/MIL-STD-1815-A-1983 был утверждён 17 февраля 1983 года. МО США сделало наименование «Ada» зарегистрированной торговой маркой, запретив выпускать трансляторы языка, не прошедшие официальную процедуру тестирования на соответствие стандартам. Процедура состояла в прогоне через тестируемый компилятор большого количества (более 1000) тестовых программ (так называемый комплект ACVC), для каждой из которых был однозначно определён результат тестирования: либо удачная компиляция, либо выдача вполне конкретного сообщения об ошибке. Тестирование проводилось по принципу «всё или ничего» — при ошибке в обработке хотя бы одного тестового примера компилятор считался не прошедшим тест, причём тестирование было действительно только на той аппаратной и программной платформе, на которой оно проводилось. Таким образом была в зародыше подавлена возможность образования «версий» или «диалектов» языка Ада.

В 1987 году язык Ада был официально стандартизован ISO. С этого момента МО США предоставило язык в публичное распоряжение.

К 1990 году в мире существовало уже около 200 компиляторов, соответствовавших стандарту языка Ада.

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

В марте 2007 года опубликованы изменения в стандарте Ады. Они коснулись, в основном, возможностей объектно-ориентированного программирования: введены интерфейсы, принят обычный для большинства гибридных языков синтаксис вызова метода, внесён ещё ряд дополнений.

4. Visual DataFlex — старейший высокоуровневый язык программирования, разрабатываемый компанией Data Access Corporation и предназначенный для быстрого создания (RAD) приложений баз данных, в архитектуре клиент-сервер. Visual DataFlex используется для построения высоко надежного корпоративного программного обеспечения, коммерческих продуктов в среде Microsoft Windows, Web и Web-сервисов. Установка Visual DataFlex включает инструменты визуального проектирования, богатую библиотеку классов, компилятор и отладчик, встроенную базу данных, драйвера для доступа к наиболее популярным СУБД, а так же, производительный и масштабируемый сервер Web-приложений (Web Application Server).

Visual DataFlex — это современный, объектно-ориентированный язык программирования 4-го поколения с собственной средой визуального проектирования.

Краткая историяПервая версия DataFlex (прародителя Visual DataFlex) появилась в конце 1970-х годов и

являлась одним из первых тиражных процедурных языков программирования и СУБД. В середине 80-х годов XX-го века была выпущена одна из самых совершенных на тот момент версий системы — DataFlex 2.3b, которая получила очень широкое распространие и популярность, поднявшая компанию Data Access в первую сотню рейтинга ИТ компаний.

В 1991 году вышла первая объектно-ориентированная версия языка — DataFlex 3.0. универсальность и удобство использования существенно расширили области применения системы.

Первая версия для Microsoft Windows была выпущена в середине 1990-х годов (DataFlex for Windows 3.51), однако не получила широкого распространения вплоть до выхода первой полнофункциональной версии Visual DataFlex 4. С этого момента Visual DataFlex стал стандартом для большого числа компаний-разработчиков программного обечпечения.

Программы, созданные на Visual DataFlex используются более чем на 450 тысячами предприятий и организаций, работающих в области здравоохранения, транспорта, промышленного

Page 48: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

Отличительные особенностиБыстрая, простая разработка программ в визуальном режиме Встроенный сервер Web-приложений Поддержка Интернет-приложений в среде Windows Возможность приложениям Windows использовать Интернет Создание Web-сервисов и архитектуры на основе сервисов Все элементы управления поддерживают работу с базой данных на уровне ядра языка Простая интеграция компонентов COM и ActiveX Высокий уровень поддержки целостности баз данных Многопользовательский режим без написания дополнительного кода Многократное использование компонентов программ

II СЕМЕСТР

Лекция 15Тема Графические возможности

1. Карандаш2. Кисть3. Вывод текста

1 Карандаш Delphi позволяет программисту разрабатывать программы, которые могут выводить графику:

схемы, чертежи, иллюстрации.Программа выводит графику на поверхность объекта (формы или компонента Image).

Поверхности объекта соответствует свойство canvas. Для того чтобы вывести на поверхность объекта графический элемент (прямую линию, окружность, прямоугольник и т. д.), необходимо применить к свойству canvas этого объекта соответствующий метод. Например, инструкция Form1.Canvas.Rectangle (10,10,100,100) вычерчивает в окне программы прямоугольник.

Карандашу и кисти, используемым для вывода графики на холсте, соответствуют свойства Реn (карандаш) и Brush (кисть)

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

Таблица 1. Свойства объекта треп (карандаш)Свойство ОпределяетColor Цвет линииWidth Толщину линииStyle Вид линииMode Режим отображения

Свойство Color задает цвет линии, вычерчиваемой карандашом. В табл. 2 перечислены именованные константы (тип TCoior), которые можно использовать в качестве значения свойства color.

Таблица 2. Значение свойства Color определяет цвет линии

Константа Цвет Константа ЦветclBlack Черный clSilver СеребристыйclMaroon Каштановый clRed КрасныйclGreen Зеленый clLime Салатный

Page 49: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

clOlive Оливковый clBlue СинийclNavy Темно-синий clFuchsia Ярко-розовыйclPurple Розовый clAqua БирюзовыйclTeal Зелено-

голубойclWhite Белый

clGray Серый

Свойство width задает толщину линии (в пикселах). Например, инструкция Canvas. Pen. width: =2 устанавливает толщину линии в 2 пиксела.

Свойство style определяет вид (стиль) линии, которая может быть непрерывной или прерывистой, состоящей из штрихов различной длины. В табл. 3 перечислены именованные константы, позволяющие задать стиль линии. Толщина пунктирной линии не может быть больше 1. Если значение свойства Pen.width больше единицы, то пунктирная линия будет выведена как сплошная.

Таблица 3. Значение свойства Реn. туре определяет вид линииКонстанта Вид линииpsSolid Сплошная линияpsDash Пунктирная линия, длинные штрихиpsDot Пунктирная линия, короткие штрихиpsDashDot Пунктирная линия, чередование

длинного и короткого штриховpsDashDotDot Пунктирная линия, чередование

одного длинного и двух коротких штриховpsClear Линия не отображается

(используется, если не надо изображать границу области, например, прямоугольника)

Свойство Mode определяет, как будет формироваться цвет точек линии в зависимости от цвета точек холста, через которые эта линия прочерчивается. По умолчанию вся линия вычерчивается цветом, определяемым значением свойства Pen.Color.

2 КистьКисть (canvas.Brush) используется методами, обеспечивающими вычерчивание замкнутых

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

Таблица 4. Свойства объекта TBrush (кисть)Свойство ОпределяетColor Цвет закрашивания замкнутой

области Style Стиль (тип) заполнения области

Область внутри контура может быть закрашена или заштрихована. В первом случае область полностью перекрывает фон, а во втором — сквозь незаштрихованные участки области будет виден фон.

В качестве значения свойства Color можно использовать любую из констант типа TColor (см. список констант для свойства Pen.color в табл. 10.2).

Константы, позволяющие задать стиль заполнения области, приведены в табл. 5 Таблица 5 Значения свойства Brush, style определяют тип закрашиванияКонстанта Тип заполнения (заливки)

области

Page 50: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

bsSolid Сплошная заливкаbsClear Область не закрашивается

bsHorizontal Горизонтальная штриховка

bsVertical Вертикальная штриховка

bsFDiagonal Диагональная штриховка с наклоном линий вперед

bsBDiagonal Диагональная штриховка с наклоном линий назад

bsCross Горизонтально-вертикальная штриховка, в клетку

bsDiagCross Диагональная штриховка, в клетку

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

Рис.1. Окно программы Стили заполнения областейЛистинг . Стили заполнения областей

implementation{$R *.DFM}// перерисовка формыprocedure TForm1.FormPaint(Sender: TObject);constbsName: array[1..8] of string =('bsSolid','bsClear','bsHorizontal', 'bsVertical','bsFDiagonal','bsBDiagonal', 'bsCross','bsDiagCross');varx,y: integer; // координаты левого верхнего угла прямоугольникаw,h: integer; // ширина и высота прямоугольникаbs: TBrushStyle;// стиль заполнения областиk: integer; // номер стиля заполнения

Page 51: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

i,j: integer; beginw:=40; h:=40; // размер области(прямоугольника)у:=20;for i:=l to 2 dobeginх:=10;for j:=1 to 4 dobegink:=j+(i-1)*4; // номер стиля заполненияcase k of1: bs = bsSolid;2: bs = bsClear;3: bs = bsHorizontal;4: bs = bsVertical;5: bs = bsFDiagonal;6: bs = bsBDiagonal;7: bs = bsCross;8: bs = bsDiagCross; end;// вывод прямоугольникаCanvas.Brush.Color := clGreen; // цвет закрашивания — зеленый Canvas.Brush.Style := bs; // стиль закрашивания Canvas . Rectangle (x, y, x+w, y-t-h) ;// вывод названия стиляCanvas.Brush.Style := bsClear;Canvas.TextOut(x, y-15, bsName[k]); // вывод названия стиляx := x+w+30; end;у := y+h+30; end;end;end.

3 Вывод текстаДля вывода текста на поверхность графического объекта используется метод TextOut.

Инструкция вызова метода TextOut в общем виде выглядит следующим образом:Объект.Canvas.TextOut(x, у, Текст)где:объект — имя объекта, на поверхность которого выводится текст;х, у — координаты точки графической поверхности, от которой выполняется вывод текста

(рис. 2);Текст — переменная или константа символьного типа, значение которой определяет

выводимый методом текст.

Page 52: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Рис. 2. Координаты области вывода текстаШрифт, который используется для вывода текста, определяется значением свойства Font

соответствующего объекта canvas. Свойство Font представляет собой объект типа TFont..

Внимание!Область вывода текста закрашивается текущим цветом кисти. Поэтому перед выводом текста

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

Следующий фрагмент программы демонстрирует использование функции Textout для вывода текста на поверхность формы:

with Form1.Canvas do begin// установить характеристики шрифта Font.Name := 'Tahoma';Font.Size := 20;Font.Style := [fsltalic, fsBold] ;Brush.Style := bsClear; // область вывода текста не закраши-TextOut(0, 10, 'Borland Delphi 7');end;После вывода текста методом Textout указатель вывода (карандаш) перемещается в правый

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

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

Лекция16 Тема Методы вычерчивания графических элементов

1. Линия, точка, окружность, эллипс, дуга2. Прямоугольник3. Вывод иллюстраций4. Мультипликация

1 ЛинияВычерчивание прямой линии осуществляет метод LinеТо, инструкция вызова которого в

общем виде выглядит следующим образом:Компонент.Canvas.LineTo(x,у) Точка

Page 53: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

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

Form1.Canvas.Pixels[10,10]:=clRedокрашивает точку поверхности формы в красный цвет.

Окружность и эллипсМетод Ellipse вычерчивает эллипс или окружность, в зависимости от значений параметров.

Инструкция вызова метода в общем виде выглядит следующим образом:Объект.Canvas.Ellipse(x1,y1, х2,у2]где:объект — имя объекта (компонента), на поверхности которого выполняется вычерчивание;x1, y1, х2, у2 — координаты прямоугольника, внутри которого вычерчивается эллипс или,

если прямоугольник является квадратом, окружность (рис. 1).

Рис. 1. Значения параметров метода Ellipse определяют вид геометрической фигурыЦвет, толщина и стиль линии эллипса определяются значениями свойства Реп, а цвет и стиль

заливки области внутри эллипса — значениями свойства Brush поверхности (canvas), на которую выполняется вывод.

 ДугаВычерчивание дуги выполняет метод Arc, инструкция вызова которого в общем виде

выглядит следующим образом:Объект.Canvas.Arc(x1,y1,х2,у2,х3,у3,х4,у4)где:x1, y1, х2, у2 — параметры, определяющие эллипс (окружность), частью которого является

вычерчиваемая дуга;х3, у3 — параметры, определяющие начальную точку дуги; П х4, у4 — параметры,

определяющие конечную точку дуги.Начальная (конечная) точка — это точка пересечения границы эллипса и прямой,

проведенной из центра эллипса в точку с координатами х3 и у3 (х4, у4). Дуга вычерчивается против часовой стрелки от начальной точки к конечной (рис. 2).

Page 54: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Рис. 2 Значения параметров метода Arc определяют дугу как часть эллипса (окружности) 2 ПрямоугольникПрямоугольник вычерчивается методом Rectangle, инструкция вызова которого в общем виде

выглядит следующим образом:Объект.Canvas.Rectangle(x1, y1,x2, y2)где:объект — имя объекта (компонента), на поверхности которого выполняется вычерчивание;x1, y1 и х2, у2 — координаты левого верхнего и правого нижнего углов прямоугольника.Метод RoundRec тоже вычерчивает прямоугольник, но со скругленными углами. Инструкция

вызова метода RoundRec выглядит так:Объект.Canvas.RoundRec(x1,y1,х2, у2, х3, у3)где:x1, y1, х2, у2 -- параметры, определяющие положение углов прямоугольника, в который

вписывается прямоугольник со скругленными углами;х3 и у3 — размер эллипса, одна четверть которого используется для вычерчивания

скругленного угла (рис. 3).

Рис. 3. Метод RoundRec вычерчивает прямоугольник со скругленными углами

Вид линии контура (цвет, ширина и стиль) определяется значениями свойства Реп, а цвет и стиль заливки области внутри прямоугольника — значениями свойства Brush поверхности (canvas), на которой прямоугольник вычерчивается.

Есть еще два метода, которые вычерчивают прямоугольник, используя в качестве инструмента только кисть (Brush). Метод FillRect вычерчивает закрашенный прямоугольник, а метод FrameRect — только контур. У каждого из этих методов лишь один параметр — структура типа TRect. Поля структуры TRect содержат координаты прямоугольной области, они могут быть заполнены при помощи функции Rect.

Page 55: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

procedure TForm1.Button1Click(Sender: TObject); varr1, r2: TRect; // координаты углов прямоугольниковbegin// заполнение полей структуры// зададим координаты углов прямоугольниковr1 := Rect(20,20,60,40);r2 := Rect(10,10,40,50);with fоrm1.Canvas do beginBrush.Color := clRed;FillRect(r1); // закрашенный прямоугольникBrush.Color := clGreen;FrameRect(r2}; // только граница прямоугольника end; end; 3 Вывод иллюстрацийНаиболее просто вывести иллюстрацию, которая находится в файле с расширением bmp, jpg

или ico, можно при помощи компонента image, значок которого находится на вкладке Additional палитры (рис. 4).

Рис. 4 Значок компонента Image

Таблица 1. Свойства компонента imageСвойствоPicture Width, Height

AutoSize

Strech

Visible

Иллюстрацию, которая отображается в поле компонента

Размер компонента. Если размер компонента меньше размера иллюстрации, и значение свойств AutoSize и strech равно False, то отображается часть иллюстрации

Признак автоматического изменения размера компонента в соответствии с реальным размером иллюстрации

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

Page 56: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

Во время разработки формы иллюстрация задается установкой значения свойства picture путем выбора файла иллюстрации в стандартном диалоговом окне, которое появляется в результате щелчка на командной кнопке Load окна Picture Editor Чтобы запустить Image Editor, нужно в окне Object Inspector выбрать свойство Picture и щелкнуть на кнопке с тремя точками.

Если размер иллюстрации больше размера компонента, то свойству strech нужно присвоить значение True и установить значения свойств width и Height пропорционально реальным размерам иллюстрации.

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

Form1.Image1.Picture.LoadFromFile('e:\temp\bart.bmp')загружает иллюстрацию из файла bart.bmp и выводит ее в поле вывода иллюстрации (imagel).Метод LoadFromFile позволяет отображать иллюстрации различных графических форматов:

BMP, WMF, JPEG (файлы с расширением jpg). 4 МультипликацияПод мультипликацией обычно понимается движущийся и меняющийся рисунок. В

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

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

Следующая простая программа, текст которой приведен в листинге, а вид формы — на рис. 5, демонстрирует движение окружности от левой к правой границе окна программы.

Рис. 5. Форма программы Движущаяся окружностьЛистинг. Движущаяся окружностьimplementation{$R *.DFM}varForm1: TForml;x,y: byte; // координаты центра окружностиdx: byte; // приращение координаты x при движении окружности// стирает и рисует окружность на новом местеprocedure Ris;begin// стереть окружностьform1.Canvas.Pen.Color:=form1.Color;form1.Canvas.Ellipse(x,y,x+10,y+10);x:=x+dx;// нарисовать окружность на новом местеform1.Canvas.Pen.Color:=clBlack;form1.Canvas.Ellipse(x,y, x+10, y+10) ;

Page 57: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

end;// сигнал от таймераprocedure TForm1.Timer1Timer(Sender: TObject);begin Ris; end;procedure TForm1.FormActivate(Sender: TObject);beginx:=0;y:=10;dx:=5;timer1.Interval:=50; // период возникновения события OnTimer —0.5 секform1.canvas.brush.color:=forml.color; end;end.

Основную работу выполняет процедура Ris, которая стирает окружность и выводит ее на новом месте. Стирание окружности выполняется путем перерисовки окружности поверх нарисованной, но цветом фона.Для обеспечения периодического вызова процедуры Ris в форму программы добавлен невизуальный компонент Timer (таймер), значок которого находится на вкладке System палитры компонентов (рис. 6). Свойства компонента Timer, перечислены в табл. 2

Рис. 6. Значок компонента TimerТаблица 2 Свойства компонента TimerСвойство ОпределяетName Interval 

Enabled

Имя компонента. Используется для доступа к компоненту Период генерации события OnTimer. Задается в миллисекундахРазрешение работы. Разрешает (значение True) или запрещает (значение False) генерацию события OnTimer

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

Компонент Timer генерирует событие OnTimer. Период возникновения события OnTimer измеряется в миллисекундах и определяется значением свойства Interval. Следует обратить внимание на свойство Enabled. Оно дает возможность программе "запустить" или "остановить" таймер. Если значение свойства Enabled равно False, то событие OnTimer не возникает.

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

ПримечаниеПеременные х, у (координаты центра окружности) и dx (приращение координаты х при

движении окружности) объявлены вне процедуры Ris, т. е. они являются глобальными. Поэтому надо не забыть выполнить их инициализацию (в программе инициализацию глобальных переменных реализует процедура FormActivate).

Page 58: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Лекция 17Тема Применение компонентов CheckBox и RadioGroup.

1. Размещение компонентов CheckBox и RadioGroup на форме.2. Организация выбора одного из условий используя компонент CheckBox и RadioGroup.3. Решение задач.

1 Размещение компонентов CheckBox и RadioGroup на форме.В палитре компонентов на странице Standard выбрать компонент CheckBox. В свойстве

Caption Инспектора Объектов заменить надпись CheckBox на подпись например «Вывод исходных данных». Чтобы при запуске приложения кнопка CheckBox оказалась включена, свойство Checked компонента CheckBox установить равным True.

В палитре компонентов на странице Standard выбрать компонент RadioGroup. В свойстве Caption Инспектора Объектов заменить надпись RadioGroup например на F(x).Для размещения кнопок в один столбец свойство Columns необходимо установить =1. Дважды щелкнуть «мышью» по правой части свойства Items – появится строчный редактор списка наименований кнопок, где набираются в столбец функции. После этого появятся на форме записанные функции. Чтобы при запуске приложения одна из кнопок RadioGroup оказалась включена, свойство ItemIndex установить =0 или целым положительным. Это обеспечит выполнение одной из функции. Если свойство ItemIndex не устанавливать, то по умолчанию оно будет =-1, что соответствует выключенному состоянию всех кнопок. 2Организация выбора одного из условий используя компонент CheckBox и RadioGroup.

If CheckBox1.Checked then Memo1.Lines.Add( действие);- если кнопка нажата, то выполнится действие Case RadioGroup1. ItemIndex of0:y:=Cos(x);1:y:=Sin(x);End;

3 Решение задач.

Задача1 : Вычислить одну из выбранных функций y=x+3 или y=/x-3/.

procedure TForm1.FormCreate(Sender: TObject);beginedit1.Text:='2'; // значение х memo1.Clear; // очистка memo1 memo1.Lines.Add('Ответ');end;

Page 59: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

procedure TForm1.Button1Click(Sender: TObject);varx,y:extended; begin x:=strtofloat(edit1.Text);// х присваивается содержимое edit1//проверка состояния кнопки checkBox1 if checkBox1.Checked then //если кнопка нажата , то memo1.Lines.Add('x='+FloatTostr(x)); // вывод значения х case radiogroup1.ItemIndex of 0:y:=x+3; 1:y:=/x-3/;end; memo1.Lines.Add('y='+FloatTostr(y));// вывод результата в memo1.end;end.

Задача2 : Организовать выбор одного из действий : увеличить в два раза или увеличить на 2 элементы массива, число которых можно регулировать

Лекция 18Тема Добавление данных в список

1. Добавление данных в список 2. Указатели3. Динамические переменные

1 Добавление данных в список Разработать программу для составления словаря новых терминов. Должна иметься

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

Новым в этой работе является использование комбинированного списка ComboBox (представляющего собой объединение строки ввода икомпонента ListBox), компонента — выключателя CheckBox.

var Form1: TForm1; num:integer;implementation{$R *.dfm}

Page 60: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

procedure TForm1.BitBtn1Click(Sender: TObject);beginClose;end;

procedure TForm1.Button1Click(Sender: TObject); // кнопка добавить beginif ComboBox1.text<>'' then ComboBox1.Items.Add(ComboBox1.Text) ;if ComboBox1.ItemIndex=-1 then ComboBox1.Text:='';//последний оператор очищает строку ввода после того, как текст из нее попадает в список ComboBox1.Items.SaveToFile('glostext.txt'); //сохранение в файле glostext.txtend;

procedure TForm1.Button2Click(Sender: TObject); //кнопка удалитьbeginif messagedlg('Вы действительно хотите удалить запись?',mtWarning,[mbyes,mbno],0)=mryesthen ComboBox1.Items.Delete(ComboBox1.ItemIndex);// появится сообщение с !, термин будет удален только при нажатии кнопки yes ComboBox1.Items.SaveToFile('glostext.txt');end;

procedure TForm1.FormCreate(Sender: TObject);beginComboBox1.Items.LoadFromFile('glostext.txt');//при открытии формы будет загружатся сохраненный файлlabel1.caption:='Всего записей:'+IntTostr(ComboBox1.Items.Count);//доп. зад.end;

procedure TForm1.Button3Click(Sender: TObject); //кнопка редактироватьbegincomboBox1.Items.Delete(num); comboBox1.Items.Add(comboBox1.text); if comboBox1.itemIndex=-1 then ComboBox1.Text:=''; ComboBox1.Items.SaveToFile('glostext.txt');end; //Пояснение.Для исправления ошибок, замеченных в строках списка, выделенную строку надо удалить из списка, а исправленную строку (т. е. содержимое строки ввода) добавить в список.Новая переменная пит необходима для сохранения номера выбранной строки. При внесении изменений выбранной строкой становится строка ввода, для которой Itemlndex = - 1.//

procedure TForm1.ComboBox1Click(Sender: TObject);begin num:= ComboBox1.itemindex;Label2.Caption:='номер:'+ IntTostr(ComboBox1.ItemIndex+1);//доп.зад. первый термин имеет индекс 0, второй — 1 и т. д.end;

procedure TForm1.CheckBox1Click(Sender: TObject);begin if CheckBox1.Checked = False then begin ComboBox1.Style:=csDropDown; Button1.Enabled:= true; end

Page 61: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

else begin ComboBox1.Style:= csDropDownList; Button1.Enabled:= false;end; end;end.

2 УказателиОбычно переменная хранит некоторые данные. Однако помимо обычных, существуют

переменные, которые ссылаются на другие переменные. Такие переменные называются указателями. Указатель — это переменная, значением которой является адрес другой переменной или структуры данных. Графически указатель может быть изображен так, как на рис. 1

Рис. 1. Переменная-указатель Указатель, как и любая другая переменная программы, должен быть

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

Имя: ^ Тип; Тип — тип переменной, на которую указывает переменная-указатель;

значок ^ показывает, что объявляемая переменная является указателем.

Пример:p1: ^integer; р2: ^real;В приведенном примере переменная p1 — это указатель на переменную типа integer, a p2 —

указатель на переменную типа real.Тип переменной, на которую ссылается указатель, называют типом указателя. В начале работы программы переменная-указатель "ни на что не указывает". В этом случае

говорят, что значение указателя равно NIL. Зарезервированное слово NIL соответствует значению указателя, который ни на что не указывает.

Идентификатор NIL можно использовать в инструкциях присваивания и в условиях. Например, если переменные p1 и р2 объявлены как указатели, то инструкция

p1 := NIL; – устанавливает значение переменной, а инструкция if р2 = NIL then ShowMessage('Указатель р2 не инициализирован!'); проверяет,

инициализирован ли указатель р2.Указателю можно присвоить значение — адрес переменной соответствующего типа (в тексте

программы адрес переменной — это имя переменной, перед которым стоит оператор @). Ниже приведена инструкция, после выполнения которой переменная р будет содержать адрес переменной п. р := @n;

Помимо адреса переменной, указателю можно присвоить значение другого указателя при условии, что они являются указателями на переменную одного типа. Например, если переменные pi и р2 являются указателями типа integer, то в результате выполнения инструкции p2 := p1; переменные pi и р2 указывают на одну и ту же переменную.

Указатель можно использовать для доступа к переменной, адрес которой содержит указатель. Например, если р указывает на переменную i, то в результате выполнения инструкции р^ : = 5; значение переменной i будет равно пяти. В приведенном примере значок ^ показывает, что значение пять присваивается переменной, на которую указывает переменная-указатель.

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

работы программы.Выделение памяти для динамической переменной осуществляется вызовом процедуры new. У

процедуры new один параметр — указатель на переменную того типа, память для которой надо выделить. Например, если р является указателем на тип real, то в результате выполнения процедуры new(p); будет выделена память для переменной типа real (создана переменная типа real), и переменная-указатель р будет содержать адрес памяти, выделенной для этой переменной.

Page 62: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

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

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

Например, если р — указатель на динамическую переменную, память для которой выделена инструкцией new(p), то инструкция dispose (р) освобождает занимаемую динамической переменной память.

Следующая программа (ее текст приведен в листинге ) формирует список студентов, добавляя фамилии в начало списка. Данные вводятся в поля редактирования диалогового окна программы и добавляются в список нажатием кнопки Добавить (suttoni).

Листинг implementation{$R *.DFM}typeTPStudent=^TStudent; // указатель на тип TStudent TStudent = recordf_name:string[20]; // фамилия l_name: string[20]; // имя next: TPStudent; // следующий элемент списка end;

varhead: TPStudent; // начало (голова) списка // добавить элемент в начало списка procedure TForml.Button1Click(Sender: TObject);var curr: TPStudent; // новый элемент списка beginnew(curr); // выделить память для элемента списка curr^.f_name := Edit1.Text;curr^.1_пате := Edit2.Text;// добавление в начало списка curr^.next := head; head := curr;// очистить поля ввода Edit1.text:=''; Edit2.text: = " ; end;// вывести список procedure TForml.Button2Click(Sender: TObject); var curr: TPStudent; // текущий элемент списка n:integer; // длина (кол-во элементов) списка st:string; // строковое представление списка begin n := 0; st := '';curr := head; // указатель на первый элемент списка while curr <> NIL do beginn := n + 1;st := st + curr^.f_name + ' ' + curr^.1_name +#13; curr := curr^.next; // указатель на следующий элемент end;if n <> 0 then ShowMessage('Список:' + #13 + st)else ShowMessage('В списке нет элементов.');end; end.

Page 63: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Добавление элемента в список выполняет процедура TForm1.Button1Click, которая создает динамическую переменную-запись, присваивает ее полям значения, соответствующие содержимому полей ввода диалогового окна, и корректирует значение указателя head.

Вывод списка выполняет процедура TForm1.Button2Click, которая запускается нажатием кнопки Показать. Для доступа к элементам списка используется указатель curr. Сначала он содержит адрес первого элемента списка. После того как первый элемент списка будет обработан, указателю curr присваивается значение поля next той записи, на которую указывает curr. В результате этого переменная curr содержит адрес второго элемента списка. Таким образом, указатель перемещается по списку. Процесс повторяется до тех пор, пока значение поля next текущего элемента списка (элемента, адрес которого содержит переменная curr) не окажется равно NIL.

Лекция 19-20Тема Создание тестовых приложений

1. Разработка проекта «Тест по физике»2. Разработка проекта «Тест по географии»

1. Разработка проекта «Тест по физике»

0 Ват - мощность 2 напряжение 1 Ом - сопротивление 3 сила тока 2 Вольт - напряжение 0 мощность 3 Ампер - сила тока 1 сопротивление

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

перемещаясь с помощью клавиш-стрелок по списку «Физическая величина», выбирает любое слово, нажав клавишу Enter. Затем он переходит в список «Название величины» и выбирает соответствующее название выбранной физической величины. Если выбрано правильное название величины, то под словом «Оценка» появляется одобрительная реплика «Правильно», если неправильное слово, то — «Ошибка». Правильные названия ищутся до тех пор, сколько попыток укажет программист.

Пояснение. Новым в этой работе является обеспечение взаимодействия двух списков ListBox на основе свойств Items и Itemlndex и создание многострочных надписей в объекте Label.

Для вывода многострочных надписей в объектах label выполните следующие действия:

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

Labell PropertiesAutoSize (изменение размера в зависимости от текста в Caption)

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

Wordwrap (разрыв строки) Установка значения True

Page 64: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

var Form1: TForm1; num1,num2,CountR,Rez:integer;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);beginClose;end;

procedure TForm1.ListBox1KeyPress(Sender: TObject; var Key: Char);beginif key=#13 then num1:=ListBox1.Itemindex; //#13-новая строкаend;

procedure TForm1.ListBox2KeyPress(Sender: TObject; var Key: Char);beginIf key=#13 then begincase Form1.ListBox2.Itemindex of0:Num2:=2;1:Num2:=3;2:Num2:=0;3:Num2:=1;end;if Num1=Num2 thenbeginform1.Label4.Caption:='Правильно';rez:=rez+1; endElse form1.Label4.Caption:='Ошибка';CountR:=CountR+1;If CountR=4 then ShowMessage('Тест окончен! Правильных ответов:'+ inttostr(rez)); // CountR=4-количество попытокend; end; end.

Задание: 1 Вывести оценку за тест по правилу 4 правильных -оценка «5», 3 правильных- «4», 2пр-«3», 1пр-«2»

procedure TForm1.Button1Click(Sender: TObject); var otmetka:string;begin

case rez of1:otmetka:='2';2:otmetka:='3';3:otmetka:='4';4:otmetka:='5';end;

Form1.Label3.Caption := 'Оценка'+otmetka ;end;

2 Списки ListBoxl и ListBox2 сделать поочередно доступными после нажатия клавиши Enter.

Page 65: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Подсказка. Установить значение False свойства Enabled объекта ListBox2, а в процедуру KeyPressed, относящуюся к ListBoxl, включить строки:

ListBox2.Enabled := True; ListBoxl.Enabled := False; Forml.ActiveControl :=ListBox2;

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

Подсказка. В процедуру KeyPressed, относящуюся к ListBox2, включить:ListBoxl.Items.Delete(Numl); ListBoxl.Items.Insert(Numl, ");

2 Разработка проекта «Тест по географии»

Титульная формаvarForml: TForml; implementation {$R *.DFM}procedure TForml. FormCreate(Sender: TObject); begin Label2.Caption:='Разработал студент 4 ОВТ'; end;procedure TForml. BitBtnlClick (Sender: TObject); begin Close;end;procedure TForml.BitBtn2Click(Sender: TObject); beginClose;End;Procedure Tforml . BitBtn2Click (Sender: TObject);begin U_Menu. ShowModal;//открытие формы end; end.Форма «Меню»:varU_Menu: TU_Menu; implementation {$R *.DFM}procedure TU_Menu.N4Click (Sender: TObject);

begin Close; end;procedure TU_Menu.N5Click (Sender: TObject); beginU_Instr.ShowModal ;end;procedure TU_Menu. N2Click(Sender: TObject); beginnm := InputBox('Начало тестирования','Введите имя',''); U_Test.RadioGroupl.Itemlndex:=-1;

Page 66: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

U_Test.RadioGroup2.Itemlndex:=-1; U_Test.RadioGroup3.Itemlndex:=-1; U_Test.RadioGroup4.Itemlndex:=-1; U_Test.RadioGroup5.Itemlndex:=-1; U_Test.PageControll.ActivePage:=U_Test.TabSheetl; U_Test.ShowModal; end; procedure TU_Menu.N3Click(Sender: TObject);

beginU_Res. Labell. Caption:=nm+' Ваш результат :'+IntToStr(Ball);U_Res.ShowModal;end;end.

Форма «Помощь»:varU_Instr: TU_Instr; implementation {$R *.DFM}procedure TU_Instr. CancelBtnClick(Sender: TObject); begin Close; end;end.

Форма «Результат»:unit F_Res;interfaceuses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,Buttons, ExtCtrls; Type…

private{Private declarations} public

{Public declarations} end; type Tl=array[l..5,0..3] of byte; constotv:Tl=((0,0,1,0), (0,0,1,0), (0,1,0,0),(0,0,1,0),(0,1,0,0)); varU_Res: TU_Res; Ball:Byte; Nm:String; implementation {$R *.DFM} end.Форма «Тестирование»:

varU_Test: TU_Test; implementation {$R *.DFM}procedure TU_Test. OKBtnClick (Sender: TObject)

Page 67: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

beginBall:=otv[1,RadioGroupl.Itemlndex]+ otv[2,RadioGroup2.Itemlndex]+ otv[3,RadioGroup3.Itemlndex]+ otv[4,RadioGroup4.Itemlndex]+ otv[5,RadioGroup5.Itemlndex]; end; end.

Лекция 21-22Тема Разработка баз данных

1. Страница DIALOGS2. Создание базы данных для работы с телефонным справочником

1. Страница DIALOGSКомпоненты страницы Dialogs реализуют стандартные для Windows диалоговые окна.OpenDialog - открыть. Реализует стандартное диалоговое окно “Открыть файл”.SaveDialog - сохранить. Реализует стандартное диалоговое окно “Сохранить файл”.OpenPictureDialog - открыть рисунок. Реализует специальное окно выбора графических файлов с возможностью предварительного просмотра рисунков.SavePictureDialog - сохранить рисунок. Реализует специальное окно сохранения графических файлов с возможностью предварительного просмотра рисунков.FontDialog - шрифт. Реализует стандартное диалоговое окно выбора шрифта.ColorDialog - цвет. Реализует стандартное диалоговое окно выбора цвета.PrintDialog - печать. Реализует стандартное диалоговое окно выбора параметров для печати документа.PrinterSetupDialog - настройка принтера. Реализует стандартное диалоговое окно для настройки печатающего устройства.FindDialog - поиск. Реализует стандартное диалоговое окно поиска текстового фрагмента.ReplaceDialog - замена. Реализует стандартное диалоговое окно поиска и замены текстового фрагмента.Компоненты OpenPictureDialog И SavePictureDialog введены в версии 3, остальные имеются в предыдущих версиях. Разумеется, интерфейс окон для Windows 16 (версия 1) отличается от интерфейса Windows 32.2. Создание базы данных для работы с телефонным справочникомСоздадим приложение для работы с телефонным справочником, содержащим следующую информацию: фамилию владельца телефона, номер телефона, домашний адрес владельца. Предусмотрим следующие функции приложения:а) добавление новой строки в справочник;б) удаление последней строки из справочника;в) сохранение справочника на диске; г) загрузку справочника с диска; д) поиск фамилии в справочнике;е) поиск телефона в справочнике.Для решения поставленной задачи выполним следующие действия:

Page 68: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

1) на страничке Additional выберем компонент StringGrid, разместим на форме и изменим значение ряда его свойств:ColCount = 3 (число колонок в строке справочника); FixedCols = 0 (фиксированных колонок нет); FixedRows = 1 (одна фиксированная строка);RowCount = 2 (первоначальное число строк); Options:goEditing = True (ячейки сетки можно редактировать);goTabs = True (можно перемешаться по ячейкам справочника с помощью Tab);

2)на страничке Standard выберем последовательно 6 раз компонент Button и разместим кнопки на форме. Значение свойства Caption кнопок Buttonl,..., Button6 изменим соответственно на «Добавить», «Удалить», «Сохранить», «Загрузить», «Поиск фамилии», «Поиск телефона»; 3)на страничке Dialogs выберем последовательно и разместим на форме компоненты SaveDiaiog, OpenDialog и дважды компонент FindDialog. Изменим ряд значений свойства Options компонентов FindDialogl и FindDialog2:frDown = True (по умолчанию искать сверху вниз);frDisableMatchCase = True (учитывать регистр);frDisableWholeWord = True (не использовать возможность поиска слова целиком);

4)определим заголовки колонок сетки строк:Procedure TForm1. FormCreate(Sender: TObject);Beginwith StringGrid do BeginСеlls[0,0]:='Фамипия Имя Отчество'; Cells[1,0]:=Телефон'; Cells[2,0]: = 'Домашний адрес' End End;

Для этого переместим курсор мыши в свободное от других компонентов место формы и дважды нажмем левую кнопку мыши; 5) определим функциональное назначение кнопки «Добавить»:Procedure TForm1.ButtonlClick(Sender: TObject);BeginStringGridi .RowCount:= StringGridi .RowCount+1 End; 6)определим функциональное назначение кнопки «Удалить»:Procedure TForm1.Button2Click(Sender: TObject);Begin with StringGrid1 doif RowCount > 2 then RowCount:=RowCount-1End;

Page 69: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

7)определим функциональное назначение кнопки «Сохранить»:Procedure TForm1.Button3Click(Sender: TObject);var i:integer; StringAII: TStringList; Begin if SaveDialog1 .Execute then with StringGrid1,SaveDialog1 do Begin StringAII:= TStringList.Create; StringAII.Add(lntToStr(RowCount)); for i:= 0 to RowCount-1 do StringAII. AddStrings(Rows[i]); StringAII.SaveToFile(FileName); StringAII.Destroy End End;

8) определим функциональное назначение кнопки «Загрузить»: Procedure TForm1.Button4Click(Sender: TObject);var i,j: integer; StringAII: TStringList; Begin if OpenDialog1.Execute then with StringGrid1,OpenDialog1 do Begin StringAII:= TStringList.Create; StringAII.LoadFromFile(FileName); RowCount:=StrTolnt(StringAll.strings[0]); for i:= 0 to ColCount-1 do for j:= 0 to RowCount-1 do Cells[i,j]:= StringAII.Strings [1+i+j*ColCount]; StringAII. Destroy End End;

9)определим функциональное назначение кнопки «Поиск фамилии»: Procedure TForm1.Button5Click(Sender: TObject);Begin FindDialog1.Execute End;

10)определим функциональное назначение кнопки «Поиск телефона»: Procedure TForm1.Button6Click(Sender: TObject);BeginFindDialog2.Execute End;

11) напомним, что при нажатии кнопки FindNext диалога FindDialog1 возникает событие OnFind. Внутри обработчика этого события необходимо определить действия по непосредственному поиску. Поэтому на форме Forml активируем компонент FindDialog1, в инспекторе объектов выберем страничку Events (события), найдем на ней событие OnFind и дважды нажмем левую кнопку мыши. Определим действия программы для этого события:Procedure TForm1.FindDialog1Find(Sender TObject); var i:nteger;

Page 70: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Begin if not (frDisableUpDown in FindDialog1.Options) then Begin if frDown in FindDialog1.Options then Begin for i:=StringGrid1 .Row+1 to StringGrid1.RowCount-1 do if Pos(FindDialog1.FindText,StringGrid1.Cells[0,i]) =1 then Begin StringGrid1. Row:=i; StringGrid1.Col:=0; FindDialog1.CloseDialog; Exit End; FindDialog1.CloseDialog; MessageBox(0,'Фамилия не найдена!', 'Поиск по фамилии',mb_ОК) End Else Begin For i:=StringGrid1.Row-1 downto 1 do if Pos(FindDialog1.FindText, StringGrid1.Cells[0,i]) =1 then Begin StringGrid1.Row:= i; StringGrid1.Col:= 0; FindDialog1.CloseDialog; Exit End; FindDialog1.CloseDialog; MessageBox(0,'Фамилия не найдена!', 'Поиск по фамилии',mb_ОК) End End Else {нет переключения поиска вверх-вниз; по умолчанию - вниз} Begin for i:=StringGrid1 .Row+1 to StringGrid1.RowCount-1 do if Pos(FindDialog1.FindText,StringGrid1.Cells[0,i]) = 1 then Begin StringGrid1.Row:= i; StringGrid1. Col:= 0; FindDialog1.CloseDialog; Exit End; FindDialog1.CloseDialog; MessageBox(0,'Фамилия не найдена!', 'Поиск по фамилии',mb_OK); End; End;

12)аналогично определим действия программы для события OnFind компонента FindDialog2:Procedure TForm1.FindDialog2Find(Sender TObject); var i:integer; Begin if not (frDisableUpDown in FindDialog2.Options) then Begin if frDown in FindDialog2.Options then Beginfor i:= StringGrid1.Row+1 to StringGrid1.RowCount-1 do if FindDialog2.FindText = StringGrid1.Cells[1 ,i] then

Page 71: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

BeginStringGrid1.Row:=i; StringGrid1.Col:= 1; FindDialog2.CloseDialog; Exit End;FindDialog2.CloseDialog; MessageBox(0,Телефон не найден!', 'Поиск телефона',mb_ОК); End Else BeginFor i:=StringGrid1.Row-1 downto 1 do if FindDialog2.FindText =StringGrid1 .Cells[1 ,i] then BeginStringGrid1.Row:=i; StringGrid1.Col:=1; FindDialog2.CloseDialog; Exit End;Find Dialog2. CloseDialog; MessageBox(0,Телефон не найден!', 'Поиск телефона',mb_ОК) End EndElse {нет переключения поиска вверх-вниз; по умолчанию - вниз} BeginFor i:=StringGrid1.Row+1 to StringGridi.RowCount-1 do if FindDialog2.FindText =StringGrid1 .Cells[1 ,i] then BeginStringGrid1.Row:=i; StringGrid1.Col:= 1; FindDialog2.CloseDialog; Exit End;FindDialog2. CloseDialog; MessageBox(0,Телефон не найден!', ‘Поиск телефона’,mb_OK) End End;Обратим внимание на ряд свойств компонента StringGrid, используемых в приложении:Rows[i] — i-я строка таблицы;Cells[j,i] — отдельный элемент таблицы, стоящий на пересечении строки с номером i и столбца с номером.

Лекция 23Тема Решение задач

Листинг . База данных "Школа"unit school2_;interfaceusesWindows, Messages, SysUtils, Classes,Graphics, Controls, Forms,Dialogs,Grids, DBGrids, Db,DBTables, ExtCtrls, DBCtrls, StdCtrls;typeTForm1 = class(TForm)Table1: TTable; // таблица (вся база данных)Query1: TQuery; // запрос (записи БД, удовлетворяющие критерию выбора)DataSource1: TDataSource; // источник данных - таблица или запросDBGrid1: TDBGrid; // таблица для отображения БД или результата выполнения запроса

Page 72: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

DBNavigator1: TDBNavigator;DBText1: TDBText;Button1: TButton; // кнопка запросButton2: TButton; // кнопка Все записиprocedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure FormActivate(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}// щелчок на кнопке Запросprocedure TForm1.Button1Click(Sender: TObject);varfam: string[30];beginfam:=InputBox('Выборка информации из БД','Укажите фамилию и щелкните на OK.', '');if fam <> '' // пользователь ввел фамилиюthenbeginwith form1.Query1 do beginClose; // закрыть файл-результат выполнения предыдущего запросаSQL.Clear; // удалить текст предыдущего запроса// записываем новый запрос в свойство SQLSQL.Add('SELECT Fam, Name, Class');SQL.Add('FROM ":Школа:school.db"');SQL.Add('WHERE');SQL.Add('(Fam = "'+ fam + '")');SQL.Add('ORDER BY Name, Fam');Open; // активизируем выполнение запросаend;{ *** другой вариант изменения критерия запросаbeginQuery1.Close;Query1.SQL[3]:='(Fam="'+ fam + '")';Query1.Open;DataSource1.DataSet:=Query1;end;}if Query1.RecordCount <> 0 thenDataSource1.DataSet:=Query1 // отобразить рез-т выполнения запросаelse beginShowMessage('В БД нет записей, удовлетворяющих критерию запроса.');DataSource1.DataSet:=Table1;end;end;end;

Page 73: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

// щелчок на кнопке Все записиprocedure TForm1.Button2Click(Sender: TObject);beginDataSource1.DataSet:=Table1; // источник данных - таблицаend;// активизация формыprocedure TForm1.FormActivate(Sender: TObject);beginDataSource1.DataSet := Table1;Table1.Active := True;end;end.

Процедура TForm1.Button1Click запускается щелчком кнопки Запрос. Она принимает от пользователя строку (фамилии) и записью (добавлением) строк в свойство SQL формирует текст запроса. Затем эта процедура вызовом метода Open активизирует выполнение запроса.

Следует обратить внимание на то, что перед изменением свойства SQL-запрос должен быть закрыт при помощи метода close (здесь надо вспомнить, что результат выполнения запроса — это файл данных (таблица), который создается в результате выполнения запроса).

Процедура TForm1.Button2Click, которая запускается щелчком кнопки Все записи, устанавливает в качестве источника данных для компонента DataSourcel компонент Table1, тем самым обеспечивая переход в режим просмотра всей базы данных.

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

Например, для запросаSELECT DISTINCT Fam, Name, Class FROM ":Школа:school.db" WHERE(Class= '10а') ORDER BY Name, Famинструкция замены критерия запроса может быть такой:forml.Query1.SQL[3]:='(Fam="' + fam+ '")'Следует обратить внимание на то, что свойство SQL является структурой типа TStrings, в

которой строки нумеруются с нуля.

Выбор информации из базы данныхДля выборки из базы данных записей, удовлетворяющих некоторому критерию, предназначен компонент Query (рис. 1).

Рис. 1. Значок компонента QueryКомпонент Query похож на компонент Table, но, в отличие от последнего, он представляет не всю базу данных (все записи), а только ее часть — записи, удовлетворяющие критерию запроса.В табл. 1 перечислены некоторые свойства компонента Query.

Т аблица 1 Свойства компонента Query

Свойство ОпределяетName Имя компонента. Используется

компонентом Datasource для связи

Page 74: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

SQL  Active

результата выполнения запроса (набора записей) с компонентом, обеспечивающим просмотр записей, например DBGridЗаписанный на языке SQL запрос к базе данных (к таблице)При присвоении свойству значения True активизирует выполнение запроса

В общем виде запрос на выборку из таблицы данных выглядит так:SELECT Список-Полей FROM Таблица WHERE (Критерий) ORDER BY СписокПолейгде:SELECT — команда выбора записей из таблицы и вывода содержимого полей, имена которых указаны в списке;FROM — параметр команды, который определяет имя таблицы, из которой нужно сделать выборку;WHERE — параметр, который задает критерий выбора. В простейшем случае критерий — это инструкция проверки содержимого поля;ORDER BY - параметр, который задает условие, в соответствии с которым будут упорядочены записи, удовлетворяющие критерию запроса.Например, запросSELECT Fam, Name FROM ':Школа:school.db' WHERE(Class = '10a') ORDER BY Name, Famобеспечивает выборку из базы данных "Школа" (из таблицы School.db) записей, у которых в поле class находится текст 10а, т. е. формирует упорядоченный по алфавиту список учеников 10-а класса..Ниже приведен фрагмент кода, который формирует запрос на поиск информации о конкретном человеке (критерий выбора — содержимое поля Fam должно совпадать со значением переменной fam).with forml.Queryl do beginClose; // закрыть файл — результат выполнения// предыдущего запросаSQL.Clear; // удалить текст предыдущего запроса// записываем новый запрос в свойство SQLSQL.Add('SELECT Fam, Name, Class1);SQL.Add('FROM ":Школа:school.db"');SQL.Add('WHERE');SQL.Add('(Fam = '" + fam + '")');SQL.Add('ORDER BY Name, Fam');Open; // активизируем выполнение запросаend;Следующая программа, ее текст приведен в листинге а диалоговое окно — на рис. 2, демонстрирует возможность изменения запроса, точнее, критерия запроса, во время работы программы. Программа обеспечивает вывод как всего списка учеников, так и его части. Например, посредством выполнения запроса выводится информация только о конкретном ученике.Для просмотра базы данных и результата выполнения запроса используется компонент DBGrid1, который через компонент DataSourcel взаимодействует с компонентом Table1 (при просмотре всей базы данных) или с компонентом Query (при просмотре результата выполнения запроса).

Page 75: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Рис. 2. Форма приложения База данных Школа

Лекция 24Тема Средства создания проектов

Создание базы данных «Школа» в режиме таблицыПрограмма работы с базой данных "Архитектурные памятники Санкт-Петербурга" выводит

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

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

Пусть база данных "Школа" (псевдоним школа), представляет собой таблицу, которая находится в файле School.db. Записи таблицы school состоят из полей: Name (Имя), Fam (Фамилия), class (Класс), Adr (Адрес) и N (Личный номер). Поля Name, Fam, class и Adr являются полями символьного типа (тип А), а поле N — числовое, с автоувеличением.

ПримечаниеПсевдоним Школа следует создать при помощи BDE Administrator, а таблицу (файл school.db)

— при помощи Database Desktop.Сначала в форму разрабатываемого приложения нужно добавить компоненты Table и

DataSource, которые обеспечивают доступ к файлу данных, и установить значения их свойств (табл. 1).Таблица 1. Значения свойств компонентов Table1 и DataSource1Свойство ЗначениеTablel . DatabaseNameTablel . TableName Tablel. Active DataSourcel . Dataset

Школа school . db True Tablel

Для обеспечения просмотра и редактирования данных в режиме таблицы в форму приложения надо добавить компонент DBGrid, значок которого находится на вкладке Data Controls (рис. 1). Вид формы разрабатываемого приложения после добавления компонента DBGrid приведен на рис. 1

Рис. 1. Значек компонента DBGrid

Page 76: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Рис. 2. Форма приложения после добавления компонента DBGridКомпонент DBGrid обеспечивает представление базы данных в виде таблицы. Свойства

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

Для того чтобы задать, какая информация будет отображена в таблице во время работы программы, нужно сначала определить источник данных для таблицы (установить значения свойства DataSource), затем — установить значения уточняющих параметров свойства Columns. Значение свойства DataSource задается обычным образом, то есть в окне Object Inspector. Чтобы установить значение свойства Columns, надо в окне Object Inspector выбрать это свойство и щелкнуть на кнопке с тремя точками. В результате открывается окно редактора колонок .

Рис. 4. Редактор колонокДля того чтобы в компонент DBGrid добавить колонку, обеспечивающую просмотр

содержимого поля записи файла данных, необходимо нажать кнопку Add New, находящуюся на панели инструментов в верхней части окна (это единственная доступная после запуска редактора кнопка), выделить добавленный элемент и, используя Object Inspector, установить значения свойств этой колонки Свойство columns компонента DBGrid представляет собой массив компонентов типа TCoiumn. Каждой колонке соответствует элемент массива. Устанавливая значения свойств компонентов column, программист задает вид колонок компонента DBGrid, тем самым определяет вид всей таблицы. Последнее, что надо сделать — добавить к форме компонент DBNavigator, настроив его на работу с таблицей-источником данных (свойству DataSource Нужно Присвоить значение Table1).Окончательный вид формы приложения приведен на рис. 5

Page 77: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Рис. 5 Форма после настройки компонента DBGrid1После этого программу можно откомпилировать и запустить. Следует обратить внимание, что

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

Работа с базой данных, представленной в виде таблицы, во многом похожа на работу с электронной таблицей Microsoft Excel. Используя клавиши перемещения курсора вверх и вниз, а также клавиши листания текста страницами (<Page Up> и <Page Down>), можно, перемещаясь от строки к строке, просматривать записи базы данных. Нажав клавишу <Ins>, можно добавить запись, а нажав клавишу <Del> — удалить запись. Для того чтобы внести изменения в поле записи, нужно, используя клавиши перемещения курсора влево и вправо, выбрать необходимое поле и нажать клавишу <F2>.

Page 78: Инфоурок · Web viewI СЕМЕСТРЛекция 1 Тема Элементы интерфейса Delphi. 1. Начало работы 2. Форма 1. Начало работы

Список литературы

1. М.А. Прищепов «Программирование на языках Basic, Pascal, Object Pascal в среде Delphi». Минск, 2006г.-320с.

2. А.Г. Смольянов «Визуальное конструирование программ средствами инструментальной системы Delphi ». Саранск, 2000г.-76с.

3. Е.В. Давыдова, И.А. Скородумов. Создание базовых элементов интерфейса Windows –программы в среде Delphi. \\ Информатика и образование.2002г.-№5. С 30-40.