AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WordApplication in Thread ausführen?

Ein Thema von bwolf · begonnen am 14. Feb 2008 · letzter Beitrag vom 2. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#1

WordApplication in Thread ausführen?

  Alt 14. Feb 2008, 11:33
Hi all,

ich benutze die WordApplication Componente um aus meinem Programm heraus Serienbriefe zu drucken.
Mein Problem ist, das, wenn ein Serienbrief am drucken ist, meine Anwendung blockiert wird.

Nun meine Frage, was es für möglichkeiten gibt dies zu unterbinden?
Vermutrlich muß man mit Threads arbeiten - kenne mich dahingehend leider überhaupt nicht aus, und wollet mal schauen ob hier einer mal ähnliches gemacht hat.
Evt. gibts ja auch eine ganz andrer Lösung - bin auf jeden Fall dankbar für eure Tips!

Thx & Greets,
ben
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: WordApplication in Thread ausführen?

  Alt 14. Feb 2008, 12:04
Grundsätzlich ist sowas möglich. Jedoch solltest du hier die VCL-Wrapper vermeiden und direkt mit den COM-Objekten arbeiten. Und augrund meiner Erfahrungen mit Adobe-SW (ok, Adobe und SW-Qualität) ist es nicht umbedingt gesagt das dies im Thread ausgeführt stabil laufen muss. Aber Probieren geht über studieren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#3

Re: WordApplication in Thread ausführen?

  Alt 14. Feb 2008, 14:49
Zitat von bwolf:
Hi all,

ich benutze die WordApplication Componente um aus meinem Programm heraus Serienbriefe zu drucken.
Mein Problem ist, das, wenn ein Serienbrief am drucken ist, meine Anwendung blockiert wird.

Nun meine Frage, was es für möglichkeiten gibt dies zu unterbinden?
Vermutrlich muß man mit Threads arbeiten - kenne mich dahingehend leider überhaupt nicht aus, und wollet mal schauen ob hier einer mal ähnliches gemacht hat.
Evt. gibts ja auch eine ganz andrer Lösung - bin auf jeden Fall dankbar für eure Tips!

Thx & Greets,
ben
Hallo,

Threads sind die übliche Lösung, aber zuvor sollte man nochmal nachdenken - meine Erfahrung ist, dass es in den meisten Fällen für die Hauptanwendung auch garnichts Sinnvolles zu tun gibt - also die Frage: was soll und kann deine Anwendung machen, während die Briefe gedruckt werden?

Gruss Reinhard
  Mit Zitat antworten Zitat
ManuelR

Registriert seit: 14. Dez 2005
Ort: Backnang
57 Beiträge
 
Delphi 2010 Professional
 
#4

Re: WordApplication in Thread ausführen?

  Alt 14. Feb 2008, 15:05
Hallo,

so bleibt nichts hängen:

Delphi-Quellcode:
procedure TForm1.WordStartenClick(Sender: TObject);
var Word: variant;
begin
  inherited;
  Screen.Cursor := crHourglass;
  try
    {Es wird zuerst versucht, eine laufende Word-Instanz zu verwenden}
    word:=GetActiveOleObject('Word.Application');
  except
    try
      {Läuft Word noch nicht, wird eine neue Verbindung aufgebaut}
      Word:=CreateOleObject('Word.Application');
    except
      {Schlägt sie fehl (Word nicht installiert), gibt es eine Fehlermeldung}
      ShowMessage('Microsoft Word kann nicht starten.');
      screen.cursor:=crDefault;
      exit;
    end;
  end;
  word.visible:=true;
  word:=unassigned;
  screen.cursor:=crDefault;
end;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: WordApplication in Thread ausführen?

  Alt 14. Feb 2008, 15:38
warum bleibt so nichts hängen? Für mich sieht das so aus als ob einfach nur eine Sanduhr angezeigt wird aber sonst walles normal ist. (das soll keine Kritik sein sondern beschreibt das was ein Unwissender wie ich hier sehe)

