AGB  ·  Datenschutz  ·  Impressum  







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

TPrinter: Portrait auf Landscape umzuschalten

Ein Thema von tomkupitz · begonnen am 29. Jun 2019 · letzter Beitrag vom 14. Nov 2021
Antwort Antwort
tomkupitz

Registriert seit: 26. Jan 2011
355 Beiträge
 
Delphi 12 Athens
 
#1

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 30. Jun 2019, 18:04
Zitat:
Dann binde doch die VCL.Dialogs unter uses mit ein.
1. Warum, bei diesen Änderungen?
2. Ich erhalte dann den Fehler: Zu wenig Arbeitsspeicher.
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.654 Beiträge
 
Delphi 12 Athens
 
#2

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 30. Jun 2019, 18:13
1. Warum, bei diesen Änderungen?
Hast du vielleicht einen Öffnen/Speichern Dialog noch mit eingebaut?
Klicke doch auf die Fehlermeldung. Dann wirst du sehen, in welcher Zeile da etwas fehlt.

2. Ich erhalte dann den Fehler: Zu wenig Arbeitsspeicher.
Dafür habe ich keine Erklärung, aber vielleicht reicht es, Delphi oder den Rechner neu zu starten.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
355 Beiträge
 
Delphi 12 Athens
 
#3

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 30. Jun 2019, 18:45
Zitat:
Hast du vielleicht einen Öffnen/Speichern Dialog noch mit eingebaut?
Nein, nur gezeigten Code.

Zitat:
Klicke doch auf die Fehlermeldung. Dann wirst du sehen, in welcher Zeile da etwas fehlt.
Fehlerzeile ist letzte Printers.pas Zeile -> end.
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.654 Beiträge
 
Delphi 12 Athens
 
#4

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 30. Jun 2019, 19:10
Wie ist DC deklariert?
EndPage(DC);
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 30. Jun 2019, 19: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
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.458 Beiträge
 
Delphi 12 Athens
 
#6

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 1. Jul 2019, 14: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
355 Beiträge
 
Delphi 12 Athens
 
#7

AW: TPrinter: Portrait auf Landscape umzuschalten

  Alt 2. Jul 2019, 10: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
Antwort Antwort


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 +1. Es ist jetzt 13:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz