
- •Часть I
- •Содержание
- •Лабораторная работа №1. Интегрированная среда разработки Delphi. Обзор основных компонентов.
- •Пример создания простейшего Windows-приложения.
- •Содержание отчета.
- •Контрольные вопросы.
- •Лабораторная работа №2. Способы организации файлового ввода-вывода. Динамические массивы.
- •Переменные TextFileName и GraphFileName указывает путь к файлу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Лабораторная работа №3. Обработка исключительных ситуаций в Delphi.
- •Вывод сообщений
- •Пример создания приложения с обработкой ис.
- •Содержание отчета.
- •Контрольные вопросы.
- •Лабораторная работа №4. Изучение графических возможностей Delphi.
- •Пример создания приложения, использующего графические возможности Delphi.
- •Содержание отчета.
- •Контрольные вопросы.
- •Литература.
Переменные TextFileName и GraphFileName указывает путь к файлу.
При сохранении содержимого файла действия аналогичны действиям при открытии:
ListBox1.Items.SaveToFile(TextFileName);
Image1.Picture SaveToFile(GraphFileName);
В состав Windows входит ряд типовых диалоговых окон, таких как окно выбора загружаемого файла, окно выбора шрифта и т.д. В Delphi реализованы классы, объекты которых дают удобные способы создания и использования таких окон. Компоненты страницы Dialogs реализуют стандартные для Windows диалоговые окна. Наиболее распространенными компонентами этой страницы являются следующие компоненты:
OpenDialog - реализует стандартное диалоговое окно “Открыть файл”.
SaveDialog - реализует стандартное диалоговое окно “Сохранить файл”.
OpenPictureDialog - реализует специальное окно выбора графических файлов с возможностью предварительного просмотра рисунков.
SavePictureDialog - реализует специальное окно сохранения графических файлов с возможностью предварительного просмотра рисунков и т.д.
Во всех этих компонентах наиболее важными свойствами являются свойства FileName и Filter. В свойстве FileName при успешном завершении диалога содержится маршрут поиска и выбранный файл. Свойство Filter используется для фильтрации файлов, показываемых в диалоговом окне. Это свойство устанавливается с помощью специального редактора на этапе создания приложения или программно. Работа с диалогом осуществляется в три этапа. Сначала на форму помещается соответствующий компонент и осуществляется настройка его свойств. Далее осуществляется вызов стандартного для всех диалогов метода Execute, который создает и показывает на экране диалоговое окно. Вызов этого метода располагается внутри какого-либо обработчика события. Окно диалога является модальным окном, поэтому выполнение программы приостанавливается, пока это окно не будет закрыто. Метод Execute – это логическая функция, которая возвращает true, если диалог завершен успешно. Тогда выполняется последний этап создания диалога – использование введенных с помощью диалогового окна данных (имени файла, выбранного шрифта и т.д.). Пример использования диалога приведен ниже.
// сохранение файла
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then // выполнение диалога
Memo1.Lines.SaveToFile(SaveDialog1.FileName); // сохранение файла
end;
// открытие файла
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then // выполнение диалога
if FileExists(OpenDialog1.FileName) // проверка файла на существование
//открытие и загрузка файла
then Memo1.Lines.LoadFromFile(OpenDialog1.FileName)
else ShowMessage('Файл не найден'); // вывод сообщения
end;
Динамические массивы.
Динамические массивы введены в Object Pascal, начиная с Delphi 4. Они отличаются от обычных статических массивов тем, что в них не объявляется заранее длина – число элементов. Поэтому динамические массивы удобно использовать в приложениях, где объем обрабатываемых массивов заранее неизвестен и определяется в процессе работы программы.
Объявление динамического массива содержит только его имя и тип элементов – один из базовых или созданных пользователем типов. Синтаксис объявления:
<имя> : array of <базовый тип>
Например,
Var A : array of integer;
При объявлении динамического массива место под него не отводится. Прежде, чем использовать массив, надо задать его размер процедурой SetLength. В качестве аргументов в нее передаются имя массива и целое значение, характеризующее число элементов. Например, оператор SetLength(A, 10) выделит для массива А место в памяти под 10 элементов и задаст нулевые значения для всех элементов. Повторное применение SetLength к уже существующему в памяти массиву изменяет его размер. Если новое значение размера больше предыдущего, то все значения элементов сохраняются и в конце добавляются новые нулевые элементы. Если же новый размер меньше предыдущего, то массив усекается, и в нем остаются значения первых элементов.
Если динамический массив уже размещен в памяти, к переменной этого массива можно применять функции Length – длина, High – наибольшее значение индекса и Low – наименьшее значение индекса (всегда 0). Если массив имеет нулевую длину, то High возвращает -1. Справедливо также следующее равенство: High=Length-1.
Сама переменная динамического массива является указателем на начало массива. Если место под массив еще не выделено, значение переменной равно nil.
Удалить из памяти динамический массив можно одним из следующих способов:
A:=nil; или Finalize(A); или SetLength(A, 0);
Пример создания приложения для работы с файлами.
Задание. Создать Windows-приложение, в котором имеется меню, представленное на рис.1. Путем выбора из меню открывается текстовый файл. Содержимое файла загружается в компонент Memo1. При выборе пункта меню «Сохранить» текст из компонента Memo1 должен сохраняться в файле. На форме разместить две кнопки: «Создать массив» и «Добавить». При нажатии на кнопку «Создать массив» в некоторый массив А записываются строки открытого файла. При нажатии на кнопку «Добавить» в компонент Memo добавляется последний элемент массива.
Рис. 1.
Для выполнения этого задания необходимо на форме разместить следующие компоненты:
Страница - компонент MainMenu
.
Страница - 2 компонента Button
.
Страница - компонент Memo .
Страница
- компонент OpenDialog
.
Страница - компонент SaveDialog
.
Один из возможных вариантов панели интерфейса создаваемого приложения показан на рис. 2.
Button1
Рис.2.
После установки компонента MainMenu на форму необходимо создать его опции. Для этого следует выбрать свойство Items в окне Инспектора объектов, после чего на экране появится конструктор меню. Для каждого пункта меню в окне Инспектора объектов в свойстве Caption необходимо указать заголовок: «Файл», «Выход», «Открыть», «Сохранить», «Текст» соответственно.
В самом начале работы во избежание ошибок ввода-вывода и доступа к памяти кнопки «Создать массив» и «Добавить» должны быть недоступны. Для этого необходимо в окне инспектора объектов установить свойства Enabled компонентов Button1 и Button2 в значение false. Кнопка «Создать массив» становится доступной после загрузки содержимого файла в компонент Memo1, а кнопка «Добавить» - после нажатия кнопки «Создать массив».
Для пунктов меню «Открыть-Текст», «Сохранить» и «Выход» необходимо создать методы - обработчики событий onClick.
procedure TForm1.MenuTextClick(Sender: TObject);
begin
if OpenDialog1.Execute then
if FileExists(OpenDialog1.FileName) then
begin
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
Button1.Enabled:=true;
end
else ShowMessage('Файл не найден');
end;
procedure TForm1.MenuQuitClick(Sender: TObject);
begin
close;
end;
procedure TForm1.MenuSaveClick(Sender: TObject);
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
Для компонента Button1 (кнопка «Создать массив») создадим метод - обработчик события onClick, в который поместим следующие операторы:
var f:textfile; s:string; i:integer;
begin
i:=0;
assignfile(f,Opendialog1.FileName); reset(f);
while not eof(f) do
begin
readln(f,s); setlength(a,i+1); a[i]:=s; inc(i);
end;
Button2.Enabled:=true;
end;
Для компонента Button2 (кнопка «Добавить») создадим метод - обработчик события onClick, текст которого выглядит следующим образом:
memo1.Lines.Add(a[high(a)]);
Динамический массив А, используемый в обоих методах – обработчиках, должен быть объявлен в разделе описания переменных следом за словом implementation.