- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 TImage 数组,每个 TImage 都包含指定目录中图像文件的缩略图,并且它们的 Hint 属性设置为其图像文件名以用于打印目的。所有文件都位于远程服务器上的共享目录中(例如:\192.168.1.50\imgscan\12-14-54\*.jpg)。
此外,每个图像都有一个相应的 TCheckBox,用户可以选中它来标记要打印的图像。
我使用以下代码进行打印(变量images_index
保存所选目录中的图像数量)...
procedure PrintSelectedImages;
var
i: integer;
R1, R2: TRect;
Picture: TPicture;
Bitmap: TBitmap;
Total, done: integer;
begin
Total := 0;
done := 0;
for i := 0 to images_index - 1 do
if Checks[i].Checked then
INC(Total);
if Total = 0 then
begin
MessageDlg('No Images Selected!', mtInformation, [mbOK], 0);
Exit;
end;
Printer.BeginDoc;
if PrintDialog1.Execute then
begin
for i := 0 to images_index - 1 do
begin
if Checks[i].Checked then
begin
try
Picture := TPicture.Create;
Picture.LoadFromFile(images[i].Hint);
Bitmap := TBitmap.Create;
try
Bitmap.Width := Picture.Width;
Bitmap.Height := Picture.Height;
Bitmap.Canvas.Draw(0, 0, Picture.Graphic);
R1 := Rect(0, 0, Bitmap.Width, Bitmap.Height);
R2 := Rect(0, 0, Printer.PageWidth, Printer.PageHeight);
Printer.Canvas.CopyRect(R2, Bitmap.Canvas, R1);
INC(done);
finally
Bitmap.Free;
end;
finally
Picture.Free;
end;
if done < Total then
Printer.NewPage;
end; // if
end; // i
end; // if
Printer.EndDoc;
end;
现在...在 Microsoft XPS Document Writer 上,我没有任何问题,所有页面都打印得很好,但在真正的打印机上,大多数时候都会打印出白纸,有时只打印某些选定的图像(例如 10 个选定文件中的 4 个)。
我的代码有什么问题?我用谷歌搜索了很多,但一无所获!
谢谢。
最佳答案
Canvas CopyRect 函数使用 StretchBLT。我们使用 DIBits 函数获得了更好的结果 SetDIBitsToDevice或StretchDIBits 。这是我们的抽奖代码。我们有一个 DrawParams 结构体,其中包含有关如何绘制该图像的详细信息。
下面的代码使用 graphics32 中的 TBitmap32 。我们使用它是因为我们发现其他一些绘图和调整大小例程很有用。但相同的代码也适用于普通的 TBitmap。
{ TDrawParamsRecord }
TDrawParamsRecord = record
private
function GetHeight(): integer;
function GetWidth(): integer;
public
PictureZoom: integer;
Stretch: boolean;
Center: boolean;
KeepAspectRatio: boolean;
OutputRect: TRect;
ResizeMode: TResizeMode;
property Height: integer read GetHeight;
property Width: integer read GetWidth;
function Equal(OtherParams: TDrawParamsRecord): boolean;
end;
{
TCFImage.OutputToCanvas
---------------------------------------------------------------------------
When writing to the canvas we could have a Screen canvas, a metafile canvas
used to create a PDF file, or a printer canvas. Because of this we want to
make sure we are using the DIBits functions. Many printer drivers can't use
the StretchBLT function because of color space changes. Everyone should
support StretchDIBits.
When resizing the image we sometimes will resize it internally to match the
output size and other times we will let StretchDIBits handle the conversion.
}
procedure TCFImage.OutputToCanvas(Canvas: TCanvas; Image: TBitmap32; DrawParams: TDrawParamsRecord);
var
// StretchDIBits has BmpInfo passed in as a Var parameter so we can't
// use the read only property.
BmpInfo: TBitmapInfo;
begin
BmpInfo := Image.BitmapInfo;
// If th output matches the current image size then we can just move the bits,
// no reason for "Stretch"
if (DrawParams.Height = Image.Height) and (DrawParams.Width = Image.Width) then
begin
SetDIBitsToDevice(Canvas.Handle,
DrawParams.OutputRect.Left, DrawParams.OutputRect.Top,
DrawParams.Width, DrawParams.Height,
0, 0, 0, Image.Height, Image.Bits, BmpInfo, DIB_RGB_COLORS);
end
else
begin
StretchDIBits(Canvas.Handle,
DrawParams.OutputRect.Left, DrawParams.OutputRect.Top,
DrawParams.Width, DrawParams.Height,
0, 0, Image.Width, Image.Height,
Image.Bits, BmpInfo, DIB_RGB_COLORS, SRCCOPY);
end;
end;
关于德尔福图像打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21992308/
是否有适用于 Delphi 2006/2007/2009 的 FitNesse 版本? 如果可以的话我在哪里可以找到它? 还有其他类似 FitNesse 的程序可以在 Delphi 2006 上运行吗
在 MDI 应用程序中有一个打开的模态表单 A。表单 B 从表单 A 中显示为模态。 如何在调用模态表单 B 后关闭模态表单 A? 最佳答案 模态意味着终生嵌套。当一个模态表单打开另一个模态表单时,第
我一直在写一些通过 URL 下载指定网页源代码的函数: function GetWebPage(const url: string): tStringList; var idHttp: TidHt
我正在寻找一种在 Delphi 中使用我的网络摄像头的方法,主要用于抓取图片,由于某些原因我无法使用 TWAIN 驱动程序。 最佳答案 尝试这些资源 DSPack DSPack is a set of
我正在寻找用于 delphi 的数据感知 TreeView 什么是最好用的? 最佳答案 Virtual TreeView 是最快的,功能最多的,最好的,而且是免费的!(对于数据感知,有免费的 desc
这个问题已经有答案了: How to copy the properties of one class instance to another instance of the same class?
我想为我的应用程序使用大型倒十字光标。但我的代码使光标背景反转。光标仍为白色。 var IconInfo: TIconInfo; AndMask, Bmp: TBitmap; w, h:
[DCC Fatal Error] Unit1.pas(7): F1026 File not found: 'MyBitBtn.dcu' Unit1 是用于测试目的的 VCL 表单。 我已经安装了一个
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
是否可以删除 TabSheet 的边框(~4px)?我使用 PageControl 作为开关面板,而不是框架、窗口等。我希望一切都是直的。 最佳答案 unit Unit1; interface use
我有java代码从文本文件填充 HashMap 。 HashMap data = new HashMap(); 我用它来制作键值对。值是一个字符串数组。我必须迭代键值对的每个可能的组合(因此还必须迭代
如何更改mp3文件的恒定比特率(CBR)? (例如64kbps-128kbps-192kbps) 最佳答案 您需要重新编码mp3。由于我不知道用Delphi编写的mp3编解码器不错,因此您需要在c库(
当我迭代窗体上的控件时,我会看到在设计时或运行时放置在其中的控件。它们都是TEdit,Tmemo,TComboBox等类型的... 但是,总有八种我不认识。我可以跳过它们,因为它们不是我感兴趣的类型,
我认为这是一个愚蠢的问题..但是..当在Delphi中声明另一个类的子类时, children 是否直接获得了 parent 的方法? 解释: 名为“P”的类是名为“C”的类的父类,“P”类有一个名为
正在尝试将数据发布到 https://www.facebook.com/login.php使用突触 delphi 库但没有任何结果。帖子数据来自 mozila headers viewer。 答案?
我在使用 PHP + Delphi 9 + Firebird 检索大量数据时遇到问题。 应用程序屏幕截图 我在 Delphi 应用程序中有一个名为 "checks"的按钮,当我单击该按钮时,它会根据函
我正在将我的 Delphi 7 应用程序迁移到 Delphi 2010。我们使用了 Open XML(来自 http://www.philo.de/)。 在 Delphi 2010 中,它似乎已经内置
在以下代码中: type TDoubleDWORD = record L, H: Longint; end; function BitSelection(const Block:
我喜欢这个工具栏。我在哪里可以找到它? 谢谢 最佳答案 您可以实现与使用标准 Delphi 组件类似的功能(至少非常类似): 将 TControlBar 添加到表单 将其 DrawingStyle 设
如何使用 Zeos 在 firebird 中创建 autoinc 字段。 -布拉德 最佳答案 Firebird FAQ #29中有解释。请参阅该页面的底部。 关于德尔福 Firebird 汽车公司,我
我是一名优秀的程序员,十分优秀!