Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TPrinters BeginDoc erzeugt EAccessViolation (https://www.delphipraxis.net/147031-tprinters-begindoc-erzeugt-eaccessviolation.html)

Popov 31. Jan 2010 16:31


TPrinters BeginDoc erzeugt EAccessViolation
 
Eigentlich sollte es ein Miniprogramm auf die Schnelle werden. Ich muß jede Woche Namen mit Datum in ca. 50 Formulare eintragen. Warum es nicht automatisieren, dachte ich mir? Dafür sind Programmiersprachen da um Menschen Arbeit abzunehmen. Aber schon die erste Idee mit QuickReport scheiterte daran, daß die Ausdrucke zwar auf allen PDF-Druckern funktionierten, nur bei meinem Laserdrucker immer ein Error auslöste.

Warum lange mit einem Problem aufhalten, dann nehme ich eben TPrinter. Das funktioniert auf meinem Laser-Drucker wunderbar, erzeugt aber bei allen PDF-Druckern eine EAccessViolation Meldung. Und ich weiß nicht warum.

Das ist der Code den ich auf das nötigste gekürzt habe:

Delphi-Quellcode:
var
  Printer2: TPrinter;
begin
  Printer2 := TPrinter.Create;
  try
    with Printer2 do
    begin
      BeginDoc;
      NewPage;
      EndDoc;
    end;
  finally
    Printer2.Free;
  end;
end;
Bereits bei BeginDoc gibt es eine EAccessViolation Meldung. Aber nur wenn ich auf PDF Druckern drucke. Davon habe ich inzwischen drei Versionen die sich im Laufe der Zeit angesammelt haben.

Ich sehe da keinen Fehler. Das Sonderbare ist aber, daß ich das Demobeispiel aus der Delphihilfe auch getestet habe und dieses wiederum auf allen Druckern funktioniert. Man könnte meinen, daß ich vor diesem Code irgendwas zerschossen habe, ist aber nicht so. Vor diesem Code wird nichts ausgeführt.

Eigentlich ist das Problem nicht dringend, da es auf den Laserdrucker ankommt, aber es wurmt micht wieso es bei einigen Druckern Fehlermeldungen gibt. Kennt das einer und hat das Problem erfolgreich behoben?

daywalker9 31. Jan 2010 16:36

Re: TPrinters BeginDoc erzeugt EAccessViolation
 
hi!

du musst auch den PrinterIndex setzten, dann sollte es keine probleme mehr geben

gruß!

Luckie 31. Jan 2010 16:41

Re: TPrinters BeginDoc erzeugt EAccessViolation
 
Das Printer Objekt darf man nicht erzeugen. Einfach die Unit Printers einbinden und Printer verwenden:
Delphi-Quellcode:
if PrintDialog.Execute then
  begin
    with Printer do
    begin
      Title := APPNAME;
      BeginDoc;

Popov 31. Jan 2010 17:13

Re: TPrinters BeginDoc erzeugt EAccessViolation
 
Zitat:

Zitat von daywalker9
du musst auch den PrinterIndex setzten, dann sollte es keine probleme mehr geben

Das tat ich auch, ich hab nur eben alle weg gekürzt. Obwohl ein Muss ist es nicht, da, wenn nichts eingestellt ist, der Wert -1 ist und das den Standarddrucker ergibt.

Zitat:

Zitat von Luckie
Das Printer Objekt darf man nicht erzeugen. Einfach die Unit Printers einbinden und Printer verwenden:

Ich muß jetzt gleich weg, hab es aber auf die Schnelle ausprobiert und es scheint zu funktionieren. Danke dir.

Ich schreibt gleich noch mehr wenn ich zurück bin.

Luckie 31. Jan 2010 17:15

Re: TPrinters BeginDoc erzeugt EAccessViolation
 
Nur nicht hetzen, sonst brichst du dir bei dem Wetter noch ein Bein.


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