Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Копирование с канвы контрола на канву принтера

20K
06 декабря 2007 года
yager84
37 / / 15.05.2007
Привет всем.

Может сталкивался кто с такой проблемой, суть которой в том, что код:

Код:
procedure TReport.PrintReport(pFlag: PPrintPreview);
var
  i:integer;
  SRect: TRect;
  RatioX, RatioY: integer;
  LogPixRX, LogPixRY, LogPixPrintX, LogPixPrintY: integer;
begin
  LogPixRX:=GetDeviceCaps(FReportPages.Items[0].Canvas.Handle, LOGPIXELSX);
  LogPixRY:=GetDeviceCaps(FReportPages.Items[0].Canvas.Handle, LOGPIXELSY);
  LogPixPrintX:=GetDeviceCaps(Printer.Handle, LOGPIXELSX);
  LogPixPrintY:=GetDeviceCaps(Printer.Handle, LOGPIXELSY);
  RatioX:=LogPixPrintX div LogPixRX;
  RatioY:=LogPixPrintY div LogPixRY;
  if Printer.Aborted= False then
    Printer.BeginDoc;
  for i:=0 to FReportPages.Count - 1 do
  begin
    SetMapMode(FReportPages.Items.Canvas.Handle, MM_ISOTROPIC);
    SetWindowExtEx(FReportPages.Items.Canvas.Handle, RatioX, RatioY, nil);
    SetViewPortExtEx(FReportPages.Items.Canvas.Handle, 1, 1, nil);
    SRect:= Rect(0, 0, FReportPages.Items.Width * RatioX, FReportPages.Items.Height * RatioY);
    Printer.Canvas.CopyRect(SRect, FReportPages.Items.Canvas, SRect);
    if (i < FReportPages.Count - 1) and (Printer.Aborted = False) then
      Printer.NewPage;
  end;
  if Printer.Aborted = False then
    Printer.EndDoc;
end;


"ведет" себя по разному в зависимости от модели принтера.

Тестировал дома на принтере hp laserjet 1100. Код копировал канву страницы FReportPages.Items.Canvas на канву принтера вполне корректно. Смущало только то, что при выводе происходило смещение влево и вниз на 0,5 - 1 см.

На работе протестировал на принтерах Xerox DocuPrint 255 и Samsung ML-1615.
В первом случае - чистый лист.
Во втором - принтер вывел ошибку
 
Код:
INTERNAL ERROR - FALSE
POSITION: 0x416573 (4285811)
SYSTEM: H6FWSIM/x1_image
LINE: 605


Судя по ошибке (если я правильно понимаю) - копирование канвы страницы FReportPages.Items.Canvas происходит со сдвигом и вне канвы принтера.
Подскажите, пожалуйста, в чем дело... и, если можно, как лечить.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог