Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi mehrfaches Nachrichten-Event verhindern... (https://www.delphipraxis.net/127344-mehrfaches-nachrichten-event-verhindern.html)

locutus2k5 11. Jan 2009 19:16


mehrfaches Nachrichten-Event verhindern...
 
Hallo Gemeinte!

Ich habe ein kleines Programm geschrieben, welches mir erlaubt die Anzahl der gedruckten Seiten auszugeben.
Jetzt steh ich aber vor dem Problem, das offenbar die Nachricht, das der Job erledigt ist, mehrfach in meinem Programm ausgelöst wird. Ich brauche nun aber die letzte Nachricht um zum korrekten Ergebniss zu kommen. Wie bewerkstellige ich das am besten?

Die folgende Procedure stellt dar, wie ich die ankommende Nachricht - das der Job erledigt ist - behandle bzw. mit den Daten umgehe. Diese Procedure wird allerdings mehrfach aufgerufen. Ich glaube nicht das ich das verhindern kann, aber es muss doch einen Weg geben das Ergebnis (in meinem Fall die Anzahl der gedruckten Seiten) des letzten Events zu verarbeiten. Doch wie bekomme ich raus wann die letzte Nachricht ankommt???

Da ich dazu neige, wichtige Details in meinen Posts zu vergessen, möchte ich mich dafür schonmal entschuldigen...

Hier der Code welcher mehrfach aufgerufen wird - wenn der Druck-Job beendet ist:
Delphi-Quellcode:
procedure TMain.JobNotification(const jobinfo: TPBJobInformation);
const
  orientations: Array [TPrinterOrientation] Of String =
    ('Hochformat', 'Querformat');
var
  item: TListitem;
begin
  listview1.Items.BeginUpdate;
    Try
      item := listview1.Items.Add;
      item.Caption := FormatDateTime('dd-mm-yyyy', Date );
      item.SubItems.Add( FormatDateTime( 'hh:nn:ss:zzz', Time ));
      item.SubItems.Add( GetEnumName( Typeinfo( TPBJobStatus), Ord( jobinfo.Status)));
      item.SubItems.Add( IntToStr( jobinfo.JobID ));
      item.SubItems.Add( jobinfo.Computer );
      item.SubItems.Add( jobinfo.User );
      item.SubItems.Add( jobinfo.PrinterName );
      item.SubItems.Add( jobinfo.Document );
      item.SubItems.Add( IntToStr( jobinfo.Pages ));
      item.SubItems.Add( IntToStr( jobinfo.BytesPrinted ));
      item.SubItems.Add( IntToStr( jobinfo.TotalPages ));
      If jobinfo.Status = jsCompleted Then
      begin
        Label8.Caption := IntToStr(StrToInt(Label8.Caption) + jobinfo.TotalPages);
        Label12.Caption := IntToStr(StrToInt(Label12.Caption)+5);
        RegWriteInt(HKCU, TSPath, 'Pages', StrToInt(Label8.Caption));
        RegWriteInt(HKCU, TSPath, 'Costs', StrToInt(Label12.Caption));
        JvLog.Add('Pages', Label8.Caption);
        JvLog.Add('Costs', Label12.Caption);
      end;
      item.SubItems.Add( IntToStr( jobinfo.TotalBytes ));
      item.Subitems.Add( IntToStr( jobinfo.Copies ));
      item.Subitems.Add( orientations[ jobinfo.Orientation ]
      );
    Finally
      listview1.Items.EndUpdate;
    End; { Finally }
end;

locutus2k5 11. Jan 2009 23:13

Re: mehrfaches Nachrichten-Event verhindern...
 
Hat sich erledigt! Hab's anders gemacht. Man braucht ja nur die aktuelle gedruckten Seite mit Totalpages vergleichen, wenn beides stimmt - und das geschieht nur einmal, hat man auch nur einmal das gesuchte Ergebnis.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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