通过操作,将一些需要的信息,写入了TListBox中并显示在屏幕上,现在需要打印该如何写代码?
解决方案 »
- C++
- access关于时间查询的问题
- combobox的问题!!!(高手进)
- 需要各位高手,大虾的指点!
- 怎样用一个系统中不存在的用户名(未知)的用户名启动其它程序
- 分发ACTIVEXFORM时服务器上没有DELPHI,如何实现“Web Deploy”功能?
- 一个sql中的问题(急,高手请帮助解决一下)
- 请问数据库中索引和关键字的区别?
- D6的DsgnIntf.pas文件去哪儿了?
- 為什么將一個工程編譯成Exe可正常工作,而做成bpl后卻提示 "The Ancestor of TPanel not Found?"提示?
- 如何取得某个扩展名对应的文件图标。
- 我安装了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的用法,可以看看帮助等相关资料,应该不难的!
注意解决问题靠自己!