Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum_po_informatike_2003_c_uvelichennym_og....doc
Скачиваний:
31
Добавлен:
12.11.2018
Размер:
5.3 Mб
Скачать

§ 15 Вывод информации на бумагу

Наряду с сохранением информации на магнитном диске, часто возникает необходимость вывода тех или иных данных на бумагу с использованием принтера. В Delphi для выполнения операций, связанных с печатью, используется специальный модуль Printers. Имя этого модуля следует включить в секцию uses приложения. Такая секция всегда существует и образуется при создании unit1 и включает модули Windows, Forms, Classes и др. В модуле Printers, в частности, определена процедура AssignPrn(f1), которая связывает текстовую файловую переменную f1 с текущим принтером системы и создаёт в памяти буфер вывода информации. В остальном вывод информации на принтер не отличается от вывода на жёсткий диск. Фрагмент программы печати имеет вид:

Var f1: TextFile;

Begin AssignPrn(f1);

Rewrite(f1);

Writeln(f1,<список вывода>);

CloseFile(f1)

End;

Описанная процедура мало отличается от процедуры распечатки данных средствами языка Турбо Паскаль и может быть использована для печати как единичных значений, так и массивов. Ниже приведен фрагмент программы распечатки массива данных, содержащихся в компоненте Memo .

Var f1: TextFile;

i : integer;

Begin AssignPrn(f1);

Rewrite(f1);

For i:=0 to Memo1.Lines.Count-1 do

Writeln(f1, Memo1.Lines[i]);

CloseFile(f1)

End;

Возможна также прямая распечатка данных, хранящихся на жёстком диске. В этом случае необходимо объявить одновременно две файловых переменных, одну для чтения информации, другую для вывода информации на принтер, и использовать их параллельно. Фрагмент программы прямой распечатки строковых данных приведен ниже.

var f1,f2: TextFile;

Name, X: String;

begin

AssignFile(f1,Name);

AssignPrn(f2);

Reset(f1);

Rewrite(f2);

while Not EOF(f1) do

begin

Readln(f1, X );

Writeln(f2, X)

end;

CloseFile(f1);

CloseFile(f2);

end;

§ 16 Особенности переноса информации между жёстким диском некоторыми компонентами Delphi

При работе с компонентами, использующими редактор String List Editor, упомянутый выше, имеется возможность копировать информацию непосредственно с жесткого диска и записывать её непосредственно на жёсткий диск. Это существенно облегчает использование, в частности, таких компонентов, как Memo, ListBox (список), ComboBox (выпадающий список). Например, считывание информации с внешнего устройства в поле ввода компонента Memo с использованием следующей команды: Memo1.Lines.LoadFromFile('C:\treug.dat'). Аналогично для сохранения информации может быть использована команда: Memo1.Lines.SaveToFile('C:\treug.dat').

Программа обработки введенной информации, очевидно, не зависит от способа ввода исходных данных.

Одной из наиболее распространённых ошибок, допускаемых пользователями при считывании информации с внешних устройств, является неверная запись имени файла исходных данных. Поэтому перед обращением к внешнему файлу целесообразно удостовериться в его наличии при помощи функции FileExists(«имя файла»:string):boolean. Если файл с указанным именем существует, функция возвращает значение «ИСТИНА», в противном случае – «ЛОЖЬ», а фрагмент программы считывания информации и проверки наличия вызываемого файла имеет вид:

if FileExists('C:\treug1.dat') then

begin

AssignFile(f,'C:\treug1.dat');

Reset(f);

i:=0;

repeat

i:=i+1;

for j:=1 to 2 do

begin

Readln(f,x[i,j]);

n:=i

end;

until EoF(f);

closefile(f)

end

else

begin

ShowMessage('Файл отсутствует');

exit

end;

Ещё одна функция, связанная с поиском ошибок в программе, предназначенная для их регистрации, IOResult, возвращающая результат, равный нулю при безошибочном вызове внешнего файла. В противном случае эта функция возвращает ненулевой результат. Вот как можно создать блок программы, предназначенный для контроля ошибочного ввода имени файла

Begin

Assign (f,'C:\treug1.dat');

{$I-} {Директива, отключающая автоматический контроль ошибок}

Reset (F);

m1:=

if IOResult;<>0 then

begin

ShowMessage ('Ошибка. Введите другое имя файла с исходными данными');

Exit

Else

{$I+}{Директива, включающая автоматический контроль ошибок}

…………………………

Вывод информации на внешнее устройство может производиться как в режиме перезаписи (запись нового файла поверх существующего или создание нового файла), так и в режиме добавления информации в существующий файл.

Здесь, также как и при считывании информации с внешнего устройства, необходимо связать файл с файловой переменной с использованием процедуры AssignFile, после чего открыть файл для вывода. Для того, чтобы открыть файл в режиме создания нового файла или замены существующего, следует вызвать процедуру Rewrite(f). Для того, чтобы открыть файл в режиме добавления новой информации к уже существующей, следует вызвать процедуру Append(f). Фраг­мент программы, открывающий уже имеющийся файл и добавляющий в него сообщение о результате расчёта площади многоугольника, имеет вид:

AssignFile(f,'C:\treug1.dat');

Append(f);

Write(f,'ПЛОЩАДЬ УЧАСТКА РАВНА ',Stot,' га');

CloseFile(f)

Как и в случае считывания информации, при добавлении данных возможны ошибки, связанные с неверным вводом имени файла. Для своевременного выявления и исправления таких ошибок, как и при считывании, можно использовать функции FileExists и IOResult.

Задание: Получить у преподавателя индивидуальную задачу и создать программу её решения, предусмотрев возможность ввода и вывода информации с использованием внешних устройств. В случае ошибки ввода программа должна предлагать пользователю произвести повторный ввод исходных данных.

Отчёт по данной работе должен включать перечень использованных визуальных компонентов, описание свойств компонентов, изменённых при создании формы или изменяемых в процессе выполнения программы, описание событий, изменяющих ход выполнения программы, описание использованных в программе констант и переменных (указать их типы и диапазоны изменения) и стандартных функций, распечатку процедуры обработки каждого из указанных событий.

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