- •Содержание
- •Лабораторная работа №13 Изучение среды разработчика
- •Лабораторная работа № 14 События в Delphi
- •Лабораторная работа №15 Примеры создания модулей
- •Лабораторная работа №16 Примеры использования компонентов Label, Edit, Memo
- •Лабораторная работа №17 Примеры использования командных кнопок
- •Лабораторная работа№18 Изучение методов и свойств
- •Лабораторная работа№19 Пример использования компонентов RadioGroup и CheckListBox, Radiobutton, CheckBox.
- •Лабораторная работа№20 Примеры использования компонентов ListBox и ComboBox.
- •Лабораторная работа№21 Примеры использования компонента StringGrid.
- •Лабораторная работа №22 Отладка программ
- •Лабораторная работа№23 Примеры использования компонентов Image, Shape, Timer.
- •Лабораторная работа №24 Работа с формами
- •Лабораторная работа№25 Примеры использования компонента MainMenu и PopupMenu.
- •Лабораторная работа№26 Примеры использования компонентов OpenDialog, SaveDialog и FontDialog.
- •Лабораторная работа№27 Создание мультимедийных приложений.
- •Лабораторная работа№28 Печать текстовая и графическая.
- •Лабораторная работа№29 Работа с базами данных
- •Регистрация базы данных – создание псевдонима
- •Создание программы в Delphi
- •Лабораторная работа№30 Сортировка и фильтрация данных
- •Лабораторная работа№31 Вычисляемые поля. Перенос полей на форму
Лабораторная работа№28 Печать текстовая и графическая.
Цель занятия: научиться выводить на печать созданные в Delphi приложения.
Студент должен
знать:
способы вывода информации на печать из программы, созданной в Delphi;
уметь:
выводить документ в текстовом режиме принтера;
выводить графику с помощью объекта TPrinter;
печатать содержимое формы.
Примеры и задания.
Рассмотрите приведенный ниже пример, письменно поясните процедуры, расставьте комментарии к командам
Пример.
Напишите программу, используя которую можно подготовить и распечатать накладную. Рекомендуемый вид формы программы приведен на рисунке.
Var
Form1:Tform;
Implementation
{ $R*.dfm}
Uses Printers;
Procedure Tform1.FormCreate (Sender: Tobject);
Var
I: Integer;
begin
With StringGrid do
Begin
Cells[0,0]:= '№';
Cells[1,0]:= 'Наименование ';
Cells[2,0]:= 'цена';
Cells[3,0]:= 'К - во';
Cells[4,0]:= 'Сумма';
For I:= 1 to 10 do
Cells[0,i ]:=' ' + IntToStr (i);
End;
End;
Procedure Tform1.Button2Click (Sender: Object );
Const
Left_Margin = 2;
Top_Margin = 2;
Var
Dpix, dpiy : integer;
Kx, ky: real;
p: array [0 .. 4] of integer; x1, y1, x2, y2: integer;
px, py: integer;
I, j: integer;
begin
dpix: = GetDeviceCaps(Printer.Handle,LogPixelsx);
dpiy: = GetDeviceCaps(Printer.Handle,LogPixelsy);
kx: = dpix/Screen.PixelsPerInch;
ky: = dpiy/Screen.PixelsPerInch;
px: = Round(Left_Margin /2.54 * dpix );
py: = Round(Top_Margin /2.54 * dpiy ;
p [0] : = px;
For i := 1 to 4 do
Begin
P[i]:= p [i-1] + Round (StringGrid1.Colwidths[ i - 1 ] * kx;
End;
With Printer do
Begin
BeginDoc;
Canvas. Font. Name := Edit1.Font.Name;
Canvas. Font.Size := Edit1.Font.Size;
Canvas. TextOut (px, py, Edit1.Text );
py:= py + Round (Edit1.Font.Size*2*ky );
x1:= px; y1 := py;
Canvas. Font. Name := StringGrid1.Font.Name;
Canvas. Font.Size := StringGrid1.Font.Size;
X2:= p [4] + Round(StringGrid1.ColWidths[4] * kx);
Y2:= py + Round (StringGrid1.RowCount * StringGrid1.RowHeights [1] * ky ) ;
For j:= 0 to StringGrid1.RowCount do
Begin
for i := 0 to StringGrid1.ColCount do
begin
Canvas. TextOut [p [i], py, StringGrid1.Cells[i,j];
Canvas.MoveTo (p[0], py );
Canvas.LineTo (x2, py);
End;
Py:= py + Round (StringGrid1.RowHeights [j] * ky);
End;
for i:= 0 to StringGrid1.Colcount - 1 do
begin
Canvas.MoveTo(p[i],y1);
Canvas.LineTo(p[i],y2);
End;
Canvas.MoveTo(x2,y1);
Canvas.LineTo(x2,y2);
EndDoc;
End;
End;
End.
Контрольные вопросы:
Какие вы знаете способы вывода информации на печать из программы, созданной в Delphi?
Как выводить документ в текстовом режиме принтера?
Как выводить графику с помощью объекта TPrinter?
Как распечатать содержимое формы?
Лабораторная работа№29 Работа с базами данных
Цель работы: научиться создавать приложения, работающие с базами данных
Студент должен
знать:
компоненты для доступа к источникам данных
классы предназначенные для работы с данными
компоненты управления данными
события, инициируемые при работе с базами данных
уметь:
работать с базой данных.
Работа с базами данных
Прежде чем приступать к разработке приложения, работающего с базами данных, необходимо выполнить ряд подготовительных работ, а именно, продумать структуру будущей базы данных, состав таблиц, форматы полей, определить необходимые индексы, для связи таблиц базы, а также зарегистрировать базу данных в программе BDE (Borland Database Engine) для последующего переноса на ПК.
Создание базы данных.
База данных обычно состоит из ряда таблиц (файлов) и индексов, предназначенных для связи таблиц между собой. В программой среде Delphi возможно использовать как локальные (настольные), так и серверные (сетевые базы данных). Для простоты и наглядности использования будем рассматривать настольные базы данных. Основным стандартом настольных БД в Delphi является формат Paradox.
Основные файлы базы данных Paradox (файлы с указанными расширениями):
DB – таблица с данными;
MB – BLOB поля (это поле типа MEMO);
PX – главный ключ таблицы;
XG и YG – вторичные ключи таблицы.
Основные форматы полей таблицы PARADOX:
Alpha |
строка длиной 1-255 байт, содержащая любые печатаемые символы |
Number |
числовое поле длиной 8 байт, значение которого может быть положительным и отрицательным. Диапазон чисел - от 10-308 до 10308 с 15 значащими цифрами |
$ (Money) |
числовое поле, значение которого может быть положительным и отрицательным. По умолчанию, является форматированным для отображения десятичной точки и денежного знака |
Short |
числовое поле длиной 2 байта, которое может содержать только целые числа в диапазоне от -32768 до 32767 |
Long Integer |
числовое поле длиной 4 байта, которое может содержать целые числа в диапазоне от -2147483648 до 2147483648 |
# (BCD) |
числовое поле, содержащее данные в формате BCD (Binary Coded Decimal). Скорость вычислений немного меньше, чем в других числовых форматах, однако точность - гораздо выше. Может иметь 0-32 цифр после десятичной точки |
Date |
поле даты длиной 4 байта, которое может содержать дату от 1 января 9999 г. до нашей эры - до 31 декабря 9999 г. нашей эры. Корректно обрабатывает високосные года и имеет встроенный механизм проверки правильности даты |
Time |
поле времени длиной 4 байта, содержит время в миллисекундах от полуночи и ограничено 24 часами |
@ (Timestamp) |
обобщенное поле даты длиной 8 байт - содержит и дату и время |
Memo |
поле для хранения символов, суммарная длина которых более 255 байт. Может иметь любую длину. При этом размер, указываемый при создании таблицы, означает количество символов, сохраняемых в таблице (1-240) - остальные символы сохраняются в отдельном файле с расширением .MB |
Formatted Memo |
поле, аналогичное Memo, с добавлением возможности задавать шрифт текста. Также может иметь любую длину. При этом размер, указываемый при создании таблицы, означает количество символов, сохраняемых в таблице (0-240) - остальные символы сохраняются в отдельном файле с расширением .MB. Однако, Delphi в стандартной поставке не обладает возможностью работать с полями типа Formatted Memo |
Graphic |
поле, содержащее графическую информацию. Может иметь любую длину. Смысл размера - такой же, как и в Formatted Memo. Database Desktop “умеет” создавать поля типа Graphic, однако наполнять их можно только в приложении |
OLE |
поле, содержащее OLE-данные (Object Linking and Embedding) - образы, звук, видео, документы - которые для своей обработки вызывают создавшее их приложение. Может иметь любую длину. Смысл размера - такой же, как и в Formatted Memo. Database Desktop “умеет” создавать поля типа OLE, однако наполнять их можно только в приложении. Delphi “напрямую” не умеет работать с OLE-полями, но это легко обходится путем использования потоков |
Logical |
поле длиной 1 байт, которое может содержать только два значения - T (true, истина) или F (false, ложь). Допускаются строчные и прописные буквы |
+ (Autoincrement) |
поле длиной 4 байта, содержащее нередактируемое (read-only) значение типа long integer. Значение этого поля автоматически увеличивается (начиная с 1) с шагом 1 - это очень удобно для создания уникального идентификатора записи (физический номер записи не может служить ее идентификатором, поскольку в Парадоксе таковой отсутствует. В InterBase также отсутствуют физические номера записей, но отсутствует и поле Autoincrement. Его с успехом заменяет встроенная функция Gen_id, которую удобней всего применять в триггерах) |
Binary |
поле, содержащее любую двоичную информацию. Может иметь любую длину. При этом размер, указываемый при создании таблицы, означает количество символов, сохраняемых в таблице (0-240) - остальные символы сохраняются в отдельном файле с расширением .MB. Это полнейший аналог поля BLOb в InterBase |
Bytes |
строка цифр длиной 1-255 байт, содержащая любые данные |
Пример:
Рассмотрим создание базы данных на примере телефонного справочника производственного отдела завода, который будет состоять всего из одной таблицы telef.db, состав полей следующий:
family – фамилия абонента;
fio – имя и отчество абонента;
tel – телефон абонента
org_short – сокращенное название отдела
Dolg – должность
Prim - примечания
Создание таблицы базы данных с помощью программы Database Desktop
Для этого из меню ПУСК-ПРОГРАММЫ-BORLAND DELPHI выбираем пункт Tools, Databese Desktop в результате загрузится нужная программа.
Выбираем пункт меню
далее нажимаем ОК.
В другом окне заполняем структуру таблицы как показано на рисунке. Тип полей можно выбрать нажатием правой кнопки мыши, для текстовых полей надо задать их размер. Все названия необходимо писать в латинской раскладке клавиатуры, русские буквы не допускаются.
Для сохранения используйте кнопку SAVE.
Даем название таблицы и сохраняем в папку, где будет создаваться программа. Например, назовем таблицы telef.db и сохраним в папку C:\temp\88888.
После этого DataBase Desktop можно закрыть.
Заполнять таблицу не будем, это можно сделать с помощь разработанной программы.
На этом этапе создание базы данных заканчивается.