为什么找的这个代码不能打印出来呢 将Panel上显示的内容打印出来(50分)

  • 主题发起人 主题发起人 980
  • 开始时间 开始时间
9

980

Unregistered / Unconfirmed
GUEST, unregistred user!
uses printers;<br>procedure PrintPanel(Panel: TPanel; SLeft, STop, SWidth, SHeight, Left, Top: LongInt;<br> &nbsp;HScale, ZScale: Real);<br>var<br> &nbsp;WJDC: HDC;<br> &nbsp;WJBitMap: TBitMap;<br> &nbsp;Info: PBitMapInfo;<br> &nbsp;InfoSize, ImageSize: DWORD;<br> &nbsp;Image: Pointer;<br>begin<br> &nbsp;Printer.BeginDoc;<br><br> &nbsp;WJBitMap := TBitMap.Create;<br> &nbsp;WJBitMap.Width := SWidth;<br> &nbsp;WJBitMap.Height := SHeight;<br><br> &nbsp;WJDC := GetDC(Panel.Handle);<br> &nbsp;BitBlt(WJBitMap.Canvas.Handle, 0, 0, SWidth, SHeight, WJDC, SLeft, STop, SRCCOPY);<br> &nbsp;ReleaseDC(Panel.Handle, WJDC);<br><br> &nbsp;GetDIBSizes(WJBitMap.Handle, InfoSize, ImageSize);<br> &nbsp;GetMem(Info, InfoSize);<br> &nbsp;GetMem(Image, ImageSize);<br> &nbsp;GetDIB(WJBitMap.Handle, 0, Info^, Image^);<br><br> &nbsp;StretchDIBits(Printer.Canvas.Handle, Left, Top, Round((Panel.Width - 2) * HScale),<br> &nbsp; &nbsp;Round((Panel.Height - 2) * ZScale), 0, 0, Info^.bmiHeader.biWidth,<br> &nbsp; &nbsp;Info^.bmiHeader.biHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);<br> &nbsp;FreeMem(Image, ImageSize);<br> &nbsp;FreeMem(Info, InfoSize);<br> &nbsp;WJBitMap.Free;<br> &nbsp;Printer.EndDoc;<br>end;<br>我在Panel1上面放 很多Label1和edit ,想将Panel上显示的内容打印出来<br>我的调用方法是PrintPanel(Panel1,10,256,10,49,10,10,100,100);
 
我测试了你的代码,在<br> &nbsp;FreeMem(Info, InfoSize);<br>//这里。。加的,<br> &nbsp; WJBitMap.SaveToFile('c:/1.bmp');<br><br> &nbsp;WJBitMap.Free;<br> &nbsp;Printer.EndDoc;<br>但是里面没有任何东西,是空白的内容。<br>我觉得是没有把内容复制到WJBitMap里面。
 
to &nbsp;zywcd <br>在这里家上还是老样子 ,什么都没有,这个是我找的代码 ,就是这么贴上 ,不知道人家怎么使用的
 
你修改调用的参数,<br>PrintPanel(Panel1,1,1,panel1.Width,Panel1.Height,1,1,1,1);<br>这样可以打出来,但是有的控件内容是出不来的。<br>比如label,edit的内容,Button的内容。<br>如果你真的想这样打,可能都需要每个控件都单独处理来打印才可以。
 
接受答案了.
 
后退
顶部