Probleme beim drucken

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Probleme beim drucken

Beitrag von Latze »

Schon wieder der....


Ich such mich gerade blöd, mein Programm läuft ohne Probleme. Nur wenn ich etwas ausdrucke, kommt beim beenden vom Programm ein SIGSEGV. Heaptrace hat 12 nicht freigegebene Speicherblöcke gefunden. Irgendwie scheint der Druck da was durcheinander zu bringen. Den Druck erledige ich mit

Code: Alles auswählen

if printdialog1.execute then
begin
  printer.title := 'Testausdruck';
  printer.begindoc;
  printer.canvas.Font.size := 15;
  printer.canvas.font.style := printer.canvas.font.style + [fsbold];
  .
// diverse Berechnungen und Ausgaben   
  .
  printer.enddoc;
end;


Ich hab auch schon zusätzlich printer.free und printer.destroy probiert, brachte aber keine Besserung.

Bei den Meldungen ist zum Beispiel TCUSTOMFORM_DOSHOW dabei, bring ich beim Drucken was durcheinander? Ich steh auf jeden fall ziemlich blöd da...
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Probleme beim drucken

Beitrag von Hitman »

Ich denke auf Heaptrace solltest du da nicht hören, da bei einer SIGSEGV das Programm abbricht und somit auf jeden Fall nicht freigegebene Speicherblöcke übrig bleiben. Was hingegen interessanter wäre, bei dem Crash mal in den Stacktrace zu schauen, den du dir in Lazarus ja anzeigen lassen kannst. Dann kannst du zumindest nachverfolgen, was zu dem Crash geführt hat.

Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: Probleme beim drucken

Beitrag von Latze »

Das Problem saß mal wieder direkt vor dem Monitor.... Ich habe den Code für den Ausdruck aus einem Projekt, mit dem ich den Ausdruck getestet habe, genommen und jetzt gesehen, dass ich da noch SQLQuery1.fields.clear; und SQLQuery1.close; drinnen hatte, obwohl ich das keine SQL-Abfrage beim drucken nutze... :oops: Ohne geht es natürlich, sorry brauch wohl 'ne Brille.

Danke für den Hinweis mit dem Stacktrace, dazu habe ich noch eine Frage. Erst mal der Trace:

Code: Alles auswählen

[FORMS.PP] ExceptionOccurred 
  Sender=EAccessViolation
  Exception=Access violation
  Stack trace:
  $0040A3AF
  $004940ED  TCONTROL__DESTROY,  line 3811 of ./include/control.inc
  $004893C3  TWINCONTROL__DESTROY,  line 5889 of ./include/wincontrol.inc
  $0049578E  TCUSTOMCONTROL__DESTROY,  line 61 of ./include/customcontrol.inc
  $0041614A  TSCROLLINGWINCONTROL__DESTROY,  line 272 of ./include/scrollingwincontrol.inc
  $00416BAC  TCUSTOMFORM__DESTROY,  line 107 of ./include/customform.inc
  $0040A3B2
  $00413FAD  BEFOREFINALIZATION,  line 1439 of forms.pp
  $0040C509
TApplication.HandleException Access violation
  Stack trace:
  $0040A3AF
  $004940ED  TCONTROL__DESTROY,  line 3811 of ./include/control.inc
  $004893C3  TWINCONTROL__DESTROY,  line 5889 of ./include/wincontrol.inc
  $0049578E  TCUSTOMCONTROL__DESTROY,  line 61 of ./include/customcontrol.inc
  $0041614A  TSCROLLINGWINCONTROL__DESTROY,  line 272 of ./include/scrollingwincontrol.inc
  $00416BAC  TCUSTOMFORM__DESTROY,  line 107 of ./include/customform.inc
  $0040A3B2
  $00413FAD  BEFOREFINALIZATION,  line 1439 of forms.pp
  $0040C509


Da finde ich nun keinen Hinweis auf den Fehler oder sollte ich mir da noch Wissen aneignen?
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

Antworten