Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Canvas als PDF speichern oder ausdrucken

  Alt 17. Jul 2015, 01:35
Klingt nach dem Adapter-Pattern: Adapter mit Delegation (Objektadapter)
Delphi-Quellcode:
unit Unit1;

interface

uses
  System.Classes,
  Vcl.Graphics,
  SynPdf;

type
  ICanvas = interface
    ['{F4E825EF-5ADF-42AB-B5E1-8CF82BA5DCDB}']
    procedure TextOut( X: Integer; Y: Integer; const Text: string );
  end;

  TVclCanvas = class( TInterfacedObject, ICanvas )
  private
    FCanvas: TCanvas;
  public
    constructor Create( ACanvas: TCanvas );
    procedure TextOut( X: Integer; Y: Integer; const Text: string );
  end;

  TSynPdfCanvas = class( TInterfacedObject, ICanvas )
  private
    FCanvas: TPdfCanvas;
  public
    constructor Create( ACanvas: TPdfCanvas );
    procedure TextOut( X: Integer; Y: Integer; const Text: string ); override;
  end;

implementation

{ TVclCanvas }

constructor TVclCanvas.Create( ACanvas: TCanvas );
begin
  inherited Create;
  FCanvas := ACanvas;
end;

procedure TVclCanvas.TextOut( X, Y: Integer; const Text: string );
begin
  FCanvas.TextOut( X, Y, Text );
end;

{ TSynPdfCanvas }

constructor TSynPdfCanvas.Create( ACanvas: TPdfCanvas );
begin
  inherited Create;
  FCanvas := ACanvas;
end;

procedure TSynPdfCanvas.TextOut( X, Y: Integer; const Text: string );
begin
  FCanvas.TextOut( X, Y, Text );
end;

end.
und in der Anwendung selber:
Delphi-Quellcode:
procedure PrintOnCanvas(ACanvas: ICanvas);
begin
  ACanvas.TextOut( 300, 700, 'Dies ist ein Test-Text');
end;

procedure PrintPdf;
var
  LCanvas: ICanvas;
begin
  LCanvas := TSynPdfCanvas.Create( lPdf.Canvas );
  PrintOnCanvas( LCanvas );
end;

procedure PrintOnPrinter;
var
  LCanvas: ICanvas;
begin
  LCanvas := TVclCanvas.Create( lPdf.Canvas );
  PrintOnCanvas( LCanvas );
end;
Das immer nach dem Motto
Zitat:
Was nicht passt, wird passend gemacht!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat