Einzelnen Beitrag anzeigen

locutus2k5

Registriert seit: 28. Jan 2007
Ort: Naumburg
13 Beiträge
 
Delphi 2006 Personal
 
#1

mehrfaches Nachrichten-Event verhindern...

  Alt 11. Jan 2009, 20:16
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;
  Mit Zitat antworten Zitat