Announcement

Collapse
No announcement yet.

Abbrechen eines langen Druckjobs

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

  • Abbrechen eines langen Druckjobs

    Hallo,

    unter MsDos und Borland-Pascal war ich gewohnt, ein Abbrechen oder Anhalten eines Druckjobs durch einen Druck auf die Leertaste (o.a.) einzuleiten. Danach erfolgte der Fragedialog "Weiterdrucken oder Abbrechen ?"

    Wie kann ich derartiges unter Windows und Delphi 4/5 realisieren ?

    Vielen Dank!<br>
    Helmut

  • #2
    Hallo!

    Den Druck-Auftrag kannst du mit <b>Printer.Abort;</b> abbrechen. Die Leertaste fragst du während dem Drucken am besten ab und zu mit der <b>GetAsyncKeyState</b>-API-Routine ab. (Alternative: Application.ProcessMessages & OnKeyIrgendwas-Ereignisse)<p>
    Pseudo-Codebeispiel:<P>
    <pre>
    while NochNichtAllesGedruckt do
    begin
    SeiteDrucken;
    if GetAsyncKeyState(VK_SPACE) <> 0 then
    if MessageDlg('Weiterdrucken?', mtConfirmation, [mbOK, mbCancel], 0) = mrCancel then
    break;
    end;
    </pre>

    <p>
    Gruß,<br>
    Bernhar

    Comment


    • #3
      Ups, bin heute wieder mal durcheinander. Natürlich muss der Druckauftrag noch abgeborchen werden, also:<p>
      <pre>
      while NochNichtAllesGedruckt do
      begin
      SeiteDrucken;
      if GetAsyncKeyState(VK_SPACE) <> 0 then
      if MessageDlg('Weiterdrucken?', mtConfirmation, [mbOK, mbCancel], 0) = mrCancel then begin
      Printer.Abort; // Druck abbrechen
      break;
      end;
      end

      Comment


      • #4
        Danke für den Tip!

        Das Problem ist, der gesamte Druckauftrag wird von einem Fremdprogramm (alle Seiten auf einmal) zum Drucker gesandt, für welches in keinen Quelltext habe.

        Es müsste also ein zum Druckjob parallel laufender Task die Tastatur überwachen. Ich bin aber noch nicht soweit so etwas in Eigenregie zu realisieren

        Comment


        • #5
          Hallo,

          wird der Druckauftrag von einer <br>
          a) Fremdkomponente (eigener Prozess), oder wirklich von einem<br>
          b) Fremdprogramm (separater Prozess) generiert?<br>
          Im Fall a)würde ich den Druckjob in einen eigenen Thread legen (TThread), somit kann die eigene Anwendung die Tastatur auf dem normalen Weg auswerten und im Abbruchfall den Thread "abwürgen". <br>
          Im Fall b) könnte man über die API-Funktion <b>TerminateProcess</b> den Prozess killen, aufgrund der Nebenwirkungen steht allerdings im Platform-SDK der folgende Satz: "<i>Use it only in extreme circumstances.</i>"

          Comment


          • #6
            Hallo Herr Kosch!

            Es handelt sich um eine eingebundene Komponente. Der Ausdruck erfolgt auf einen eigenen Canvas, nicht der von Printers (kein Quelltext vorhanden). Alle Seiten werden auf einmal zum Drucker gesandt.

            Ich habe nur die Möglichkeit den Druckbeginn auszulösen. Dann habe ich keine Kontrolle bis zum Ende des Drucks.

            Wie kann ich so ein Schema in einen Thread legen ? Threads sind noch ein dunkles Kapitel für mich.

            Vielen Dank für Ihre Bemühungen.

            Helmu

            Comment

            Working...
            X