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

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

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

Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

И ещё. Если распечатывать нужно не более одной-двух страниц в документе, то можно воспользоваться самым обычным браузером и его средствами печати. Я в своих программах так и делаю.
1. Формирую необходимый HTML-документ;
2. Открываю его браузером:

Код: Выделить всё

OpenDocument('Документ.html');

После открытия документа браузером по умолчанию, пользователь его разглядывает и печатает, если всё правильно.
java73
постоялец
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Сообщение java73 »

HTMLViewer под линуксом вообще не компилится, там куча, связанного с виндовз, начиная от типов данных и заканчиая ссылками на dll.
Кароче, буду выпиливать всё из проекта, т.к. LazReport вроде пошёл нормально)
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Нужно было распечатать документ из HTMLView.
Написал классическое:

Код: Выделить всё

  PrintDialog1.Copies := 1;
  if PrintDialog1.Execute then begin
    HtmlViewer1.OpenPrint;
    HtmlViewer1.Print;
    HtmlViewer1.ClosePrint;
  end;


А фиг вам. Вылет.
Что за нафиг!
Полез проходить по коду.

Проблема оказалась в procedure TvwPrinter.SetState(Value: TvwPrinterState);
Вылет происходил в первой строчке этого списка присваиваний:

Код: Выделить всё

    StrCopy(Device, PWideChar(PrnDev.Device));
    StrCopy(Driver, PWideChar(PrnDev.Driver));
    StrCopy(Port, PWideChar(PrnDev.Port));


Сделал замену:

Код: Выделить всё

      Device := StringToOleStr(PrnDev.Device);
      Driver := StringToOleStr(PrnDev.Driver);
      Port   := StringToOleStr(PrnDev.Port);

Замена дала результат. Всё заработало, как часы!
Ответить