wofür machst du zu beginn ein inherited?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: WordApplication in Thread ausführen?

  Alt 14. Feb 2008, 16:31
Noch was ist zu beachten:

Jeder Thread der mit COM arbeitet muss am Anfang "OLEInitialize" ausführen und am Ende "OLEUnInitialize"!

Im Hauptthread einer Delphi-Anwendung muss man sich nicht darum kümmern, das macht das Laufzeitsystem schon. In eigenen Threads muss man sich allerdings selbst drum kümmern.

Ciao,
ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: WordApplication in Thread ausführen?

  Alt 14. Feb 2008, 16:43
Zitat von bwolf:
Mein Problem ist, das, wenn ein Serienbrief am drucken ist, meine Anwendung blockiert wird.
Schon versucht, Word im Hintergrund drucken zu lassen ?
Das könnte die Blockierungszeit so weit reduzieren, dass es akzeptabel wird.
Andreas
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#8

Re: WordApplication in Thread ausführen?

  Alt 22. Feb 2008, 15:34
Hi all und Danke für eure ganzen antworten...werde nun nochmal versuchen den ganzen Kram in nen Thread zu packen, vieleicht klappts ja diesmal mit euren ratschlägen


Zitat von shmia:
Zitat von bwolf:
Mein Problem ist, das, wenn ein Serienbrief am drucken ist, meine Anwendung blockiert wird.
Schon versucht, Word im Hintergrund drucken zu lassen ?
Das könnte die Blockierungszeit so weit reduzieren, dass es akzeptabel wird.
Ja das habe ich schon probiert...(das ging doch mit word.PrintOut(false); oder?)
Das problem dabei ist: Es wird dann nicht mehr richtig ausgedruckt; der Drucker bekommt zwar seinen Auftrag und zeigt das er was drucken will, tut dies aber nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: WordApplication in Thread ausführen?

  Alt 22. Feb 2008, 22:51
Hallo bwolf,

ich glaube nicht das man das mit einem Thread lösen kann, ich vermute vielmehr das, dass Problem an MSWord liegt. Mit PrintOut wird kein Ausdruck im Hintergrund ausgeführt. Wenn man also drucken will, so muss der Ausdruck im Vordergrund gestartet werden, was bedeutet das Word während dieser Zeit blockiert ist. Normaler Weise wird mit FALSE der Hintergrunddruck verhindert, sodass der Ausdruck auch erfolgt.

Es gibt eine alternative zur PrintOut-Methode und zwar die Execute – Methode des Drucken – Dialogfeldes.

Ich habe mal ein kleiner Code – Schnipsel als Beispiel. Er müsste natürlich noch an Deine Bedürfnisse angepasst werden. Für Serienbriefe habe ich die Exceute – Methode zwar noch nicht verwendet, aber vielleicht funktioniertes.


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
   coDoc= 'c:\Test.dot';

var
  Word: _Application;
  Doc: _Document;
  Para: Paragraph;
  aRange: Range;
  oleParam: OleVariant;
begin
  Word:= CoWordApplication.Create;
  Word.Visible:= TRUE;
  oleParam:= coDoc;
  Word.Documents.OpenOld(oleParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                          EmptyParam, EmptyParam, EmptyParam,EmptyParam,
                          EmptyParam);

 Word.Dialogs.Item(wdDialogFilePrint).Execute;
 ShowMessage('Alles Klar');
 oleParam:= FALSE;
 Word.Quit(oleParam,EmptyParam,EmptyParam);
end;
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#10

Re: WordApplication in Thread ausführen?

  Alt 2. Sep 2009, 11:33
Hallo,

ich suchte gerade nach einer Möglichkeit ein Worddokument über Delphi auszudrucken, da traf ich auf Chemikers Code. Allerdings stehe ich damit vor einem Rätsel! Kann mir bitte jemand verraten, warum der Code ohne Zeile 20 ShowMessage('Alles Klar'); nichts ausdruckt???

Gruß
E-gon
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 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