Entwickler-Ecke

Internet / Netzwerk - TWebbrowser + HTML Code laden + sofort Drucken


mindtrap - Do 06.08.09 02:46
Titel: TWebbrowser + HTML Code laden + sofort Drucken
Hi,

eigentlich ist das Problem ziemlich trivial.
Ich lade einen HTML-Code in eine Webbrowserkomponente. Danach möchte ich sofort drucken, leider
bekomme ich (hier nur die Vorschau) eine leere Seite.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
var
  Ms: TMemoryStream;
  L: TStringList;
begin
  L := TStringList.Create;
  L.LoadFromFile('aoeo.html');

  WebBrowser1.Navigate('about:blank');
  while WebBrowser1.ReadyState < READYSTATE_INTERACTIVE do
    Application.ProcessMessages;

  Ms := TMemoryStream.Create;
  try
    L.SaveToStream(Ms);
    Ms.Seek(00);
    (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(Ms));
  finally
    Ms.Free;
  end;

  { hier schon verschiedene Warte-Möglichkeiten versucht }

  Webbrowser1.ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DONTPROMPTUSER);


Ich habe schon verschiedene "Warte"-Möglichkeiten versucht.
Oder die Browser-Events OnDownloadComplete, OnDocumentComplete etc...
Ohne Erfolg, die Vorschauseite bleibt leer.

Wenn ich diesen Weg gehen:

Delphi-Quelltext
1:
  WebBrowser1.OleObject.Document.Body.InnerHtml := L.Text;                    

bekomme ich zwar eine Ansicht, aber dann wird das CSS ignoriert. :gruebel:


In einem Testprojekt habe ich aber festgestellt, dass der erste Weg
durchaus funktioniert.
Zwei Buttons auf eine Form und mit einem Button laden, mit dem anderen
Button die Vorschau aufrufen.
D.h. es muss einen Zustand (Status) geben, den der Browser erreicht haben muss,
damit die Vorschau verfügbar ist.

Nur wie kann ich das prüfen? Vielleicht hat jemand eine Idee.

MfG
mindtrap


mindtrap - Di 11.08.09 01:06

*push* :shock:


Tastaro - Di 11.08.09 08:30

Versuchs mal damit zu warten:


Delphi-Quelltext
1:
2:
3:
   while WebBrowser1.querystatuswb(OLECMDID_PRINT) <>
         OLECMDF_SUPPORTED + OLECMDF_ENABLED do
      Application.processmessages;


Beste Grüße


mindtrap - Mi 12.08.09 15:05

Hi,

danke. Leider führt das auch nicht zum gewünschten Ergebnis.
Solange ich noch nicht weiß, wie ich es anders machen kann, warte ich in meinem Programm einfach ein wenig und in der Hoffnung, dass alles klappt drucke ich dann.

Schlecht, aber ich habe derzeit keine andere Variante zur Hand.

MfG
mindtrap


toms - Do 13.08.09 20:08

Wenn ich vor dem ExecWB ein Application.ProcessMessages ausführe, wird die Vorschau nicht leer.