![]() |
TWebBrowser druckt auf mehreren Seiten.
Hallo an alle,
brauche wieder euere Hilfe. Möchte über TWebbrowser und Druckvorschau (ohne druckvorschau das selbe Problem) eine Seite ausdrucken. Über mein Programm wird der Inhalt auf mehreren Seiten ausgedruckt. Navigiere ich allerdings mit IExplorer oder Mozzilla und drucke von dort aus wird nur eine Seite gedruckt. Kenn jemand die Lösung, damit mein Programm auch nur den selben Inhalt auf einer Seite ausdruckt?. |
AW: TWebBrowser druckt auf mehreren Seiten.
push
|
AW: TWebBrowser druckt auf mehreren Seiten.
Auch ich möchte viel....
wie druckst Du denn bisher? ggf. hilft es schon die Ränder neu zu definieren oder mit einem anderen Font zu arbeiten oder ..... der Möglichkeiten ist Legion Gruß K-H |
AW: TWebBrowser druckt auf mehreren Seiten.
Also viel möchte ich nicht, nur dass der TWebbrowser mir eine Seite ausdruckt genauso wie IExplorer. Aber danke für den Hinweis werde ich mal versuchen. Ich drucke ganz normal mit der Metohode:
WebBrowser1.ControlInterface.ExecWB(OLECMDID_PRINT PREVIEW, OLECMDEXECOPT_PROMPTUSER, vIn, vOut); |
AW: TWebBrowser druckt auf mehreren Seiten.
Na dann kennst Du ja auch das _PAGESETUP, hast Du das schon einmal genutzt?
Gruß K-H |
AW: TWebBrowser druckt auf mehreren Seiten.
Hallo,
Zitat:
Ob dem so ist kannst Du ja mal ausprobieren. Mit:
Delphi-Quellcode:
kannst Du Dir anzeigen lassen in welchem Modus die TWebBrowser-Instanz gerade läuft (BackCompat = Kompatibilitätsmodus) und die aktuell geladene Seite anzeigt.
procedure TForm1.Button1Click (Sender : TObject);
var d : IHTMLDocument3; begin if Assigned (WebBrowser1.Document) then begin d := WebBrowser1.Document as IHTMLDocument3; if Assigned (d) then ShowMessage (d.compatMode) end; end; Mit:
Code:
kannst Du den IE "überreden" nicht in den Kompatibilitätsmodus zu schalten. Das setzt allerdings voraus, dass Du den HTML-Code manipulieren kannst.
<meta http-equiv="X-UA-Compatible" content="IE=edge">
Vermutlich hast Du diese Möglichkeit aber nicht. Wenn dem so ist, dann könntest Du das Meta-Tag dem IE aber sozusagen "unterjubeln"; das könnte z. B. so funktionieren:
Delphi-Quellcode:
Gruß
function GetBrowserCompatMode (const WebBrowser : TWebBrowser) : Integer;
var d : IHTMLDocument5; begin Result := -1; if not Assigned (WebBrowser) then Exit; d := WebBrowser.Document as IHTMLDocument5; if not Assigned (d) then Exit; if d.compatMode = 'CSS1Compat' then Result := htmlCompatModeCSS1Compat else Result := htmlCompatModeBackCompat end; procedure ReplaceHtmlDocument (const WebBrowser : TWebBrowser; const Html : string); var d : IHTMLDocument2Disp; begin if Assigned (WebBrowser) then begin d := WebBrowser.Document as IHTMLDocument2Disp; if Assigned (d) then begin d.open ('text/html', '_self', '', 'true'); d.writeln (Html) end; end end; procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant); var d : IHTMLDocument3; s : string; p, q : Integer; c : Char; begin if GetBrowserCompatMode (WebBrowser1) = htmlCompatModeBackCompat then begin d := WebBrowser1.Document as IHTMLDocument3; if Assigned (d) then begin s := d.documentElement.outerHTML; // Die Suche nach der passenden Einfügestelle nur rudimentär p := PosEx ('<HEAD', s); if p = 0 then Exit; Inc (p, 5); q := PosEx ('<META', s, p); if q > 0 then Insert ('<base href="' + URL + '"><meta http-equiv="X-UA-Compatible" content="IE=edge">', s, p + 1) else begin c := s [p]; while (c <> '>') and (c <> #0) do begin Inc (p); c := s [p] end; if c = '>' then Insert ('<base href="'+ URL + '"><meta http-equiv="X-UA-Compatible" content="IE=edge">', s, p + 1) else s := '' end; if s <> '' then ReplaceHtmlDocument (WebBrowser1, s) end end end; |
AW: TWebBrowser druckt auf mehreren Seiten.
Vielen Dank an Volker Z. Genau deine Lösung hat mir geholfen. :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz