Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Tprinter ist NIL, warum? (https://www.delphipraxis.net/160817-tprinter-ist-nil-warum.html)

khh 2. Jun 2011 09:47

Tprinter ist NIL, warum?
 
hallo zusammen,
mit :
DefaultPrnt:=GetDefaultPrinter;
printer.printerindex := printer.printers.indexof (DefaultPrnt);

benutze ich den Standarddrucker zur Druckausgabe ohne Printdialog.

Bei der Zuweisung des Index schmiert das Programm mit SIGSEGV ab.
Mit dem Mauszeiger über printers wird dieser als NIL angezeigt.
Aber warum?
Der gleiche Code in einem anderen Testprogamm funktioniert.
Dort wird printer NICHT als NIL angezeigt.
Die Unit die verwendet wird ist in beiden Programmen die gleiche.
Gruss KH

Klaus01 2. Jun 2011 09:52

AW: Tprinter ist NIL, warum?
 
Guten Morgen,

ich bin mir nicht sicher, aber sollte der printer nicht vor Benutzung initialisiert werden?
Delphi-Quellcode:
printer :=TPrinter.create;
Grüße
Klaus

khh 2. Jun 2011 09:56

AW: Tprinter ist NIL, warum?
 
nee, eben nicht :-(
das ist bei Printers nicht nötig, und wird ja auch im funktionierenden Prog nicht gemacht.

Sir Rufo 2. Jun 2011 10:21

AW: Tprinter ist NIL, warum?
 
Darum
Delphi-Quellcode:
// Auszug aus der Unit Printers

function Printer: TPrinter;
begin
  if FPrinter = nil then
    FPrinter := TPrinter.Create;
  Result := FPrinter;
end;
Jetzt kann ich mir nur noch vorstellen, dass
Delphi-Quellcode:
printer.printers.indexof (DefaultPrnt)
-1 zurückliefert

Edit: Nö, auch nicht ... denn wenn
Delphi-Quellcode:
Printer.Index
auf -1 gesetzt wird, dann wird automatisch der DefaultPrinter ausgewählt.
Somit lässt sich dein Code darauf reduzieren, dass du einfach schreibst
Delphi-Quellcode:
Printer.PrinterIndex := -1;
Sind überhaupt Drucker installiert und ist auch ein Drucker als Standard gewählt?

khh 2. Jun 2011 10:51

AW: Tprinter ist NIL, warum?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1104260)
Darum
Delphi-Quellcode:
// Auszug aus der Unit Printers

function Printer: TPrinter;
begin
  if FPrinter = nil then
    FPrinter := TPrinter.Create;
  Result := FPrinter;
end;

Sind überhaupt Drucker installiert und ist auch ein Drucker als Standard gewählt?

ja, den Index direkt zuweisen geht natürlich.
Das ändert aber nix daran, dass Printer immer noch NIL istund das Prog daher bei der Zuweisung abschmiert.
Und eben nur in einem Prog, im anderen funktionierts ja :-(
Und beide laufen auf der selben Maschine, sprich ein Standarddrucker ist gesetzt.

Sir Rufo 2. Jun 2011 10:59

AW: Tprinter ist NIL, warum?
 
Dann mit DebugDCUs das Projekt nochmal erzeugen und einen Haltepunkt auf die function Printer setzen.

Dann kannst du sehen, wann die aufgerufen wird und ob da was zugewiesen wird.

jaenicke 2. Jun 2011 11:21

AW: Tprinter ist NIL, warum?
 
Ich schätze einmal du hast irgendwo selbst oder in einer Unit eine gleichnamige Variable, Property, ... drin.

khh 2. Jun 2011 11:39

AW: Tprinter ist NIL, warum?
 
Problem gelöst :-)
Vieleicht hätte ich noch sagen sollen, dass es sich um Lazarus handelt.
Da sind dann wohl in der printers einige Unterschiede :-(
Ursache des Fehlers war die Unit printer4lazarus.
Diese war im funktionierenden Projekt eingebunden, im fehlerhaften nicht.
Ist aber zwingend notwendig, damit das Objekt printer ohne explizites create erstellt wird.


ich danke euch für eure Hilfe.

Gruss KHH

Sir Rufo 2. Jun 2011 11:43

AW: Tprinter ist NIL, warum?
 
Zitat:

Zitat von khh (Beitrag 1104269)
Vieleicht hätte ich noch sagen sollen, dass es sich um Lazarus handelt.

Wenn du dein Profil entsprechend bestücken würdest, dann könntest du das nicht mehr vergessen. :roll:

khh 2. Jun 2011 11:50

AW: Tprinter ist NIL, warum?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1104272)

Wenn du dein Profil entsprechend bestücken würdest, dann könntest du das nicht mehr vergessen. :roll:

umgehend erledigt :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 Uhr.
Seite 1 von 2  1 2      

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