Autor Beitrag
coru
Hält's aus hier
Beiträge: 2

Windows 7
Delphi XE2 Starter
BeitragVerfasst: Mi 07.03.12 14:44 
Hallo zusammen!

Ich möchte mittels TPrinter verschiedene Daten aus meinem Programm ausdrucken. Dafür
verwende ich den TPrintDialog. Leider druckt dieser aber immer auf dem Standartdrucker,
obwohl ich im Auswahlmenü einen anderen Drucker ausgewählt habe.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if PrintDialog1.Execute then begin
  myPrinter := TPrinter.Create();
  myPrinter.BeginDoc;
  // Daten Drucken
  myPrinter.Canvas.TextOut(00'text');
  //  noch mehr TextOuts
  ...
  myPrinter.EndDoc;
end;


Das ist im Prinzip, dass was ich mit einem Button Klick auslöse.


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 07.03.2012 um 13:59
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 07.03.12 14:56 
Du darfst nicht "myPrinter" verwenden, sondern musst die global definierte Instanz "Printer" verwenden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 07.03.12 15:08 
Muss ist übertrieben, aber wenn man einen eigenen benutzt (warum in diesem Fall?), muss man die Daten aus dem "echten" Printer-Objekt kopieren, da der Dialog die dorthin packt.
coru Threadstarter
Hält's aus hier
Beiträge: 2

Windows 7
Delphi XE2 Starter
BeitragVerfasst: Mi 07.03.12 15:12 
Danke, jetzt funktioniert es.
Wusste gar nicht, dass schon eine globale Instanz von Printer gibt. Wo sind denn
die Unterschiede zwischen einen eignen und dem globalen?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 07.03.12 15:18 
Stimmt, Jaennicke. Ein "MUSS" ist nicht zwingend. Aber wenn es keine speziellen Notwendigkeiten gibt, sollte man diese verwenden.

Der Unterschied ist, dass sie "immer" da ist und von TPrintDialog gleich korrekt angesteuert wird, ohne dass man sich Gedanken manchen muss. :wink:
Eine eigene habe ich bisher noch nicht benötigt, aber ich kann mir schon ein paar Situationen vorstellen, wo man die Printer-Instanz nicht verändern will.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 07.03.12 16:26 
Wir nutzen eine eigene Printer-Klasse und synchronisieren dort die Daten aus den Dialogen. Leider hat die Standardklasse diverse Fehler gehabt, die erst mit Delphi 2009 oder so behoben wurden. Und andere wichtige Features fehlen schlicht.