2017-04-11 3 views
0

Ich habe ein Formular, das ich drucken muss, aber nur einen bestimmten Abschnitt davon und dann vergrößern Sie es (erhöhen Sie die Skala). Bisher habe ich folgenden Code:Delphi einen benutzerdefinierten Bereich eines Formulars drucken

procedure TForm1.PrintButtonClick(Sender: TObject); 
var 
    printDialog : TPrintDialog; 

    begin 
    printDialog := TPrintDialog.Create(Form1); 
    if printDialog.Execute then 
    begin 
     Printer.Orientation := poLandscape; //Better fit than portrait 
     Form1.PrintScale:=poPrintToFit;   
     Form1.Print; 

    end; 
    end; 

Allerdings druckt das ganze Formular. Ich habe gegoogelt und ein paar verschiedene Dinge gefunden, die helfen könnten, aber ich bin nicht sicher, wie man sie benutzt:

GetFormImage - Gibt es eine Möglichkeit, einen bestimmten Bereich mit diesem zu wählen oder nimmt es einfach das ganze Formular ?

Verwendung eines Rechtecks ​​mit gegebenen Koordinaten, z. B. rectangle1: = rect (Links, Oben, Rechts, Unten); aber dann, wie drucke ich das Rechteck zu einer größeren Größe skalieren und drucken? Genauso, wenn Delphi nur die Eigenschaften Links und Oben angibt, ist Richtig nur ein anderer Name für den weitesten linken Wert, zu dem Sie gehen möchten?

UPDATE: Ich habe versucht, ein benutzerdefiniertes Bitmap zu erstellen und es dann zu strecken, aber ich verwende das strechdraw nicht korrekt. Es ist nicht wirklich strecken, wenn sie gedruckt:

procedure TForm1.PrintButtonClick(Sender: TObject); 

    var 
    printDialog: TPrintDialog; 
    Rectangle, stretched: TRect; 
    Bitmap: TBitmap; 
    begin 
    Bitmap := TBitmap.Create; 
    try 
     Rectangle := Rect(0, 90, 1450, 780); 
     stretched := Rect(0, 0, 5000, 3000); //what numbers do i put in here for streching it? 
     Bitmap.SetSize(Form1.Width, Form1.Height); 
     Bitmap.Canvas.CopyRect(Rectangle, Form1.Canvas, Rectangle); 
     Bitmap.Canvas.StretchDraw(stretched, Bitmap); //not sure how to use this 
    finally 
     printDialog := TPrintDialog.Create(Form1); 
     if printDialog.Execute then 
     begin 
     with printer do 
     begin 
      BeginDoc; 
      Canvas.Draw(0, 90, Bitmap); 
      EndDoc; 
     end; 
     end; 
     Bitmap.Free; 
    end; 
    end; 

Ist der Versuch und schließlich notwendig? Wenn ich ohne StretchDraw gedruckt war es wirklich klein, aber wenn ich mit dem StretchDraw gedruckt, viel das Bild fehlte so muss ich es falsch

+0

Was "neues Layout"? Es funktioniert seit mindestens 4-5 Jahren auf die gleiche Weise, seit ich diese Webseite benutze. Wählen Sie Ihren Code und klicken Sie dann auf die Schaltfläche "Code formatieren". –

+0

@JerryDodge Ich wusste, dass ich etwas geändert habe. Ich bin versehentlich auf die mobile Seite gewechselt – L2C

+0

Sie missverstehen den Zweck von TPrintDialog. Es konfiguriert einfach die Druckeroptionen; Es geht nicht um die Aufgabe, tatsächlich zu drucken. Wenn Sie ein anderes als das Standardverhalten von TForm.Print benötigen, müssen Sie es selbst programmieren. Und der rechte Wert eines Rechtecks ​​ist links + Breite, genau wie unten ist oben + Höhe. –

Antwort

1

Befreien Sie sich von Ihrer stretched Variable und die Bitmap.Canvas.StretchDraw (Sie auch verwenden können Befreien Sie sich von TPrintDialog, wenn Sie möchten).

// Capture your bitmap content here, and then use this code to scale and print. 
Printer.Orientation := poLandscape; 
Printer.BeginDoc; 
Printer.Canvas.StretchDraw(Rect(0, 0, Printer.PageWidth, Printer.PageHeight), Bitmap); 
Printer.EndDoc; 
+0

Das hat super funktioniert, danke – L2C

Verwandte Themen