Hallo,
ich habe die Reporterzeugung in einen Thread ausgelagert:
Delphi-Quellcode:
procedure TForm_Main.PrintReport(Sender: TObject);
var
ReportThread: TReportThread;
begin
ReportThread:= TReportThread.create(true,'Packauftrag',FocusedGrid,0);
...
constructor TReportThread.create(CreateSuspended: Boolean;ReportName: String;
Grid: TDBGrid; PrinterIndex: Integer);
begin
// Thread erzeugen und suspendieren
inherited Create(CreateSuspended);
// Initialisieren
FGrid:= Grid;
FPrinterIndex:= PrinterIndex;
FReportName:=ReportName;
// Thread starten
self.Suspended:= false;
end;
{- TReportThread.Execute }
procedure TReportThread.Execute;
begin
// Diese Funktion habe ich vorher direkt aus der Anwendung aufgerufen
// Jetzt ist sie in diesem Thread gekapselt
DM_Report.PrintReport(FReportName, FGrid,FPrinterIndex);
end;
Mein Problem: Beim Drucken und des eigentlichen Aufrufs 'ExecuteReport' in der Klasse DMReport kommt es öfter zu der Fehlermeldung:
EInvalidOperation with message 'Canvas does not allow drawing'
Diese Meldung tritt aber nicht immer auf. Setze ich beim Aufruf von 'ExecuteReport' einen BreakPoint und lasse die Anwendung von dort weiterlaufen, gibt es keine Fehlermeldung. Auch der direkte Aufruf bevor ich Threads benutzte klappte...?!
Kann mir jemand helfen?