![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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);Последний раз редактировалось M.A.D.M.A.N., 26.01.2013 в 19:16. |
|
#5
|
||||
|
||||
|
Цитата:
печатает пустую страницу ![]() |
|
#6
|
|||
|
|||
|
Цитата:
Никакой печати рамки в этом коде нет. Если ты имеешь в виду белую рамку по краям страницы, то это значит, скорее всего, что твой принтер не поддерживает безрамочную печать (не может печатать по всей физической ширине/длинне страницы). Посмотри приложенный код, может разберешься... |
|
#7
|
||||
|
||||
|
ребята вот распечатал в виртуальный принтер все тоже самое...
скрин-> http://www.vizit-kanc.com.ua/ewr.png |
|
#8
|
||||
|
||||
|
Попробуй свойства принтера задать.
|
|
#9
|
||||
|
||||
|
Цитата:
|
|
#10
|
||||
|
||||
|
Панель управления/принтеры/принтер.сворйства/бумага/качество
|
| Этот пользователь сказал Спасибо 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); |