Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2011, 03:26   #1
Тори
Новичок
Джуниор
 
Регистрация: 27.12.2011
Сообщений: 2
По умолчанию Курсовая по Диспетчер печати в Делфи 7

Программа «Диспетчер печати» позволяет пользователю распечатывать документы компьютером в фоновом режиме сразу либо в указанное пользователем время. В программе также имеется возможность задавать параметры печати:
1. Все страницы для печати; Выбор страниц для печати; Номер страниц для печати;
2. Печатать в файл; Печатать по диапазону страниц; Печать выбранных страниц; Предупреждение, если плохой принтер.
Тори вне форума Ответить с цитированием
Старый 27.12.2011, 03:50   #2
Тори
Новичок
Джуниор
 
Регистрация: 27.12.2011
Сообщений: 2
По умолчанию

TPrinter

Для упрощенного доступа к принтеру Delphi имеет стандартный объектTPrinter который находится в модуле Printers, в этом же модуле имеется функция Printer:
function Printer: TPrinter;
begin
if FPrinter = nil then FPrinter := TPrinter.Create;
Result := FPrinter;
end;

Как видно из листинга она проверяет был ли создан экземпляр объекта FPrinter:TPrinter, если нет, то создает и возвращает ссылку на него, что избавляет разработчика от необходимости создавать объект самому.

Вот основные методы и свойства объекта TPtinter.


Простейший пример печати:
procedure TForm1.Button1Click(Sender: TObject);
begin
Printer.BeginDoc;
Printer.Canvas.TextOut(200,200,'Del phi is cool');
Printer.EndDoc;
end;
Настройки принтера

Теперь имея все эти данные мы можем распечатать документ с учетом полей и размеров шрифта.

И так поля практически у любого принтера имеется непечатаемая область (границы печати) и при установке полей печати документа необходимо учитывать эту непечатаемую область. Вот процедура вычисления границ печати:
var
PixPerInchX,PixPerInchY,PageWidthIn MM,PageHeightInMM,PhysOffsetX,PhysO ffsetY,
PageResX,PageResY,PhysPageWidth,Phy sPageHeigth:integer;
Margins:TRect;

procedure GetPrinterInfo;
var
DC:HDC;
begin
DC:=Printer.Handle;
PixPerInchX:=GetDeviceCaps(DC,LOGPI XELSX);
PixPerInchY:=GetDeviceCaps(DC,LOGPI XELSY);
PageWidthInMM:=GetDeviceCaps(DC,HOR ZSIZE);
PageHeightInMM:=GetDeviceCaps(DC,VE RTSIZE);

PhysOffsetX:=GetDeviceCaps(DC,PHYSI CALOFFSETX);
PhysOffsetY:=GetDeviceCaps(DC,PHYSI CALOFFSETY);

PhysPageWidth:=GetDeviceCaps(DC,PHY SICALWIDTH);
PhysPageHeigth:=GetDeviceCaps(DC,PH YSICALHEIGHT);

PageResX:=GetDeviceCaps(DC,HORZRES) ;
PageResY:=GetDeviceCaps(DC,VERTRES) ;

// границы печати
Margins.Top:=round(PhysOffsetY/PixPerInchY*25.4);
Margins.Left:=round(PhysOffsetX/PixPerInchX*25.4);

Margins.Bottom:=round((PhysPageHeig th-PageResY-PhysOffsetY)/PixPerInchY*25.4);
Margins.Right:=round((PhysPageWidth-PageResX-PhysOffsetX)/PixPerInchX*25.4);
end;

Теперь попробуем распечатать лист на котором будет рамка по периметру с отступами один сантиметр слева, справа и сверху и 1.5 см снизу.
procedure PrintMargins;
begin
GetPrinterInfo;

Printer.BeginDoc;
Printer.Canvas.MoveTo(MilimetersToP ixelsX(10-Margins.Left),
MilimetersToPixelsY(10-Margins.Top));
Printer.Canvas.LineTo(MilimetersToP ixelsX(10-Margins.Left),
MilimetersToPixelsY(PageHeightInMM-15+Margins.Bottom));
Printer.Canvas.LineTo(MilimetersToP ixelsX(PageWidthInMM-10+Margins.Right),
MilimetersToPixelsY(PageHeightInMM-15+Margins.Bottom));
Printer.Canvas.LineTo(MilimetersToP ixelsX(PageWidthInMM-10+Margins.Right),
MilimetersToPixelsY(10-Margins.Top));
Printer.Canvas.LineTo(MilimetersToP ixelsX(10-Margins.Left),
MilimetersToPixelsY(10-Margins.Top));
Printer.EndDoc;
end;

А вот код процедуры печати текста обрамленного прямоугольником:
procedure TForm1.Button1Click(Sender: TObject);
var
TextWidthMM:integer;
TextHeightMM:integer;
begin
GetPrinterInfo;

Printer.BeginDoc;

Printer.Canvas.Font.PixelsPerInch:= PixPerInchX;

TextWidthMM:=round((Printer.Canvas. TextWidth('Печать')/PixPerInchX)*25.4);
TextHeightMM:=round((Printer.Canvas .TextHeight('Печать')/PixPerInchY)*25.4);

Printer.Canvas.Rectangle(Milimeters ToPixelsX(19),MilimetersToPixelsY(1 9),
MilimetersToPixelsX(19+TextWidthMM+ 2),
MilimetersToPixelsY(19+TextHeightMM +2));
Printer.Canvas.TextOut(MilimetersTo PixelsX(20),MilimetersToPixelsY(20) ,'Печать');
Printer.EndDoc;
end;

На этом пока все.
Тори вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
курсовая по формальным языкам на делфи Hevadimka Фриланс 0 23.12.2011 17:44
курсовая по формальным языкам на делфи Hevadimka Фриланс 0 16.12.2011 20:38
диспетчер сообщений Nitrino Общие вопросы C/C++ 4 22.12.2009 18:00
курсовая по делфи doodlezD Помощь студентам 17 09.06.2009 11:21