Перейти к содержанию
Fire Monkey от А до Я
  • 0

WebBrowser Печать


Dev

Вопрос

Опубликовано

Как отправить на печать WebBrowser в FMX?

пробу так

uses ActiveX

procedure TForm1.Button2Click(Sender: TObject);
var
PostData, Headers: OLEvariant;
begin
	WebBrowser1.ExExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, PostData, Headers);
end;

Ошибка Undeclared identifier: 'ExExecWB'

 

Рекомендуемые сообщения

  • 1
Опубликовано

В HTML надо добавить что-то типа

    <script type="text/javascript">
function Printt(){
    window.print();
};
    </script>

И потом просто вызвать этот ява код.

TMSFMXWebBrowser1.ExecuteJavascript('Printt();');

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

   a := TRegistry.Create;
   a.RootKey := HKEY_CURRENT_USER;
   a.OpenKey('Software\Microsoft\Internet Explorer\PageSetup',true);
   a.WriteString('footer','');
   a.WriteString('header','');
   a.CloseKey;
   a.OpenKey('Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION',true);
   a.WriteInteger('Client1.exe',$2af9);
   a.CloseKey;
   a.Free;

Где Client1,exe - имя вашего exe.

P.S. И лучше использовать браузер от TMS, проблем под 10.2.х на порядок будет меньше.
 

  • 0
Опубликовано (изменено)

Нашел решение для FMX (два дня ковырялся).

1. Удаляем стандартный WebBrowser с формы и FMX.Webbrowser из uses (чистим следы)

2. Подключаем

uses  SHDocVw, Vcl.Forms, Vcl.Controls

3. Из-за п.2 начнутся разногласия в типах данных (после этого нужно учитывать, что возможно где-то когда-то еще что-то вылезет и нужно будет для другого объекта конкретизировать тип ). Поэтому конкретизируем что наша форма ...

type
  TForm1 = class(FMX.Forms.TForm)

Так же пришлось мне конкретизировать, что ...

ImageList1: FMX.ImgList.TImageList;

4. Объявляем глобальные переменные (объекты будем создавать динамически)

Цитата

var   WebBrowser:TWebBrowser;
        Form:VCL.Forms.TForm;  // нужно создать форму VCL, что б потом у WebBrowser указать Parent класса TWinControl, а в FMX таких нет

Можно Form и не создавать, но тогда при вызове предварительного просмотра будет дополнительно вне нашей формы создаваться окно IE причем без заголовка окна + окно предпросмотра. А нужно только окно предпросмотра.

5. Далее создаем наши объекты

procedure TForm1.FormCreate(Sender: TObject);
...
Form:=VCL.Forms.TForm.Create(Application);
Form.Visible:=false;
Form.Height := 600;
Form.Width := 800;

WebBrowser:=TWebBrowser.Create(Form);
TWinControl(WebBrowser).Parent:=Form;
WebBrowser.Silent := true;
WebBrowser.Visible := false;
WebBrowser.Top:=0;
WebBrowser.Left:=0;
WebBrowser.Height :=Form.Height;
WebBrowser.Width := Form.Width;

WebBrowser.OnDocumentComplete:=WebBrowserDocumentComplete;
WebBrowser.Visible:=true;
...
end;
procedure TForm1.WebBrowserDocumentComplete(ASender: TObject;
  const pDisp: IDispatch; const URL: OleVariant);
begin
WebBrowser.ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_PROMPTUSER);  // то ради чего старались и наконец-то заработает
end;

6. Там где нужно загрузить страницу пишем

  WebBrowser.HandleNeeded; // обязательно. Без этого ничего не загрузится
  WebBrowser.Navigate(s);

 

P. S.: и кстати вообще не вариант, т к. нет окна предпросмотра, а тупо выскакивает окно выбора принтера и можно только отправить на печать, не подогнав размеры под лист. Этого же можно добиться обычным keybd_event, отправив на WebBrowser комбинацию Ctrl+P.

Цитата

Самое простое - вызвать ява скрипт с window.print();

 

Изменено пользователем SergB

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...