Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TWebBrowser Ausdrucken Fuß- und Kopfzeile verbergen (https://www.delphipraxis.net/127141-twebbrowser-ausdrucken-fuss-und-kopfzeile-verbergen.html)

MarvinM 8. Jan 2009 11:28


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!

toms 8. Jan 2009 11:47

Re: TWebBrowser Ausdrucken Fuß- und Kopfzeile verbergen
 
Hallo

In diesem MS Artikel findest du Informationen.

toms 12. Jan 2009 20:40

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;

himitsu 2. Okt 2011 13:47

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:
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;
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.


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:
rgIndex: LongInt;
muß also drin bleiben :oops:
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;

davar 4. Sep 2013 10:48

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 21:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz