![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Ребята код не мой только под себя подточил.
1 Проблема такая: На выходе рисует рамку вокруг изображения. 2 Помогите с масштабом чтоб без всяких отступов вместить изображение в страницу. Печатаю изображение с форматом *.jpg (размеры 2480x3506) на А4 ориентация книжная. Много плюсов тому кто отзовется. и большой поклон всем ГУРУ мой код: Код:
procedure TForm3.sBitBtn1Click(Sender: TObject); var ScaleX, ScaleY: Integer; RR: TRect; PrintersInfo, TmpPrintersInfo: PPrinterInfo1; pcbNeeded, pcReturned, jpcbNeeded, jpcReturned: DWORD; I, J: Integer; papermmx, papermmy: Extended; x1, y2:Integer; hPrinter: THandle; JobInfo, TmpJobInfo: PJobInfo3; begin with Printer do begin if {sComboBox1.ItemIndex = -1} 1=2then begin beep; ShowMessage('Нет принтеров для печати! Либо ваши принтеры установлены как виртуальные.'); end else begin Printer.PrinterIndex:=sComboBox1.ItemIndex; Printer.PrinterIndex:=2; //для теста BeginDoc; // The StartDoc function starts a print job. try papermmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX); papermmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY); x1:= Round(papermmx); y2:= Round(papermmy); ScaleX := GetDeviceCaps(Handle, logPixelsX) div 1 ; // ScaleY := GetDeviceCaps(Handle, logPixelsY) div 1 ; // // Retrieves information about the Pixels per Inch of the Printer. RR := Rect(0, 0, x1 * ScaleX , y2 * ScaleY); Canvas.StretchDraw(RR, Image2.Picture.Graphic); // Stretch to fit finally EndDoc; end; end; end; sleep(5000); if Printer.Printing = false then begin //очистка очереди печати EnumPrinters(PRINTER_ENUM_LOCAL, nil, 1, PrintersInfo, 0, pcbNeeded, pcReturned); if GetLastError = ERROR_INSUFFICIENT_BUFFER then begin GetMem(PrintersInfo, pcbNeeded); try if EnumPrinters(PRINTER_ENUM_LOCAL, nil, 1, PrintersInfo, pcbNeeded, pcbNeeded, pcReturned) then begin TmpPrintersInfo := PrintersInfo; for I := 0 to pcReturned - 1 do begin if OpenPrinter(TmpPrintersInfo^.pName, hPrinter, nil) then begin EnumJobs(hPrinter, 0, 100, 1, nil, 0, jpcbNeeded, jpcReturned); if GetLastError in [NO_ERROR, ERROR_INSUFFICIENT_BUFFER] then begin GetMem(JobInfo, jpcbNeeded); try if EnumJobs(hPrinter, 0, 100, 3, JobInfo, jpcbNeeded, jpcbNeeded, jpcReturned) then begin TmpJobInfo := JobInfo; for J := 0 to jpcReturned - 1 do begin if not SetJob(hPrinter, TmpJobInfo^.JobId, 0, nil, JOB_CONTROL_DELETE) then RaiseLastOSError; Inc(TmpJobInfo); end; end else RaiseLastOSError; finally FreeMem(JobInfo); end; end else RaiseLastOSError; end else RaiseLastOSError; Inc(TmpPrintersInfo); end; end else RaiseLastOSError; finally FreeMem(PrintersInfo); end; end else RaiseLastOSError; end else begin Showmessage('Печать идет'); end; end; |
#2
|
|||
|
|||
![]() какая рамка, кто рисует?
если надо напечатать фотку на А4 без полей, то это вопрос к твоему принтеру,может ли он так ![]() |
#3
|
||||
|
||||
![]() Цитата:
На форуме и спрашиваю от куда рамка берется и пишу что код не мой, может в коде рамка вписана - я нуб в работе с принтером для меня это дело новое и не освоенное вот и спрашиваю умных людей и ожидаю от них умного ответа. |
#4
|
||||
|
||||
![]() Код:
RR := Rect(0, 0, x1 * ScaleX , y2 * ScaleY); Canvas.StretchDraw(RR, Image2.Picture.Graphic); — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 26.01.2013 в 19:16. |
#5
|
||||
|
||||
![]() Цитата:
печатает пустую страницу ![]() |
#6
|
|||
|
|||
![]() Цитата:
Никакой печати рамки в этом коде нет. Если ты имеешь в виду белую рамку по краям страницы, то это значит, скорее всего, что твой принтер не поддерживает безрамочную печать (не может печатать по всей физической ширине/длинне страницы). Посмотри приложенный код, может разберешься... |
#7
|
||||
|
||||
![]() ребята вот распечатал в виртуальный принтер все тоже самое...
скрин-> http://www.vizit-kanc.com.ua/ewr.png |
#8
|
||||
|
||||
![]() Попробуй свойства принтера задать.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#9
|
||||
|
||||
![]() Цитата:
|
#10
|
||||
|
||||
![]() Панель управления/принтеры/принтер.сворйства/бумага/качество
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Paskal (27.01.2013)
|
#11
|
||||
|
||||
![]() Цитата:
зашел в качество изменил на trans... не помогло. ps. ![]() Я побывал на разных принтерах все тоже самое |
#12
|
||||
|
||||
![]() Методом тыка дотыкался
![]() Эта рамка рисует форму печати то есть типа границы печати. Ну у меня теперь вопрос как изменить canvas.cliprect на всю страницу? Как задать ему параметры |
#13
|
||||
|
||||
![]() помогите выставить область печати на странице
Код:
BeginDoc; // The StartDoc function starts a print job. try papermmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX); papermmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY); x1:= Round(papermmx); y2:= Round(papermmy); ScaleX := GetDeviceCaps(Handle, logPixelsX) div 1 ; // ScaleY := GetDeviceCaps(Handle, logPixelsY) div 1; // CR:=(0,0, x1 * ScaleX , y2 * ScaleY); canvas.stretchdraw({canvas.cliprect} CR, image2.picture.graphic); //Canvas.StretchDraw(RR, Image2.Picture.Graphic); // Stretch to fit finally EndDoc; end; Меняю CR:=(0,0, x1 * ScaleX , y2 * ScaleY); пробовал в canvas.cliprect.left:=100; ![]() не получается съезжает картинка |
#14
|
||||
|
||||
![]() Спасибо проблему решил сам
изменил Код:
CR := Rect(-50,-50, PageWidth + 50 , PageHeight + 50); |