Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.01.2013, 16:10
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
По умолчанию Убрать рамку из печати

Ребята код не мой только под себя подточил.
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;
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025