Hallo alle zusammen,
ich nutze gerade den IE-Browser zum Drucken eines Textschnipsels und bediene mich des
EmbeddedWB. Will man einem Dokument nun eine eigene Kopf- und Fußzeile verpassen, so wird auf der Seite des EmbeddedWB der folende Code-Abschnitt abgeboten:
Delphi-Quellcode:
procedure Tfrm_TemplatePreview.PrintHeaderFooter(Header, Footer, HTMLHeader:
string);
var
CmdTarget: IOleCommandTarget;
Stream: IStream;
v, v1: OleVariant;
Dummy: Int64;
Psa: PSafeArray;
begin
CreateStreamOnHGlobal(0, TRUE, Stream);
Stream.
Write(Pchar(HTMLHeader), length(HTMLHeader), @Dummy);
Stream.Seek(0, STREAM_SEEK_SET, Dummy);
SafeArrayCopy(PSafeArray(TVarData(VarArrayOf([Header, Footer, Stream
as IUnknown])).VArray), psa);
TVarData(V1).VType:= varArray
OR varByRef;
SafeArrayCopy(psa, PSafeArray(TVarData(V1).VArray));
If (EmbeddedWB1.Document <>
NIL)
Then
TRY
EmbeddedWB1.Document.QueryInterface(IOleCommandTarget, CmdTarget);
If (CmdTarget <>
NIL)
then
TRY
CmdTarget.Exec(
NIL, OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, v1, v );
FINALLY
CmdTarget:=
NIL;
END;
EXCEPT
On E:
Exception Do ;
END;
End;
Beim Drucken gibt's dann die
Exception "EBadVariantType", da der IE offenbar mit der Typkombination "varAray und varByref" nicht vollständig klarkommt. Irgendwie aber dann doch, da die
Exception nur unterdrückt wird und das Dokument trotzdem wie gewünscht im Ausgabefach des Druckers liegt und mir von meinem Schülerpraktikanten an den Schreibtisch gebracht werden kann.
Im Endeffekt bin ich nur am Ergebnis interessiert und das liegt einwandfrei vor - jedoch ist eine unterdrückte Excception nicht gerade das, was ich in meinem Code haben möchte. Also stellt sich mir die Frage, was ich tun muss, damit alle Beteiligen zufrieden sind und ich keine
Exception erhalte.
Die Dokumentation von MS mag dies vielleicht klar und deutlich widergeben - nur nicht für mich,. Ich werde nicht daraus schlau:
http://support.microsoft.com/default...;EN-US;Q267240.
Wer mag und kann helfen?
Daniel R. Wolf
mit Grüßen aus Hamburg