Word-Automation im Hintergrund
Hallo,
in verschiedenen Eigenentwicklungen in unserem Hause wurde für die Textverarbeitung Corel-WordPerfect erfolgreich eingesetzt. Nach einer Lizenzänderung wird nun in unserem Hause nur noch MS-Word verwendet und alle Verfahren müssen nun auf MS-Word umgestellt werden. Dabei bin ich auf ein Phänomen gestoßen, welches ich z.Z. nicht erklären kann und bitte nun um fachmännischen Rat: Ich verwende die Komponente TWordApplication aus dem dclofficexp70-package und habe WordApplication.Visible := false gesetzt. Bei der Programmschleifen-Wiederholungen stellt sich Word aus unerklärlichen Gründen auf sichtbar um und in den Vordergrund - dies geschied nach bzw. in der close-Anweisung des gedruckten Dokuments. Word soll aber ganz unsichtbar bleiben. Ich habe hin und her probiert und am Ende versucht mit absichtlichem Zurücksetzen des visible auf false eine verwendbare Version zu erhalten. Trotzdem flackert Word kurz auf, was mir nicht gefällt. Im folgenden Code arbeite ich mit einem flag, da es Anwender gibt, die Word manchmal separat schon geöffnet hatten, dann soll Word sichtbar beiben....
Delphi-Quellcode:
Beim ersten Aufruf läuft alles, wie erwartet durch. Erst bei einem erneuten Aufruf der Druckroutine beginnt das Maleur.
procedure TFormPruefZeit.tvAufruf (docName : String);//neuer tvAufruf mit Word und Vorlage
var tmpDot : OleVariant; tRange : Range; tName : OleVariant; tWhat : OleVariant; myDoc :_Document; OleStrFileName: OleVariant; OleTrue : OleVariant; flagWordSchonDa:boolean;//231209BP begin screen.Cursor:=crHourGlass; if FormHaupt.Word.Visible = true then //231209BP flagWordSchonDa:=true else flagWordSchonDa:=false; tmpDot:= ExtractFilePath (Application.ExeName)+ docName; //080409BP ExtractFilePath... myDoc:=FormHaupt.Word.Documents.Add(tmpDot, emptyParam, emptyParam, emptyParam); myDoc.Activate; FormHaupt.Word.ScreenUpdating:=false; //Daten in Textmarken übertragen tWhat:= wdGoToBookmark; tName:= 'TMAdresse1'; tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName); tRange.Text:= FormHaupt.CoBoAnrede.Text; tName:= 'TMAdresse2'; tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName); tRange.Text:= FormHaupt.EdVorname.Text + ' ' + FormHaupt.EdName.Text; tName:= 'TMAdresse3'; tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName); tRange.Text:= FormHaupt.CoBoStrasse.Text + ' ' + FormHaupt.EdHNr.Text; tName:= 'TMAdresse4'; tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName); tRange.Text:=FormHaupt.EdPlz.Text + ' ' + FormHaupt.EdOrt.Text; tName:= 'TMAdresse5'; tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName); tRange.Text:=''; tName:= 'TMAdresse6'; tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName); tRange.Text:= ''; tName:= 'TMAnrede'; tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName); tRange.Text:=FormelleAnrede; tName:= 'TMZeit'; tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName); tRange.Text:= Prueftag + ', dem ' + FormHaupt.MEdPruefDat.Text + ' um ' + PruefZeit + ' Uhr'; tName:= 'TMOrt'; tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName); tRange.Text:= Treffpunkt; FormHaupt.Word.ScreenUpdating:=true; tmpdot:='C:\Temp\zulass.doc'; MyDoc.SaveAs(tmpDot, emptyParam, EmptyParam, EmptyParam, //231209BP EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); MyDoc.PrintOut(EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); MyDoc.Close(EmptyParam,EmptyParam,EmptyParam); //231209BP if Not flagWordSchonDa then //231209BP - aus irgend FormHaupt.Word.Visible:=false; screen.Cursor:=crDefault; end; Was kann ich tun? Gruß bpel |
Re: Word-Automation im Hintergrund
Probier mal jedesmal einen neue Instanze der Wrapper-Komponente zu verwenden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:10 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