![]() |
TWebBrowser Ausdrucken Fuß- und Kopfzeile verbergen
Hallo,
wie kann man mit einem Quellcodebefehl beim Ausdruck eines TWebBrowsers die Kopf- und Fußzeile verbergen (also Datum, Adresse, etc.)? Danke für Eure Hilfe! |
Re: TWebBrowser Ausdrucken Fuß- und Kopfzeile verbergen
|
Re: TWebBrowser Ausdrucken Fuß- und Kopfzeile verbergen
Hallo,
So kannst du einen benutzerdefinierten Header & Footer festsetzen.
Delphi-Quellcode:
uses
ActiveX, ComObj; 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; procedure TForm1.Button1Click(Sender: TObject); begin WB_PrintWithHeaderFooter(Webbrowser, '', ''); // Kein Header & Footer end; |
AW: TWebBrowser Ausdrucken Fuß- und Kopfzeile verbergen
Ich weiß, ist schon alt, aber da ich das grad sah....
Man kann sich hier an vielen Stellen vom Delphi helfen lassen. * die PWideChars (Header und Fotter) gleich in einen WideString, welcher intern schon das SysAllocString und SysFreeString gekapselt hat * vaIn.parray ist ja schon ein PSafeArray, wodurch man sich die zusätzliche Variable psaHeadFoot erspart * saBound erspart man sich, indem man es über einen ähnlichen Typen ercastet oder man erstellt sich zumindestens eine passende Konstante * das leere Try-Except ist eh eine Unsitte und fliegt gleich mit raus
Delphi-Quellcode:
uses
ActiveX, ComObj; procedure WB_PrintWithHeaderFooter(WebBrowser: TWebBrowser; const Header, Footer: WideString); var saBound: TSafeArrayBound; vaIn, vaStr: TVariantArg; rgIndex: LongInt; begin saBound.lLbound := 0; saBound.cElements := 2; vaIn.vt := VT_ARRAY or VT_BYREF; vaIn.parray := SafeArrayCreate(VT_VARIANT, 1, saBound); rgIndex := 0; vaStr.vt := VT_BSTR; vaStr.bstrVal := Pointer(Header); OleCheck(SafeArrayPutElement(vaIn.parray, rgIndex, vaStr)); rgIndex := 1; vaStr.vt := VT_BSTR; vaStr.bstrVal := Pointer(Footer); OleCheck(SafeArrayPutElement(vaIn.parray, rgIndex, vaStr)); WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, OleVariant(vaIn)); end;
Delphi-Quellcode:
uses
ActiveX, ComObj; procedure WB_PrintWithHeaderFooter(WebBrowser: TWebBrowser; const Header, Footer: WideString); var saBound: TSafeArrayBound; vaIn: TVariantArg; rgIndex: LongInt; begin saBound.lLbound := 0; saBound.cElements := 2; vaIn.vt := VT_ARRAY or VT_BYREF; vaIn.parray := SafeArrayCreate(VT_VARIANT, 1, saBound); rgIndex := 0; OleCheck(SafeArrayPutElement(vaIn.parray, rgIndex, OleVariant(Header))); rgIndex := 1; OleCheck(SafeArrayPutElement(vaIn.parray, rgIndex, OleVariant(Footer))); WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, OleVariant(vaIn)); end; Das Endergebnis (locker mal 60% weniger Code):
Delphi-Quellcode:
Falls es irgendwo noch eine Art SafeArrayCreate gibt, welchem man gleich die Felder mitgeben kann, dann würde das wohl noch auf einem Einzeler zusammenfassen können.
uses
ActiveX, ComObj; procedure WB_PrintWithHeaderFooter(WebBrowser: TWebBrowser; const Header, Footer: WideString); var vaIn: TVariantArg; rgIndex: LongInt; begin vaIn.vt := VT_ARRAY or VT_BYREF; vaIn.parray := SafeArrayCreate(VT_VARIANT, 1, TSafeArrayBound(Point(0, 2))); rgIndex := 0; OleCheck(SafeArrayPutElement(vaIn.parray, rgIndex, OleVariant(Header))); rgIndex := 1; OleCheck(SafeArrayPutElement(vaIn.parray, rgIndex, OleVariant(Footer))); WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, OleVariant(vaIn)); end; // oder procedure WB_PrintWithHeaderFooter(WebBrowser: TWebBrowser; const Header, Footer: WideString); const saBound: TSafeArrayBound = (cElements: 2; lLbound: 0); var vaIn: TVariantArg; rgIndex: LongInt; begin vaIn.vt := VT_ARRAY or VT_BYREF; vaIn.parray := SafeArrayCreate(VT_VARIANT, 1, saBound); rgIndex := 0; OleCheck(SafeArrayPutElement(vaIn.parray, rgIndex, OleVariant(Header))); rgIndex := 1; OleCheck(SafeArrayPutElement(vaIn.parray, rgIndex, OleVariant(Footer))); WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, OleVariant(vaIn)); end; PS: Die Codes in Post #3 und #4 sollten mit Win32 (ANSI und Unicode) funktionieren. Zu Win64 kann ich keine Aussage treffen. [edit] Arg, die Parameter sind ja krank :wall:
Delphi-Quellcode:
muß also drin bleiben :oops:
rgIndex: LongInt;
Delphi-Quellcode:
procedure WB_PrintWithHeaderFooter(WebBrowser: TWebBrowser; const Header, Footer: WideString);
procedure PutElement(va: TVariantArg; idx: LongInt; const pv: OleVariant); begin OleCheck(SafeArrayPutElement(va.parray, idx, pv)); end; const saBound: TSafeArrayBound = (cElements: 2; lLbound: 0); var vaIn: TVariantArg; begin vaIn.vt := VT_ARRAY or VT_BYREF; vaIn.parray := SafeArrayCreate(VT_VARIANT, 1, saBound); PutElement(vaIn, 0, Header); PutElement(vaIn, 1, Footer); WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, OleVariant(vaIn)); end; |
AW: TWebBrowser Ausdrucken Fuß- und Kopfzeile verbergen
Hallihallo,
ich krame mal den fast 2 (bzw. 4) Jahre alten Thread heraus, weil ich gerade damit beschäftigt bin. :-D Bis zum Drucken bin ich gekommen, dafür erst mal vielen Dank. Meine Frage ist nun: wie bekomme ich eine Rückmeldung, dass auch tatsächlich gedruckt wurde? Ist das möglich? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 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