![]() |
Webbrowser drucken geht nicht. Warum???
Servus DP,
ich hab auf meinem Formular einen webbrowser und möchte den nun drucken. Ich drucke mit folgender Procedur:
Delphi-Quellcode:
Bei meinem anderen Projekt klappt das alles wunderbar.
procedure WB_PrintWithHeaderFooter(Webbrowser: TWebbrowser; Header, Footer: PWideChar);
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; Webbrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, OleVariant(vaIn), OleVariant(vaOut)); if vHeadStr.bstrVal <> nil then SysFreeString(vHeadStr.bstrVal); if vFootStr.bstrVal <> nil then SysFreeString(vFootStr.bstrVal); except end; end; Nur bei meinem aktuellen nicht. Der druckt nur eine leere Seite. Ich habs schon mit:
Delphi-Quellcode:
probiert.
Webbrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, OleVariant(vaIn), OleVariant(vaOut));
Da bekomm ich ne leere Seite mit Kopf und Fusszeile, die ich aber nicht will. Ich hoffe ihr könnt mir helfen. |
Re: Webbrowser drucken geht nicht. Warum???
Mal kurz durchgeschoben und
funktioniert! Wenn Frames auf der Seite sind sieht das allerdings etwas seltsam aus(Stückwerk). liegt es vielleicht daran? Gruß K-H |
Re: Webbrowser drucken geht nicht. Warum???
Nein keine Frames.
Nur normaler HTML Text. |
Re: Webbrowser drucken geht nicht. Warum???
Also jetzt versteh ich die Welt nicht mehr.
Davor lad ich mit dieser FUnktion den HTML Code in meinen Webbrowser:
Delphi-Quellcode:
Wenn ich jetzt so aufruf:
procedure WB_LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string);
var sl: TStringList; ms: TMemoryStream; begin WebBrowser.Navigate('about:blank'); while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages; if Assigned(WebBrowser.Document) then begin sl := TStringList.Create; try ms := TMemoryStream.Create; try sl.Text := HTMLCode; sl.SaveToStream(ms); ms.Seek(0, 0); (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)); finally ms.Free; end; finally sl.Free; end; end; end;
Delphi-Quellcode:
Dann druckt er mir ne leere Seite.
procedure TForm1.Button1Click(Sender: TObject);
{...} begin {...} WB_LoadHTML(Webbrowser1,HTMLCODE.Text); WB_PrintWithHeaderFooter(Webbrowser1, ' ', ' '); end; Wenn ich jetzt aber so aufruf:
Delphi-Quellcode:
Dann druckt er alles einwandfrei. :drunken:
procedure TForm1.Button1Click(Sender: TObject);
{...} begin {...} WB_LoadHTML(Webbrowser1,HTMLCODE.Text); end; procedure TForm1.Button2Click(Sender: TObject); begin WB_PrintWithHeaderFooter(Webbrowser1, ' ', ' '); end; Sprich die zwei Proceduren funktionieren nicht hintereinander. :wiejetzt: Warum??? :gruebel: Ich hoffe ihr könnt mir helfen. |
Re: Webbrowser drucken geht nicht. Warum???
Du musst ihm noch Zeit lassen, die Seite zu laden.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
{...} begin {...} WB_LoadHTML(Webbrowser1, HTMLCODE.Text); Application.ProcessMessages; WB_PrintWithHeaderFooter(Webbrowser1, ' ', ' '); end; |
Re: Webbrowser drucken geht nicht. Warum???
Danke. :thumb:
Funktioniert jetzt. Darauf hätt ich auch kommen können. :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 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