- •3.1. Цель работы.
- •3.2. Задание на подготовку к лабораторной работе.
- •3.3. Порядок выполнения работы.
- •3.4. Варианты заданий и условия задач.
- •3.5. Вопросы для самопроверки.
- •Варианты заданий на разработку приложения с применением диалоговых компонентов.
- •3.6. Методические указания.
- •3.6.1 Общие сведения о работе с файлами в среде Delphi
- •3.6.2 Компонент Memo
- •3.6.3 Основные правила использования диалоговых компонентов
- •3.6.4 Диалоговые окна для работы с файлами.
- •3.6.4.1 Компонент OpenDialog
- •3.6.4.2 Компонент SaveDialog.
- •3.6.4.3 Компоненты tOpenPictureDialog и tSavePictureDialog
- •3.6.5 Пример использования диалогового компонента
- •3.6.6 Пример программирования операций с файлами с применением диалоговых панелей
3.6.5 Пример использования диалогового компонента
Р
Var F:
TextFile; S:
strings; begin if
OpenDIg.Execute then AssignFile(F, OpenDlg.FileName) else
Exit; Reset(F); while
not EOF(F) do begin Readln(F,
S); Memo.Lines.Add(S); end; CloseFile(F); end;
Если в диалоге открытия файла OpenDlg был выбран файл, то его имя связывается с файловой переменной f при помощи процедуры AssignFile. В качестве имени файла рекомендуется всегда передавать полное имя файла (включая путь). Как раз в таком виде возвращают результат выбора файла диалоги работы с файлами TOpenDialog, TOpenpictureDialog. Затем при помощи процедуры Reset этот файл открывается для чтения и записи.
В цикле осуществляется чтение из файла текстовых строк, и запись их в компонент TMemo. Процедура Readln осуществляет чтение текущей строки файла и переходит на следующую строку. Цикл выполняется, пока функция eof не сообщит о достижении конца файла. После завершения чтения файл закрывается.
Такой же код можно использовать и для записи данных в файл. Необходимо только заменить процедуру чтения процедурой записи.
3.6.6 Пример программирования операций с файлами с применением диалоговых панелей
Необходимо разработать фрагмент однооконной программы-редактора с использованием в качестве окна редактора компонента типа Tmemo с именем TextMmo.
В главном меню программы-редактора имеется пункт File, содержащий подпункты Open…, Save и SaveAs… с соответствующими именами OpenSel, SaveSel и SaveAsSel. Обработчики этих пунктов вызывают соответствующие компоненты-диалоги с именами OpenDlg и SaveDlg.
При открытии формы, признак модификации текста компонента Tmemo с именем TextMmo устанавливается в False:
TextMmo.Modified := False;
Фрагмент диаграммы состояний однооконного текстового редактора приведен на рис. 3.1. Как видно из диаграммы, для реализации фрагмента редактора необходимо, кроме обработчиков событий с именами OpenSelClick, SaveSelClick и SaveAsSelClick, реализовать также процедуры загрузки файла в компонент TextMmo (LoadFile) и сохранения файла на магнитный диск (saveFile), а также вспомогательную функцию формирования и обработки запроса на сохранение файла Querysave.
Соответствующие фрагменты программы имеют вид:
……………………..
procedure TForm1.loadFile(const filename : string);
begin
TextMmo.Lines.LoadFromfile(filename);
TextMmo.Modified := False;
fnewfile := False;
end;
……………………..
procedure TForm1.SaveFile(const filename : string);
begin
TextMmo.Lines.saveTofile(filename);
TextMmo.Modified := False;
fnewfile := False;
end;
……………………..
function TForm1.QuerySave : word;
begin
Result := messageDlg(‘Сохранить текст?’, mtConfirmation, mbYesNocancel, 0);
If Result = mrYes then SaveFile(ffilename);
end;
…………………………..
procedure TForm1.OpenSelClick(Sender : TObject);
Var
msgRes : word;
begin
if TextMmo.Modified then
begin
msgRes := QuerySave;
if msgRes = mrCancel then Exit;
end;
OpenDlg.Filter := ‘Все файлы | *.* |’ +
‘Текстовые файлы | *.TXT|’ +
‘INI-файлы | *.INI’;
OpenDlg.FilterIndex := 2;
If OpenDlg.Execute then
begin
fFileName := OpenDlg.FileName;
Caption := fFileName; // формы
LoadFile(fFileName);
end;
end;
…………………………..
procedure TForm1.SaveAsSelClick(Sender : TObject);
begin
SaveDlg.Filter := ‘Все файлы | *.* |’ +
‘Текстовые файлы | *.TXT|’ +
‘INI-файлы | *.INI’;
SaveDlg.FilterIndex := 2;
If SaveDlg.Execute then
begin
fFileName := SaveDlg.FileName;
Caption := fFileName; //формы
SaveFile(fFileName);
end;
end;
…………………………..
procedure TForm1.SaveSelClick(Sender : TObject);
begin
If fNewFile then SaveAsSelClick(Sender)
else SaveFile(fFileName);
end;
…………………………..
