Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

**Решение проблемы печати из TWebBrowser в Delphi: настройка пользовательских заголовков и подписей**

Delphi , Технологии , OLE

Решение проблемы печати из TWebBrowser в Delphi: настройка пользовательских заголовков и подписей

Печать из компонента TWebBrowser в среде Delphi может быть непростой задачей, особенно если требуется настроить пользовательские заголовки и подписи. В этой статье мы рассмотрим, как можно решить данную проблему, опираясь на информацию из Microsoft Knowledge Base и примеры кода на Object Pascal.

Проблема

Пользователь столкнулся с необходимостью реализации пользовательских заголовков и подписей при печати из TWebBrowser. В качестве исходного материала было использовано руководство с Microsoft Knowledge Base (KB267240), которое содержит пример кода на C++. Однако, поскольку разработка ведется в среде Delphi, потребуется конвертация кода из C++ в Object Pascal.

Ключевым моментом является использование параметров OleVariant для передачи данных в диалог печати TWebBrowser. В исходном руководстве указано, что для OLECMDID_PRINT с методом ExecWB можно передать расширенную информацию о печати через структуру SAFEARRAY в параметре pvaIn. Эта структура может содержать до пяти элементов, включая строки (BSTR) для пользовательских заголовков и подписей.

Пример кода, предоставленный пользователем, успешно удаляет оригинальные заголовки и подписи, но не добавляет новые. Возможно, проблема связана с неверной конвертацией кода или с использованием IE 9, который может не поддерживать функционал, актуальный для версий 4-6.

Решение

Для решения проблемы необходимо правильно создать структуру SAFEARRAY, содержащую пользовательские заголовки и подписи. В примере кода из альтернативного ответа используется функция VarArrayCreate с типом varVariant, что позволяет передать массив строк. Также важно использовать флаги VT_ARRAY или VT_BYREF для указания, что аргумент должен передаваться по ссылке.

Вот пример функции на Object Pascal, которая настраивает печать с пользовательскими заголовками и подписями:

procedure PrintWithHeaderFooter(ControlInterface: IWebBrowser2; Header, Footer: PWideChar; Options: OLECMDEXECOPT);
var
  saBound: TSafeArrayBound;
  psaHeadFoot: PSafeArray;
  vaIn, vaOut: TVariantArg;
  vHeadStr, vFootStr: TVariantArg;
  rgIndex: LongInt;
begin
  try
    saBound.lLbound := 0;
    saBound.cElements := 2;
    psaHeadFoot := SafeArrayCreate(VT_VARIANT, 1, saBound);
    vHeadStr.vt := VT_BSTR;
    vHeadStr.bstrVal := SysAllocString(Header);
    vFootStr.vt := VT_BSTR;
    vFootStr.bstrVal := SysAllocString(Footer);
    rgIndex := 0;
    OleCheck(SafeArrayPutElement(psaHeadFoot, rgIndex, vHeadStr));
    rgIndex := 1;
    OleCheck(SafeArrayPutElement(psaHeadFoot, rgIndex, vFootStr));
    vaIn.vt := VT_ARRAY or VT_BYREF;
    vaIn.parray := psaHeadFoot;
    ControlInterface.ExecWB(OLECMDID_PRINT, Options,
      OleVariant(vaIn), OleVariant(vaOut));
    if vHeadStr.bstrVal <> nil then
      SysFreeString(vHeadStr.bstrVal);
    if vFootStr.bstrVal <> nil then
      SysFreeString(vFootStr.bstrVal);
  except
    on E: Exception do
      MessageDlg('Ошибка: ' + E.Message, mtError, [mbOK], 0);
  end;
end;

Используйте функцию PrintWithHeaderFooter для вызова диалога печати с пользовательскими заголовками и подписями. Обратите внимание, что команда OLECMDID_PRINTPREVIEW не поддерживает настройку заголовков и подписей, поэтому следует использовать OLECMDID_PRINT.

Подтвержденный ответ

Проблема с печатью из TWebBrowser в Delphi была решена путем корректной настройки структуры SAFEARRAY для передачи пользовательских заголовков и подписей. Использование функции PrintWithHeaderFooter позволяет успешно настроить печать с необходимыми параметрами.

Альтернативный ответ

Не требуется. Предоставленный выше код является рабочим решением проблемы.


В этой статье мы рассмотрели, как настроить печать из TWebBrowser в Delphi с использованием пользовательских заголовков и подписей. Приведенный пример кода на Object Pascal позволяет разработчикам интегрировать данный функционал в свои проекты, используя компонент TWebBrowser.

Создано по материалам из источника по ссылке.

Проблема связана с настройкой пользовательских заголовков и подписей при печати веб-страницы через компонент `TWebBrowser` в среде разработки Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OLE ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 16:32:34/0.0035169124603271/0