2017-04-11 85 views
0

我有一個表格,我需要打印但只有它的某個部分,然後放大它(增加比例)。到目前爲止,我有以下代碼:德爾福打印一個表格的自定義區域

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; 

但是,這會打印整個表單。我搜索了一下,發現了幾個不同的東西可能會有幫助,但我不知道如何使用它們:

GetFormImage - 有沒有一種方法可以選擇一個特定的區域,或者它只是採取整個表單?使用具有給定座標的矩形,例如矩形1:=矩形(左,上,右,下);但是如何將矩形打印成更大尺寸並打印?同樣,看起來Delphi只提供Left和Top屬性,Right是你想要去的最遠左值的另一個名字?

更新: 我試圖創建一個自定義位圖,然後拉伸它,但我沒有正確使用strechdraw。它在印刷時並不實際拉伸:

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; 

是否嘗試,最後是必要的? 當我打印而不stretchdraw這是非常小的,但是當我印有stretchdraw,很多圖像的缺失,所以我必須使用它錯了

+0

什麼「新佈局」?自從我使用這個網站以來,至少已有4-5年的時間,它的工作方式也是一樣的。選擇您的代碼,然後單擊「格式代碼」按鈕。 –

+0

@JerryDodge我知道Id改變了一些東西。我偶然切換到手機網站 – L2C

+0

您誤解了TPrintDialog的用途。它只是配置打印機選項;它不處理實際打印的任務。如果你需要的不是TForm.Print的默認行爲,你需要自己編寫代碼。矩形的正確值是左+寬,就像底部是頂部+高度一樣。 –

回答

1

擺脫你stretched變量和Bitmap.Canvas.StretchDraw(你也可以如果你願意,可以擺脫TPrintDialog)。

// 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

這很好,謝謝 – L2C