- •Методические указания к работам 7 и 8
- •5. Работа с файлами
- •6. Процедуры и функции
- •6.1. Пользовательские процедуры и функции
- •6.2. Процедура ShowMessage
- •6.3. Функция MessageDlg
- •6.4. Функция InputBox
- •7. Классы общего назначения
- •7.1 . Класс Exception обработка исключений
- •7.2 . Классы tStrings и tStringList – наборы строк и объектов
- •8. Динамически подключаемые библиотеки
- •8.1. Назначение
- •8.2. Структура библиотеки dll
- •8.3. Создание библиотеки dll
- •8.4. Подключение библиотеки dll к проекту
Методические указания к работам 7 и 8
5. Работа с файлами
В Delphi поддерживаются все операции с файлами создание, поиск, чтение и запись, переименование как файлов, так и каталогов. В Delphi существует несколько способов работы с файлами.
Пример 5.1. Разработать программу, которая позволяет увидеть и, в случае необходимости, изменить содержимое текстового файла.
На форму необходимо поместить компоненты: Memo1, две кнопки Button, кнопку ButBtn1 и OpenDialog1 из палитры Dialogs (рис. 17).
Рис. 17
В разделе Implementation необходимо описать файловую переменную и переменную типа String – имя файла.
Var f:Textfile; fname:String;
Procedure TForm1.Button1Click(Sender: TObject); // кнопка Открыть
Var buf: string; // буфер для чтения строк
Begin
If OpenDialog1.Execute then
Begin
Memo1.Clear;
fname:= OpenDialog1.FileName;
Assignfile(f,fname); //связываем файловую переменную f и файл с именем fname
Reset(f); //открытие файла для чтения
While Not Eof(f) do //пока не конец файла
Begin
Readln(f,buf); //прочитать строку из файла
Memo1.Lines.Add(buf); //добавить строку в поле Memo1
End;
Closefile(f);
End
Else
Begin
ShowMessage('Ошибка доступа к файлу'); Exit
End;
End;
Delphi диалоги выбора файла сами по себе ничего не делают, а только предоставляют настройки, сделанные пользователем при выборе файла. Самый важный метод Delphi диалогов Execute, который создает и показывает на экране диалоговое окно. Это окно является модальным, поэтому сразу после обращения к методу Execute дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно. Поскольку Execute – логическая функция, она возвращает значение True, если результат диалога с пользователем был успешным.
В результате выбора файла свойство FileName компонента OpenDialog получает значение полного имени выбранного файла, которое и используется в процедуре Assignfile.
В диалоговом окне Открыть приходится выбирать из всех файлов в нужном каталоге. Удобнее видеть только, например, текстовые файлы, или другой тип файлов по нашему выбору. Для этого используется свойство Filter компонента OpenDialog1. Это свойство можно установить с помощью специального редактора на этапе конструирования формы или программно. Для доступа к редактору достаточно щелкнуть на кнопке … в строке свойства Filter окна Инспектора объектов (рис. 18).
Рис. 18
В колонке FilterName записываются имена фильтров, в колонке Filter список масок файлов, разделённых точкой с запятой. Маска файла в данном случае выглядит как
*.расширение_файла
Звёздочка означает, что выбираются файлы с любыми именами, подходящие по расширению.
При программном вводе фильтры задаются одной длинной строкой, в которой символы вертикальной черты | служат для разделения фильтров, а также для отделения описания фильтруемых файлов от соответствующей маски выбора. Например, следующий оператор задает две маски для отбора файлов с расширениями txt и pas:
OpenDialog1.Filter:= 'Текстовые файлы | *.txt | Файлы Паскаля | *.pas';
Свойство InitialDir позволяет в момент открытия диалогового окна Открыть оказаться в нужной папке. Оно доступно как на этапе конструирования, так и программно:
OpenDialog1.InitialDir:= 'С:\Программирование';
Для сохранения содержимого компонента Memo1 после редактирования в том же файле надо записать следующую процедуру:
procedure TForm1.Button2Click(Sender: TObject); // Кнопка Сохранить
Var i:integer;
Begin
Rewrite(f); // открыть для перезаписи
For i:= 0 to Memo1.Lines.Count do //строки в поле Memo1 пронумерованы с нуля
Writeln(f,Memo1.Lines[i]);
Closefile(f); //закрытие файла
ShowMessage('Данные записаны в файл');
end;
Если мы хотим содержимое компонента Memo1 сохранить в файле с другим именем, то надо на форму добавить еще одну кнопку Button (Сохранить как) и компонент SaveDialog1 (палитра Dialogs). Обработчик события для кнопки Сохранить как можно записать так:
Procedure TForm1.Button3Click(Sender: TObject);
Var t:Textfile; newname:String; i:Integer;
Begin
If Savedialog1.Execute Then
Begin
newname:= Savedialog1.filename;
Assignfile(t,newname);
Rewrite(t);
For I := 0 to Memo1.Lines.Count do
Writeln(t,Memo1.Lines[i]);
Closefile(t);
End
Else
Begin
ShowMessage('Ошибка доступа к файлу'); Exit
End;
End;
Как было сказано выше, существуют и другие способы чтения информации из файла и записи информации в файл.
Пример 5.2. Разработать программу текстового редактора, позволяющего работать с файлами: создавать новые, сохранять, открывать имеющиеся в памяти компьютера; а также редактировать документы: вырезать, вставлять и копировать текстовые фрагменты (рис. 19).
На форму необходимо поместить компоненты Memo, Edit и MainMenu (палитра Standard). Компонент MainMenu имеет вид:
Рис. 19
Далее надо задать обработчик события на создание формы, в котором будет очищаться содержимое компонента Memo:
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Memo1.Clear;
End;
Для создания меню необходимо щелкнуть дважды на компоненте MainMenu на форме. В появившемся редакторе главного меню можно задать его пункты и обработчики событий по выбору (щелчок) одного из пунктов.
В строку главного меню (свойство Caption) надо внести следующие пункты Файл, Редактирование, О программе.
Пункты Файл и Редактирование должны содержать вложенное меню следующей структуры (табл. 17):
Таблица 17
Для того чтобы запроектировать обработчики события необходимо войти в редактор главного меню и выбрать пункт О программе и дважды щелкнуть на нем мышкой (или в окне Инспектора объектов выбрать событие OnClick). В окно редактора кода с заготовкой обработчика события можно внести следующий код:
ShowMessage('Program is redact only files with extentions *.txt')
Аналогично можно создать обработчики событий со следующими кодами (табл 18):
Таблица 18
Событие щелчка по пункту… |
Процедура обработчика |
Файл \ Новый |
Procedure TForm1.N4Click(Sender: TObject); begin AssignFile(f,'C:\newfile.txt'); Rewrite(f); Closefile(f); end; (Переменная f должна быть описана как TextFile) Эта команда создает пустой файл и дает возможность пользователю набрать нужный текст в поле Memo1 |
Файл \ Открыть |
Procedure TForm1.N5Click(Sender: TObject); Begin Memo1.Lines.LoadfromFile('C:\newfile.txt'); End; |
Файл \ Сохранить |
procedure TForm1.N6Click(Sender: TObject); Begin Memo1.Lines.SaveToFile('C:\newfile.txt'); End; |
Файл \ Сохранить как |
Procedure TForm1.N7Click(Sender: TObject); Var filename:String; Begin filename:=Edit1.Text; Memo1.Lines.SaveToFile(filename); End; |
Файл\Выход |
Procedure TForm1.N8Click(Sender: TObject); Begin Close; End; |
Редактирование \ Копировать |
Procedure TForm1.N9Click(Sender: TObject); Begin Memo1.CopyToClipboard; End; |
Редактирование \ Вырезать |
Procedure TForm1.N10Click(Sender: TObject); Begin Memo1.CutToClipboard; End; |
Редактирование \ Вставить |
Procedure TForm1.N11Click(Sender: TObject); Begin Memo1.PastefromClipboard; End; |
Редактирование \ Выделить все |
Procedure Tform1.N12Click(Sender: Tobject); Begin Memo1.Selectall; End; |
Компонент Edit1 нужен для ввода полного имени, под которым будет сохранен файл при использовании команды Сохранить как.
