Ошибка при печати в HTMLView

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ошибка при печати в HTMLView

Сообщение java73 » 27.05.2015 12:58:43

Добрый день
Использую HTMLView компонент для вывода сгенерированного текста.
Для печати в документации нашел метод print, openprint, closeprint.
Использую так:
Код: Выделить всё
var
  I,j: Integer;
begin
  PrintDialog.Copies:=1;
  if PrintDialog.Execute then begin
    j:=PrintDialog.Copies;
    for I:=1 to j do begin
      HtmlViewer.OpenPrint;
      HtmlViewer.Print(1,9999);
      HtmlViewer.ClosePrint;
    end;
  end;
end;

При ПЕРВОЙ печати работает все, и количество экземпляров выводит сколько выбрано в диалоге. Но если запустить печать еще раз, то вылетает ошибка.
Подскажите, пожалуйста, кто сталкивался с подобным и как решить. Ну и соответственно из диалога я беру только кол-во экземпляров, а как, к примеру, поменять принтер? Метод HTMLViewer.Print не содержит никаких параметров относительно устройства вывода.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Ошибка при печати в HTMLView

Сообщение Vadim » 27.05.2015 14:15:25

java73 писал(а):то вылетает ошибка.

А какая ошибка, если не секрет?
Кстати, у
Код: Выделить всё
HtmlViewer.Print();

все значения в параметрах содержат значения по умолчанию, так что можно в скобках ничего не указывать.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Ошибка при печати в HTMLView

Сообщение java73 » 27.05.2015 15:06:18

Убрал значения,
первый раз запустил - распечатал 1 экземпляр,
второй раз - распечатал 2 экземпляра,
третий раз запускаю с 1 экземпляром - ошибка Range check error
и потом она каждый раз возникает. Пока не перезапустить приложение.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Ошибка при печати в HTMLView

Сообщение Vadim » 28.05.2015 08:56:56

java73
Попробовал воспроизвести Вашу ситуацию, однако у меня HTMLViewer вообще не завёлся. Так что извините. :-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Ошибка при печати в HTMLView

Сообщение Лекс Айрин » 28.05.2015 10:34:13

java73, а не проще ли вывести OpenPrint и ClosePrint за пределы цикла? Или есть какая-то религиозная причина?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Ошибка при печати в HTMLView

Сообщение Vadim » 28.05.2015 11:57:39

Лекс Айрин писал(а):а не проще ли вывести OpenPrint и ClosePrint за пределы цикла?

Так у него может быть не один экземпляр нужно на печать вывести.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Ошибка при печати в HTMLView

Сообщение Лекс Айрин » 28.05.2015 13:00:18

Vadim ну и? У меня прекрасно несколько копий печатает вообще без всякого кода с моей стороны. (правда, из memo).

java73, похоже, что какую-то переменную (или поле) надо заново проинициализировать.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Ошибка при печати в HTMLView

Сообщение java73 » 29.05.2015 10:51:01

напишите, пожалуйста, в двух словах как воспользоваться печатью не из компонента HTMLViewer, а собственными средствами lazarus, если таковые есть
С этим так и не смог сладить
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Ошибка при печати в HTMLView

Сообщение Снег Север » 29.05.2015 11:02:08

http://wiki.freepascal.org/Using_the_printer

простейший пример, который печатает drawgrid:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Ошибка при печати в HTMLView

Сообщение alexs » 29.05.2015 12:41:17

java73
Может вам всё таки с LazReport-ом разобраться?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Ошибка при печати в HTMLView

Сообщение java73 » 29.05.2015 13:44:31

alexs писал(а): alexs » 29.05.2015 12:41:17

java73
Может вам всё таки с LazReport-ом разобраться?

Не хочет он работать с компонентами ZeosDBO. Проверил обычные таблицы парадокс и ADO, с ними все работает. Но стандартные компоненты MySQL в lazarus не работают, поэтому и поставил ZeosDBO. А так я уже почти все документы по шаблонам HTML сделал. Все отлично с ними. С печатью вот разберусь)) и с гораздо большим глюком http://www.freepascal.ru/forum/viewtopic.php?f=5&t=10325

Добавлено спустя 2 минуты 10 секунд:
Снег Север писал(а): Снег Север » 29.05.2015 11:02:08

http://wiki.freepascal.org/Using_the_printer

простейший пример, который печатает drawgrid:


Спасибо большое
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Ошибка при печати в HTMLView

Сообщение alexs » 29.05.2015 15:33:44

java73 писал(а):Не хочет он работать с компонентами ZeosDBO.

У меня куча проектов - в этой связке нормально работают. Давайте небольшую демку с ошибкой.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Ошибка при печати в HTMLView

Сообщение java73 » 29.05.2015 18:00:17

Снег Север писал(а):Снег Север » 29.05.2015 11:02:08

Заработало вот так:
Код: Выделить всё
procedure TInvestFeeForm.Button2Click(Sender: TObject);
begin
  if PrintDialog.Execute then begin
     Printer.BeginDoc;
     HtmlViewer.PaintTo(Printer.Canvas.Handle,0,0);
     Printer.EndDoc;
  end;
end; 


только как мне теперь масштабировать))) ? а то вон получилась картина:
Изображение

Добавлено спустя 34 минуты 32 секунды:
Костыль для масштабирования:
Код: Выделить всё
procedure TInvestFeeForm.Button2Click(Sender: TObject);
var
BitMap: TBitmap;
MyPrinter: TPrinter;
Scale: integer;
begin
  BitMap:=TBitmap.Create;
  BitMap.Width:=HtmlViewer.Width;
  BitMap.Height:=HtmlViewer.Height;
  Scale:=Printer.PaperSize.Width div HtmlViewer.Width;
  if PrintDialog.Execute then begin
     HtmlViewer.PaintTo(BitMap.Canvas,0,0);
     MyPrinter:=Printer;
     MyPrinter.BeginDoc;
     MyPrinter.Canvas.CopyRect(Classes.Rect(0, 0, MyPrinter.PaperSize.Width, BitMap.Height*Scale),
       BitMap.Canvas, Classes.Rect(0, 0, BitMap.Width, BitMap.Height));
     MyPrinter.EndDoc;
  end;
  BitMap.Free;
end;


НО этот метод печатает только видимую часть htmlviewer. пока у меня текст умещается на одной странице и в пределах экрана, это одно. Но это лишь костыль. Почему же простой метод Print у самого компонента не работает нормально((((
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Ошибка при печати в HTMLView

Сообщение Снег Север » 29.05.2015 18:50:06

java73 писал(а):НО этот метод печатает только видимую часть htmlviewer

Я не знаю ничего конкретного про данный компонент, но печать из своих компонентов именно так и организуется:
- документ прорисовывается на некий графический объект, обычно - TBitmap
- производятся нужные масштабирования, разбивка на страницы и пр.
- изображения посылаются на принтер.

Вам надо смотреть и править в коде htmlviewer'а (может, есть более свежая версия с исправлением бага) или искать другое, аналогичное, средство...
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Ошибка при печати в HTMLView

Сообщение скалогрыз » 30.05.2015 06:04:19

java73 писал(а):НО этот метод печатает только видимую часть htmlviewer. пока у меня текст умещается на одной странице и в пределах экрана, это одно. Но это лишь костыль. Почему же простой метод Print у самого компонента не работает нормально(((

если печать нужна только под винды, попробуй RichMemo
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36

Рейтинг@Mail.ru