Нашел решение для 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. Объявляем глобальные переменные (объекты будем создавать динамически)
Можно 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.