Форум по 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;
  #2  
Старый 26.01.2013, 18:18
my33oh my33oh вне форума
Новичок
 
Регистрация: 17.12.2012
Сообщения: 93
Репутация: -579
По умолчанию

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

Цитата:
Сообщение от my33oh
какая рамка, кто рисует?
если надо напечатать фотку на А4 без полей, то это вопрос к твоему принтеру,может ли он так

На форуме и спрашиваю от куда рамка берется и пишу что код не мой, может в коде рамка вписана - я нуб в работе с принтером для меня это дело новое и не освоенное вот и спрашиваю умных людей и ожидаю от них умного ответа.
  #4  
Старый 26.01.2013, 19:14
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
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  
Старый 26.01.2013, 20:45
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Код:
RR := Rect(0, 0, x1 * ScaleX , y2 * ScaleY);
      Canvas.StretchDraw(RR, Image2.Picture.Graphic);
попробуй посмотреть как без этого печатается.

печатает пустую страницу
  #6  
Старый 26.01.2013, 22:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Paskal
печатает пустую страницу

Никакой печати рамки в этом коде нет.
Если ты имеешь в виду белую рамку по краям страницы, то это значит, скорее всего, что твой принтер не поддерживает безрамочную печать (не может печатать по всей физической ширине/длинне страницы).

Посмотри приложенный код, может разберешься...
Вложения
Тип файла: zip print_image.zip (6.1 Кбайт, 9 просмотров)
  #7  
Старый 27.01.2013, 09:38
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
По умолчанию

ребята вот распечатал в виртуальный принтер все тоже самое...
скрин->
http://www.vizit-kanc.com.ua/ewr.png
  #8  
Старый 27.01.2013, 09:58
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Попробуй свойства принтера задать.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #9  
Старый 27.01.2013, 09:59
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Попробуй свойства принтера задать.
По конкретней// и какие свойства - отступы и страницу?
  #10  
Старый 27.01.2013, 10:02
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Панель управления/принтеры/принтер.сворйства/бумага/качество
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Paskal (27.01.2013)
  #11  
Старый 27.01.2013, 10:11
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Панель управления/принтеры/принтер.сворйства/бумага/качество

зашел в качество изменил на trans... не помогло.
ps.
Я побывал на разных принтерах все тоже самое
  #12  
Старый 27.01.2013, 10:55
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
По умолчанию

Методом тыка дотыкался Не закончил но понял что это
Эта рамка рисует форму печати то есть типа границы печати.
Ну у меня теперь вопрос как изменить canvas.cliprect на всю страницу? Как задать ему параметры
  #13  
Старый 27.01.2013, 11:39
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
По умолчанию

помогите выставить область печати на странице

Код:
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  
Старый 27.01.2013, 19:10
Аватар для Paskal
Paskal Paskal вне форума
Новичок
 
Регистрация: 28.09.2010
Сообщения: 93
Репутация: 12
По умолчанию

Спасибо проблему решил сам

изменил
Код:
CR := Rect(-50,-50, PageWidth + 50 , PageHeight + 50);
Тема закрыта
Закрытая тема


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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