送~关于打印!!!!高手在吗?!这个问题太简单了~???? (100分)

  • 主题发起人 主题发起人 ranyang
  • 开始时间 开始时间
R

ranyang

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个打印程序~就是在窗体中做一按钮,一panel,点击按钮后。开始只打印panel里的内容!!!怎么写代码?提示就行!!!思路?!
 
失望!!!!!!!!!!
 
d7 的 rav 报表中有条吗打印的控件, 你自己打开员码看看
 
从前人家的答案,看一下吧
procedure PrintPanel(Panel: TPanel;
SLeft, STop, SWidth, SHeight, Left, Top: LongInt;
HScale, ZScale: Real);
var
WJDC: HDC;
WJBitMap: TBitMap;
Info: PBitMapInfo;
InfoSize, ImageSize: DWORD;
Image: Pointer;
begin
Printer.begin
Doc;
WJBitMap := TBitMap.Create;
WJBitMap.Width := SWidth;
WJBitMap.Height := SHeight;
WJDC := GetDC(Panel.Handle);
BitBlt(WJBitMap.Canvas.Handle, 0, 0, SWidth, SHeight, WJDC, SLeft, STop, SRCCOPY);
ReleaseDC(Panel.Handle, WJDC);
GetDIBSizes(WJBitMap.Handle, InfoSize, ImageSize);
GetMem(Info, InfoSize);
GetMem(Image, ImageSize);
GetDIB(WJBitMap.Handle, 0, Info^, Image^);
StretchDIBits(Printer.Canvas.Handle, Left, Top, Round((Panel.Width - 2) * HScale),
Round((Panel.Height - 2) * ZScale), 0, 0, Info^.bmiHeader.biWidth,
Info^.bmiHeader.biHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);
FreeMem(Image, ImageSize);
FreeMem(Info, InfoSize);
WJBitMap.Free;
Printer.EndDoc;
end;
 
丁!!!!!!!!!!!!!!!!!
 
procedure TForm1.Button1Click(Sender: TObject);
var
DC: HDC;
Canvas: TCanvas;
MyBitmap: TBitmap;
begin
Canvas := TCanvas.Create;
MyBitmap := TBitmap.Create;
DC := GetDC(0);
Canvas.Handle := DC;
MyBitmap.Width := panel1.Width;
MyBitmap.Height := panel1.Height;
//下面是把 panel 在屏幕上的图象拷贝下来
MyBitmap.Canvas.CopyRect(rect(0,0,panel1.Width,panel1.Height),
canvas,
rect(self.Left+panel1.Left,
self.Top+panel1.Top,
self.Left+panel1.Left+panel1.Width,
self.Top+panel1.Top+panel1.Height));
MyBitmap.SaveToFile('d:/test.bmp');
ReleaseDC(0, DC);
MyBitmap.Free;
canvas.Free;
end;

你把拷贝的图象打印出来就行了
 
打印图片的程序你会吧?
 
或者你把屏幕的拷贝图象直接放到 printer对象里也行
printer.Canvas.CopyRect();
手头没打印机,没法测试
 
感谢!我试一下!!
 
做个报表,将PANEL中的东西放上去,再打印
 
To yanyandt2:
非常感谢!!!我想直接打印MyBitmap,而不用保存!另外画出的图不是很标准:稍微高了一些!就是说底端的没有画出来,而顶端的没用的画出来了!
我真的很需要各位高手帮忙,也正努力学习!希望高手们不吝赐教~[:)][:)]
 
procedure TForm1.Button1Click(Sender: TObject);
var
DC: HDC;
Canvas: TCanvas;
begin
Canvas := TCanvas.Create;
DC := GetDC(0);
Canvas.Handle := DC;

printer.begin
doc;//准备打印
//下面是把 panel 在屏幕上的图象拷贝下来
printer.Canvas.CopyRect(rect(0,0,panel1.Width,panel1.Height),
canvas,
rect(self.Left+panel1.Left,
self.Top+panel1.Top,
self.Left+panel1.Left+panel1.Width,
self.Top+panel1.Top+panel1.Height));
ReleaseDC(0, DC);
canvas.Free;
printer.enddoc;//开始打印
end;

CopyRect 方法
第一个参数是目的矩形的大小
第二个参数源的canvas,这里也就是屏幕的
第三个参数是源的矩形,可能有差距,你修改一下
left,top,right,bottom 就行了
 
再次感谢!!!致敬!!!!!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部