Word OLE > PrintOut und Quit ein Pausenproblem
-
Hallo zusammen,
ich erstelle eine RTF Datei und lade diese mittels OLE in Word.
Das klappt auch fehlerfrei. Mit PrintOut drucke ich diese dann aus
und beende nun Word mit Quit. Und hier habe ich das Problem:
Wenn ich nicht mittels Debugmouds (Einzelsteps) die Befehle abarbeite,
also das Programm nicht direkt durchlaufen lasse, dann funktioniert das
PrintOut nicht mehr, da scheinbar das nachfolgende Quit das PrintOut abbricht://---------------------------------------------------------------------------- //----- WORD OLE ----- //---------------------------------------------------------------------------- Boolean WordOle(int p1,int p2,int p3,AnsiString pt1,AnsiString pt2,AnsiString pt3) {try { // Fehlerroutine Start AnsiString z1,zFile,zPfad,zInfo,zData; // Vars definieren // Version: 1.00 23.03.2012 // // p1: 1=Ausgabe über Word // // p2: 0=nur Anzeige 1=Anzeige und Drucken // // p3: 0=unsichtbarer Vorgang 1=sichtbarer Vorgang // zInfo=pt1; // Titel zFile=pt2; // RTF Datei zData=pt3; // Datensatz if(Form1->oPrgComp) { // nur im IDE z1= "pt1 \t: "+zInfo+"\r"; // z1=z1+"pt2 \t: "+zFile+"\r"; // z1=z1+"pt3 \t: "+zData+"\r"; // Application->MessageBoxA(z1.c_str(),"Sicherheitshinweis",MB_OK | MB_ICONINFORMATION); // Info geben } if(zFile.Length()==0) { return false; } // Keine Dateiübergabe, Abbruch Screen->Cursor=crHourGlass; Application->ProcessMessages(); // Sanduhr if(FileExists(zFile)==false) { // Datei nicht gefunden? Screen->Cursor=crDefault; Application->ProcessMessages(); // Pfeil z1= "Datei für MS Word nicht gefunden!?\r\r"; // z1=z1+zFile; // if(p3==1 || Form1->oPrgComp) { Application->MessageBoxA(z1.c_str(),"Sicherheitshinweis",MB_OK | MB_ICONINFORMATION); } // Info geben return false; // und Abbruch } // ende if(FileExists Variant MsWord,vDocum,vFont; // Vars definieren MsWord=CreateOleObject("Word.Application"); // Word OLE anmelden MsWord.OlePropertySet("Visible",p3==1); // Word jetzt sichtbar machen vDocum=MsWord.OlePropertyGet("Documents"); // neue Objet Dokument erzeugen vDocum.OleProcedure("Open",zFile.c_str()); // Datei in Word laden Application->ProcessMessages(); // events abarbeiten if(p2==1) { // ANZEIGEN UND DRUCKEN MsWord.OleProcedure("PrintOut"); // Dokument ausdrucken Application->ProcessMessages(); // events abarbeiten //hier ist mein Problem: Wie bekomme ich eine Rückantwort, das das Drucken erfolgt ist //oder gibt es eine Art Queue, wo ich an Word meine Befehle übermitteln kann? MsWord.OleFunction("Quit",0); // Word schliessen Application->ProcessMessages(); // events abarbeiten } // ende if(p2==1 MsWord=Unassigned; // und Object auflösen Screen->Cursor=crDefault; Application->ProcessMessages(); // Pfeil } catch(Exception& e) { MessageBox(NULL, e.Message.c_str(), "FunktionAllgemein.h::WordOle", MB_OK | MB_ICONSTOP); return false; } // Fehler anzeigen }
Habe viel gegoogelt und hier gesucht, aber leider nichts gefunden bzw. erkannt.
Danke im Voraus für Ideen und Tipps
Gruss Stefan
-
Vielleich mal diesen Ansatz verfolgen:
http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc06023.php
Auf jeden Fall wird dort das Dokument noch erst wieder geschlossen, bevor Word beendet wird.
-
Hallo W.Posur,
danke für Deinen Tipp. Werde ich mal nach Ostern mir in Ruhe anschauen.
Zwischenzeitlich habe ich eine kleine Lösung gefunden:
Eine kleine Pause von 1 Sekunde zwischen dem Befehl PrintOut und Quit
führt zum Erfolg. Ich bin damit allerdings nicht zufrieden, da ich nicht
weiß, ob das wirklich auf jedem PC sauber funktioniert.Sollte ich mit den anderen Hinweisen eine bessere Lösung finden, werde ich
sie hier posten.Frohe Ostern
Stefan