Как определить, выходит ли отчет за границы печати

отредактировано 22:17 Раздел: FastReport 4.0
Надеюсь грамотно задал вопрос...
Т.е. часто бывает, что в превью видно элементы, а реально не печатаются, понятно, из-за физических возможностей принтера...
Как отслеживать этот момент, может есть какая стандартная функция,
Или надо запрашивать информацию о принтере и вычислять?

Комментарии

  • отредактировано 22:17
    Использовать стандартные типы бумаги для данного принтера, либо "запрашивать информацию о принтере и вычислять".
  • отредактировано 22:17
    ай да ответ! в лучших традициях "кнопка hold - ваш лучший друг".
    нет чтобы вывести пунктиром непечатную физическую границу для пары данный принтер/данная бумага - там пару строк кода.
    да ну, зачем - проблемы пользователей - это проблемы пользователей.

  • отредактировано 22:17
    А что вам мешает выбрать в дизайнере принтер и использовать доступные размеры для этого принтера ?
  • отредактировано 22:17
    мне мешает неизвестность модели принтера у пользователя. а вам что мешает?
  • отредактировано June 2010
    vixen написал: »
    мне мешает неизвестность модели принтера у пользователя. а вам что мешает?

    Это как раз не должно мешать...
    Т.е. метод должен быть универсальным...
    Меня интересует алгоритм...
    По поводу выбора принтера и пунктирной границы... печать идет мимо дизайнера, кнопку нажал и идет печать на принтер по-умолчанию, а при выходе за границы - предупреждение, как в Word
  • отредактировано June 2010
    Для проверки перед печатью, можно сделать так:
    uses ..., frxPrinter, WinSpool;
    
    ...
    ...
    
    procedure OnProgressStart(Sender: TfrxReport;
      ProgressType: TfrxProgressType; Progress: Integer);
    var
      MaxExtent: Cardinal;
      PaperHeight, PaperWidth: Integer;
    begin
      if ProgressType = ptPrinting then
      begin
        MaxExtent := DeviceCapabilities(PChar(frxPrinters.Printer.Name), PChar(frxPrinters.Printer.Port), DC_MAXEXTENT, 0, 0);
        PaperHeight := MaxExtent shr 16;
        PaperWidth := SmallInt(MaxExtent);
        if (TfrxReportPage(frxReport.Pages[1]).PaperWidth * 10 > PaperWidth) or
          (TfrxReportPage(frxReport.Pages[1]).PaperHeight * 10 > PaperHeight) then
        begin
            frxReport.Terminated := True;
            ShowMessage('Отчет выходит за границы печати');
        end;
      end;
    end;
    
  • отредактировано 22:17
    спасибо попробую!

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.