2017-04-11 11 views
0

私は印刷する必要があるが、その特定のセクションのみをフォームにしてから拡大します(縮尺を大きくします)。これまでのところ、私は次のコードを持っています:Delphiはフォームのカスタム領域を印刷します

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 - これで特​​定の領域を選択する方法はありますか? ?

rectangle1:= rect(Left、Top、Right、Bottom)などの指定された座標の矩形を使用します。しかし、どのようにして矩形のサイズを拡大して印刷するのですか?同様に、DelphiはLeftプロパティとTopプロパティのみを提供しているように見えますが、あなたが行きたい左辺値の右の別の名前ですか?

更新日: カスタムビットマップを作成してストレッチしてみましたが、ストレッチドローを正しく使用していません。

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のデフォルトの動作以外のものが必要な場合は、それを自分でコーディングする必要があります。そして、矩形の右の値は、bottom + top + heightのようにleft + widthです。 –

答えて

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