Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Eigene Instanz von Printers / Fragen zum Druck

  Alt 3. Jun 2008, 07:05
Man ist ja nicht gezwungen die Funktion Printers() zu benützten, sondern kann ja mit FMyPrinter := TPrinter.Create ein neues Objekt anlegen, dass dann auch ein eigenes Printer-Handle hat.
Im Thread dürfen dann aber die Funktionen Printer, SetPrinter und AssignPrn nicht benützt werden, da diese die globale Variable FPrinter benützen.
Könnte nun aber sein, dass gleichzeitiges Drucken aus Hauptanwendung und Thread ein Problem ergibt, da beiden das gleiche Printer-Handle von Windows zugeteilt wird. (nur wenn der gleiche Drucker angesprochen wird)
Dann sollte der Thread so lange warten, bis der Hauptthread fertig ist:
Delphi-Quellcode:
procedure TMyThread.CheckPrn;
var
   i : Integer;
begin
  if myprinter.Handle <> Printer.Handle then Exit; // versch. Drucker -> versch. Printjobs

  // 3 Mal prüfen um die Sicherheit zu erhöhen, den Hauptthread "auf dem falschen Fuss"
  // zu erwischen
  //
  for i := 0 to 2 do
  begin
    // Prüfen, ob Hauptthread gerade druckt
    while Printer.Printing do
       Sleep(500);
    end;
    Sleep(0); // Rechenzeit abgeben
  end;
end;
Für den Hauptthread braucht man wahrscheinlich keine Vorkehrungen zu treffen; weil wenn es dann zu einer Fehlermeldung kommt, kann der Benutzer kurz warten und den Druck erneut auslösen.
  Mit Zitat antworten Zitat