Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3OOP_Dia.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
182 Кб
Скачать
☆

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;

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

Если в диалоге открытия файла 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;

…………………………..

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]