【发布时间】:2017-04-11 19:57:32
【问题描述】:
我有一个表格,我需要打印,但只打印其中的某个部分,然后将其放大(增加比例)。到目前为止,我有以下代码:
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 属性,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;
try 和 finally 有必要吗? 当我不使用stretchdraw打印时,它真的很小,但是当我使用stretchdraw打印时,很多图像都丢失了,所以我一定是用错了
【问题讨论】:
-
什么“新布局”?自从我使用这个网站以来,它至少在 4-5 年内都以同样的方式工作。选择您的代码,然后单击“格式化代码”按钮。
-
@JerryDodge 我知道 Id 改变了一些东西。不小心切换到手机网站
-
您误解了 TPrintDialog 的用途。它只是配置打印机选项;它不处理实际打印的任务。如果您需要 TForm.Print 的默认行为以外的其他行为,则需要自己编写代码。并且一个矩形的right值是left + width,就像bottom是top + height一样。
-
没有。您可以将您想要的矩形复制到图像,为打印机页面适当地缩放该图像,然后打印该图像。这里存在关于使用 Delphi 捕获窗口的一部分的问题,以及关于缩放图像的问题。 (使用适当的报告库通常要容易得多,只需从屏幕上生成您想要的报告输出,但我不确定您要准确完成什么,所以这可能不是您的选择.)
-
我将删除我以前的 cmets 以清理评论混乱。希望你先从他们那里得到你需要的东西。