Announcement

Collapse
No announcement yet.

Word: ActivePrinter setzt StandardDrucker neu

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Word: ActivePrinter setzt StandardDrucker neu

    Hallo

    Unter Delphi 4 in Verbindung mit Word 97 habe ich folgendes Problem:

    Wenn ich im Code versuche, mittels 'FWordApp.ActivePrinter := sPrinter;' den Drucker zu setzen gelingt dies zwar, jedoch wird gleichzeitig auch der StandardDrucker auf 'sPrinter' gesetzt.

    Kann mir jemand erklären, was ich falsch mache, resp. ob es noch eine andere Möglichkeit gibt, in Word einfach den Printer zu wechseln?

    Vielen Dank im Voraus!!

    Sandro Papenfuss ([email protected])

  • #2
    Hallo,

    das Problem sollte sich einfach umgehen lassen, wenn man vorher den aktuellen Wert für <b>ActivePrinter</b> ausliest und hinterher wieder setzt. Somit lässt das eigene Programm das System in dem Zustand zurück, der zum Zeitpunkt des eigenen Aufrufs vorlag

    Comment


    • #3
      Hallo Andreas

      Vielen Dank für Deine Antwort.

      Der Benutzer hat nun aber leider die Möglichkeit, das Dokument zu öffnen (Aufbereitung via Delphi), anschliessend den Brief zu vervollständigen - und dann bis zum Sankt-Nimmerleinstag zu warten, bis er auch wirklich den Druckauftrag gibt.
      In der Zwischenzeit muss der Standarddrucker jedoch unverändert bleiben.

      Momentan läuft es in meinem Programm so ab, dass kurz vor dem Anzeigen des aufbereiteten Briefes der AvtivePrinter gesetzt wird. Besteht ev. die Möglichkeit, das OnPrint-Event von Word von Delphi aus abzufangen, so dass ich die von Dir beschriebene Aktion dort durchführen könnte?

      Vielen Dank!

      Sandr

      Comment


      • #4
        Hallo,

        ja - das sollte möglich sein, wie das folgende Beispielprojekt für <b>Delphi 5</b> und seinen neuen Office-Komponenten aus der Palettenseite <b>Servers</b> demonstriert. Im Objektinspektor wird dazu eine Ereignisbehandlungsmethode für <b>OnDocumentBeforePrint</b> von <b>TWordApplication</b> angelegt:
        <pre>
        procedure TForm1.ButtonStartClick(Sender: TObject);
        begin
        WordApplication1.Connect;
        StatusBar1.SimpleText := 'Automation läuft....';
        end;

        procedure TForm1.ButtonStopClick(Sender: TObject);
        var
        vSaveChanges : OleVariant;
        begin
        vSaveChanges := WdDoNotSaveChanges;
        try
        WordApplication1.Quit(vSaveChanges);
        WordApplication1.Disconnect;
        except
        on E: Exception do
        begin
        Showmessage(E.Message);
        WordApplication1.Disconnect;
        end;
        end;
        StatusBar1.SimpleText := '';
        end;

        procedure TForm1.ButtonDokumentClick(Sender: TObject);
        begin
        WordApplication1.Visible := True;
        WordApplication1.Documents.AddOld(EmptyParam, EmptyParam);
        WordDocument1.ConnectTo(WordApplication1.ActiveDoc ument);
        WordApplication1.PrintOutOld;
        end;

        procedure TForm1.WordApplication1DocumentBeforePrint(Sender: TObject;
        var Doc, Cancel: OleVariant);
        begin
        ListBox1.Items.Add('OnDocumentBeforePrint');
        ListBox1.Items.Add(WordApplication1.ActivePrinter) ;
        //... Drucker neu setzen
        end;
        </pre>
        In den anderen Ereignissen (zum Beispiel <b>OnDocumentBeforeClose</b>) kann der Drucker wieder auf den vorher gesicherten Eintrag zurückgesetzt werden

        Comment


        • #5
          Hallo Sandro ich habe da auch ein Problem!
          Hilfe...
          Ich muß den Druckertreiber von Word umstellen.
          Bei dem Quellcode der hier vorliegt bekomme
          Ich immer die Meldung das diese Operation nicht
          unterstützt wird.
          Entwicklungsumgebung ist Delphi 4.0.
          Windows NT.
          Word 97.

          procedure DoWORDPrint(FileName,PrinterName:String);
          begin
          WinWord:=CreateOleObject('Word.Application');
          WinWord.Documents.Open(FileName);
          WinWord.ActiveDocument.ActivePrinter:=PrinterName;
          WinWord.ActiveDocument.PrintOut;
          WinWord.ActiveDocument.Close(wdDoNotSaveChanges);
          end;

          Mit besten Dank im voraus.
          Günter.Willatowski
          Programmierer
          Email: [email protected]

          Comment


          • #6
            Hallo,

            die ActivePrinter-Eigenschaft gehört zum <b>Application</b>-Objekt von Word und nicht zum <b>Document</b>-Objekt. Daher kann der Aufruf "WinWord.ActiveDocument.ActivePrinter:=PrinterName " nicht funktionieren, allerdings sollte "WinWord.ActivePrinter:=PrinterName" erfolgreich sein

            Comment

            Working...
            X