Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Webbrowser drucken geht nicht. Warum??? (https://www.delphipraxis.net/147312-webbrowser-drucken-geht-nicht-warum.html)

Muellermilchtrinker 5. Feb 2010 13:43


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:
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;
Bei meinem anderen Projekt klappt das alles wunderbar.
Nur bei meinem aktuellen nicht.
Der druckt nur eine leere Seite.
Ich habs schon mit:
Delphi-Quellcode:
Webbrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, OleVariant(vaIn), OleVariant(vaOut));
probiert.
Da bekomm ich ne leere Seite mit Kopf und Fusszeile, die ich aber nicht will.

Ich hoffe ihr könnt mir helfen.

p80286 5. Feb 2010 14:15

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

Muellermilchtrinker 5. Feb 2010 15:29

Re: Webbrowser drucken geht nicht. Warum???
 
Nein keine Frames.
Nur normaler HTML Text.

Muellermilchtrinker 6. Feb 2010 13:55

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:
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;
Wenn ich jetzt so aufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
{...}
begin
{...}
WB_LoadHTML(Webbrowser1,HTMLCODE.Text);
WB_PrintWithHeaderFooter(Webbrowser1, ' ', ' ');
end;
Dann druckt er mir ne leere Seite.
Wenn ich jetzt aber so aufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
{...}
begin
{...}
WB_LoadHTML(Webbrowser1,HTMLCODE.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
WB_PrintWithHeaderFooter(Webbrowser1, ' ', ' ');
end;
Dann druckt er alles einwandfrei. :drunken:
Sprich die zwei Proceduren funktionieren nicht hintereinander. :wiejetzt:
Warum??? :gruebel:
Ich hoffe ihr könnt mir helfen.

dominikkv 6. Feb 2010 14:04

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;

Muellermilchtrinker 6. Feb 2010 14:06

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 01:30 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