通过操作,将一些需要的信息,写入了TListBox中并显示在屏幕上,现在需要打印该如何写代码?
解决方案 »
- js中调用activex方法的问题
- 网页验证码的识别(急) 分不够可以在加 来者有分。
- 面试时的三道纯数据库题目,请问怎么回答,谢谢!
- 如何通过程序写批处理文件
- 在reportmachine中如何动态指定一个字段的值?
- DBGrid的显示问题,求教!在线等
- 关于格式化字符串的问题?(如:142,463,635.98元)
- 怎样在程序里设置 QRband 的 BandType 属性? 在线等待!!!
- Chm电子书制作工具,那一款最方便优秀?
- 传字符串问题(com/dcom/midas),看看也给分
- 如何取得某个扩展名对应的文件图标。
- 我安装了mdac2.8后,再用ado连接数据库时,出错,说什么“Provider cannot be found.It may not be properle installed”,请问该怎么解决
Printers;procedure PrintListBox(const ListBox: TListBox);
var
i, iLeft, iTop: Integer;
CalRect: TRect;
begin
with Printer do
begin
BeginDoc;
try
Canvas.Font.Assign(ListBox.Font);
iLeft := 10;//可以根据调节
iTop := 10;//可以根据调节
for i := 0 to ListBox.Items.Count - 1 do
begin
FillChar(CalRect, SizeOf(CalRect), 0);
DrawText(
Canvas.Handle,
PAnsiChar(PChar(ListBox.Items[i])),
-1 ,
CalRect,
DT_SINGLELINE or DT_CALCRECT or DT_LEFT or DT_EXPANDTABS);
CalRect.Left := iLeft;
CalRect.Right := CalRect.Right + iLeft;
CalRect.Top := iTop;
CalRect.Bottom := CalRect.Bottom + iTop;
Inc(iTop, CalRect.Bottom - CalRect.Top);
DrawText(
Canvas.Handle,
PAnsiChar(PChar(ListBox.Items[i])),
-1 ,
CalRect,
DT_SINGLELINE or DT_LEFT or DT_EXPANDTABS);
end;
finally
EndDoc;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
PrintListBox(ListBox1);
end;
关键你要知道原理就不用去收藏了,其实很简单,就是向Canvas上画东西而已和一般的Bitmap
一样。从此可见开发Delphi人员的高明,抽象出一个TCanvas类就很好的封装了Window的HDC的东西,这才是真正的OOP!!弓虽!!!!!!!
这也就是这几年来,我为什么不去学其它的语言的原因,因为整个VCL设计得太让人心动了!!
又说了一堆废话,刚才就有一个人骂我了!呵呵~~~至于设置纸张的东东你可以看TPrintDialog的用法,可以看看帮助等相关资料,应该不难的!
注意解决问题靠自己!