![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 27.12.2011
Сообщений: 2
|
![]()
Программа «Диспетчер печати» позволяет пользователю распечатывать документы компьютером в фоновом режиме сразу либо в указанное пользователем время. В программе также имеется возможность задавать параметры печати:
1. Все страницы для печати; Выбор страниц для печати; Номер страниц для печати; 2. Печатать в файл; Печатать по диапазону страниц; Печать выбранных страниц; Предупреждение, если плохой принтер. |
![]() |
![]() |
![]() |
#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; На этом пока все. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
курсовая по формальным языкам на делфи | 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 |