![]() |
TPrinter: Portrait auf Landscape umzuschalten
Hallo,
gibt es eine Möglichkeit innerhalb eines Druckauftrages von Portrait auf Landscape umzuschalten? Folgendes funktioniert nicht:
Delphi-Quellcode:
Danke und beste Grüße
Printer.Orientation:=poPortrait; //gilt für den gesamten Druckauftrag
Printer.BeginDoc; Printer.Canvas.TextOut(100, 100, 'Seite 1'); Printer.NewPage; Printer.Orientation:=poLandscape; //erwarteter Fehler Printer.Canvas.TextOut(100, 100, 'Seite 2'); Printer.EndDoc; |
AW: TPrinter: Portrait auf Landscape umzuschalten
Nö das geht nicht:
Zitat:
Gruß K-H |
AW: TPrinter: Portrait auf Landscape umzuschalten
Hallo,
Zitat:
Die Orientation bei einem Druckjob kann nur außerhalb einer Seite umgestellt werden. Das Problem ist das NewPage:
Delphi-Quellcode:
Das Umschalten müsste zwischen
procedure TPrinter.NewPage;
begin CheckPrinting(True); EndPage(DC); StartPage(DC); Inc(FPageNumber); Canvas.Refresh; end;
Delphi-Quellcode:
und
EndPage(DC);
Delphi-Quellcode:
stattfinden. Meine Lösung war damals, den Sourcecode von TPrinter kopieren und das NewPage in EndPage und StartPage zerlegen.
StartPage(DC);
einbeliebigername. |
AW: TPrinter: Portrait auf Landscape umzuschalten
Zitat:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Device : array[0..255] of char; Driver : array[0..255] of char; Port : array[0..255] of char; hDeviceMode: THandle; pDevMode: PDeviceMode; begin With Printer Do Begin BeginDoc; try Canvas.font.size := 20; Canvas.font.name := 'Arial'; Canvas.TextOut( 50, 50, 'This is portait'); GetPrinter(Device, Driver, Port, hDeviceMode); pDevMode := GlobalLock( hDevicemode ); With pDevMode^ Do Begin dmFields := dmFields or DM_ORIENTATION; dmOrientation := DMORIENT_LANDSCAPE; End; { Cannot use NewPage here since the ResetDc will only work between EndPage and StartPage. As a consequence the Printer.PageCount is not updated. } Windows.EndPage( Printer.Handle ); If ResetDC( canvas.Handle, pDevMode^ ) = 0 Then ShowMessage( 'ResetDC failed, '+SysErrorMessage(GetLastError)); GlobalUnlock( hDeviceMode ); Windows.StartPage( Printer.Handle ); Printer.Canvas.Refresh; Canvas.font.size := 20; Canvas.font.name := 'Arial'; Canvas.TextOut( 50, 50, 'This is landscape'); finally EndDoc; end; End; end; |
AW: TPrinter: Portrait auf Landscape umzuschalten
Ich habe mal Folgendes in Printers.pas eingebaut:
Delphi-Quellcode:
Leider erhalte dabei die Fehlermeldung:
procedure NewPage;
procedure BeginNewPage; procedure EndNewPage; ... [PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)] procedure TPrinter.NewPage; begin CheckPrinting(True); EndPage(DC); StartPage(DC); Inc(FPageNumber); Canvas.Refresh; end; [PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)] procedure TPrinter.BeginNewPage; begin StartPage(DC); Inc(FPageNumber); Canvas.Refresh; end; [PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)] procedure TPrinter.EndNewPage; begin CheckPrinting(True); EndPage(DC); end; [dcc32 Fataler Fehler] Vcl.Printers.pas(1550): F2613 Unit 'Vcl.Dialogs' nicht gefunden. |
AW: TPrinter: Portrait auf Landscape umzuschalten
Zitat:
|
AW: TPrinter: Portrait auf Landscape umzuschalten
Zitat:
2. Ich erhalte dann den Fehler: Zu wenig Arbeitsspeicher. |
AW: TPrinter: Portrait auf Landscape umzuschalten
Zitat:
Klicke doch auf die Fehlermeldung. Dann wirst du sehen, in welcher Zeile da etwas fehlt. Zitat:
|
AW: TPrinter: Portrait auf Landscape umzuschalten
Zitat:
Zitat:
|
AW: TPrinter: Portrait auf Landscape umzuschalten
Wie ist DC deklariert?
Delphi-Quellcode:
EndPage(DC);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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 by Thomas Breitkreuz