Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод. указания СВП_1ч(2006).doc
Скачиваний:
18
Добавлен:
26.11.2019
Размер:
700.93 Кб
Скачать

Переменные TextFileName и GraphFileName указывает путь к файлу.

При сохранении содержимого файла действия аналогичны действиям при открытии:

ListBox1.Items.SaveToFile(TextFileName);

Image1.Picture SaveToFile(GraphFileName);

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

  1. OpenDialog - реализует стандартное диалоговое окно “Открыть файл”.

  2. SaveDialog - реализует стандартное диалоговое окно “Сохранить файл”.

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

  4. 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.

Для выполнения этого задания необходимо на форме разместить следующие компоненты:

  1. Страница - компонент MainMenu .

  2. Страница - 2 компонента Button .

  3. Страница - компонент Memo .

  4. Страница - компонент OpenDialog .

  5. Страница - компонент 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.