AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TPrinter: Portrait auf Landscape umzuschalten

TPrinter: Portrait auf Landscape umzuschalten

Ein Thema von tomkupitz · begonnen am 29. Jun 2019 · letzter Beitrag vom 2. Jul 2019
Antwort Antwort
Seite 2 von 2     12
Schokohase
(Gast)

n/a Beiträge
 
#11

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 30. Jun 2019, 20:49
Das Problem ist ganz woanders ...

In der Vcl.Dialogs wird die Unit Vcl.Printers verwendet. Da aber jetzt das Interface der Unit Vcl.Printers verändert wurde (neue Methoden) kommt der Kompiler/Linker damit nicht mehr klar (weil die vorkompilierte Vcl.Dialogs verwendet wird) und produziert diesen seltsamen Fehler.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
372 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 1. Jul 2019, 11:04
Ich habe mal Folgendes in Printers.pas eingebaut:
Mach das nicht, es ist nie eine gute Idee, eine der Delphi source files direkt zu verändern. Das führt zu Problemen mit anderen RTL/VCL units, die dann eventuell auch neu kompiliert werden müssen, was dann nur geht, wenn Du die Verzeichnisse mit den Sourcefiles in den search path mit aufnimmst, was dann eine ganze Lawine von anderen Versionkonflikten nach sich ziehen kann.

Mach eine Kopie der vcl.printer.pas Datei und benenne die Unit um. Modifiziere diese Datei und verwende sie dann anstelle von vcl.printers in deinem Projekt.
Peter Below
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
253 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 1. Jul 2019, 11:25
vcl.printer.pas ist natürlich eine Kopie im lokalen Projektverzeichnis. Originale Units ändere ich nie.

Aber die Probleme mit der vcl.printer.pas-Kopie sind so einfach nicht lösbar.

Peter: Ich werde mir mal dein Beispiel ansehen.

Danke an alle und beste Grüße
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
130 Beiträge
 
Delphi XE8 Professional
 
#14

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 1. Jul 2019, 14:14
Hallo,

Ich habe es geschafft noch mal in meine alten Sourcen zu schauen. Tatsächlich habe ich damals nicht nur die kopierte (Vcl.)Printer.pas anders benannt, sonder auch die Klassen, Typen und Konstanten umbenannt. Eigentlich sieht mir das jetzt mehr wie nachprogrammiert (was ich heute nicht mehr machen würde) aus.
Wenn man auf das TPrinter. PageNumber verzichten kann, ist Peter’s Variante mitunter einfacher. Es kommt auf die Umgebung an.
Ich bin jetzt noch auf eine Idee gekommen um das Problem mit abhängigen Units zu umgehen.

Delphi-Quellcode:
unit Vcl.Printers.Help;

interface

uses
  System.Classes;

var
  OnPrinterBetweenPage: TNotifyEvent;

implementation

end.
Delphi-Quellcode:
unit Vcl.Printers;
...
implementation

uses
...
  Vcl.Consts,
  Vcl.Printers.Help;
...
procedure TPrinter.NewPage;
begin
  CheckPrinting(True);
  EndPage(DC);
  if Assigned(OnPrinterBetweenPage) then
    OnPrinterBetweenPage(self);
  StartPage(DC);
  Inc(FPageNumber);
  Canvas.Refresh;
end;
Damit bleibt der Interface-Abschnitt von Vcl.Printers unverändert. Man würde dann vor dem Drucken dem OnPrinterBetweenPage eine Methode zuweisen und in dieser wenn nötig das Umschalten der Ausrichtung erledigen.

einbeliebigername.
Mit freundlichen Grüßen, einbeliebigername.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.766 Beiträge
 
Delphi 10.1 Berlin Professional
 
#15

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 1. Jul 2019, 15:18
Moin...
Zitat:
gibt es eine Möglichkeit innerhalb eines Druckauftrages von Portrait auf Landscape umzuschalten?
In den heutigen Zeiten von FastReport (in Delphi dabei und hat mit der Problemstellung keine Probleme ) und Co. auf TPrinter zurückzugreifen ist imho "OldSchool" Wäre ein Reportgenenerator eine Alternative?
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
253 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 2. Jul 2019, 11:14
Eine Lösung ist folgende Helper Klasse, die in die Vcl.Printers.pas eingebaut werden muss:

Delphi-Quellcode:
  ...

  TPrinterHelper = class Helper for TPrinter
  public
    procedure NewPageEx(Orientation: Integer);
  end;
  ...

[PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)]
procedure TPrinterHelper.NewPageEx(Orientation: Integer);
begin
  CheckPrinting(True);
  EndPage(DC);

  FDevMode^.dmOrientation:=Orientation; //DMORIENT_PORTRAIT DMORIENT_LANDSCAPE

  if ResetDC(Canvas.Handle, FDevMode^)=0 then
    Exit;

  StartPage(DC);
  Inc(FPageNumber);
  Canvas.Refresh;
end;
Aufruf dann:

Delphi-Quellcode:
procedure TForm1.FormClick(Sender: TObject);
begin
  Printer.Orientation:=poPortrait;

  Printer.BeginDoc;

  Printer.Canvas.TextOut(100, 100, 'Seite 1');

  Printer.NewPageEx(DMORIENT_LANDSCAPE);

  Printer.Canvas.TextOut(100, 100, 'Seite 2');

  Printer.EndDoc;
end;
Beste Grüße
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
1.567 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 2. Jul 2019, 21:55
oder aber Du schickst die Druckersteuerdaten und die zu druckenden Daten direkt an den Drucker (falls das überhaupt noch geht?)
Ja das geht noch. Eine private Anwendung von mir steuert auf dem Weg ESC/P fähige Kassendrucker an, da diese Sonderfunktionen
haben die man mit normalem GDI Druck so m.W. nicht ansteuern kann: Bon Cut zum Beispiel.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
1.567 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 2. Jul 2019, 21:58
Vielleicht mag auch mal jemand in QP einen "feature request" für das Ursprüngliche Problem
des gewünschten Änderns der Seitenorientierung innerhalb eines Druckauftrages erstellen?

Damit in irgend einer Zukunft nichts mehr an printers.pas geändert werden muss...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf