function PrintWindow(hWnd: HWND; hDCBlt: HWND; nFlags: Word): Bool; far; external 'user32.dll';procedure TMainform.Button2Click(Sender: TObject);
var
lHwnd: HWND;
lhDC, lhBmp, lhMemDC: Integer;
lRect: TRect;
lBmp: TBitmap;
begin
if lvCurWin.Selected = nil then Exit;
lHwnd := StrToInt(lvCurWin.Selected.SubItems[0]);
{ 用了一个 ListView 保存当前窗口的句柄 }
lhDC := GetWindowDC(lHwnd);
if lhDC <> 0 then
begin
lhMemDC := CreateCompatibleDC(lhDC);
if lhMemDC <> 0 then
begin
GetWindowRect(lHwnd, lRect);
lhBmp := CreateCompatibleBitmap(lhDC, lRect.Right-lRect.Left, lRect.Bottom-lRect.Top);
if lhBmp <> 0 then
begin
SelectObject(lhMemDC, lhBmp);
if not PrintWindow(lHwnd, lhMemDC, 0) then
ShowMessage('不成功!'); { 老是提示不成功 }
lBmp := TBitmap.Create;
lBmp.Handle := lhBmp;
lBmp.SaveToFile('c:\abc.bmp');
ImgTum.Picture.Bitmap.Assign(lBmp);
lBmp.Free;
DeleteObject(lhBmp);
end;
DeleteObject(lhMemDC);
end;
ReleaseDC(lHwnd, lhDC);
end;
end;上面代码,为什么执行 PrintWindow 时老是提示不成功呢!保存的 Bmp 文件是一团黑。
var
lHwnd: HWND;
lhDC, lhBmp, lhMemDC: Integer;
lRect: TRect;
lBmp: TBitmap;
begin
if lvCurWin.Selected = nil then Exit;
lHwnd := StrToInt(lvCurWin.Selected.SubItems[0]);
{ 用了一个 ListView 保存当前窗口的句柄 }
lhDC := GetWindowDC(lHwnd);
if lhDC <> 0 then
begin
lhMemDC := CreateCompatibleDC(lhDC);
if lhMemDC <> 0 then
begin
GetWindowRect(lHwnd, lRect);
lhBmp := CreateCompatibleBitmap(lhDC, lRect.Right-lRect.Left, lRect.Bottom-lRect.Top);
if lhBmp <> 0 then
begin
SelectObject(lhMemDC, lhBmp);
if not PrintWindow(lHwnd, lhMemDC, 0) then
ShowMessage('不成功!'); { 老是提示不成功 }
lBmp := TBitmap.Create;
lBmp.Handle := lhBmp;
lBmp.SaveToFile('c:\abc.bmp');
ImgTum.Picture.Bitmap.Assign(lBmp);
lBmp.Free;
DeleteObject(lhBmp);
end;
DeleteObject(lhMemDC);
end;
ReleaseDC(lHwnd, lhDC);
end;
end;上面代码,为什么执行 PrintWindow 时老是提示不成功呢!保存的 Bmp 文件是一团黑。
解决方案 »
- dbcombox 与combox的有何区别
- 关于DELPHI套打的问题?
- Delphi输出数据到Word稳定性问题?
- 初学delphi遇到的小问题,请大家帮我!
- EXCEL里的图片怎么保存到sql.server
- 如何将richedit控件的底色设为透明呢?
- 用什么属性来取DBLookupBoCombo的当前值?
- 学sql不久,对SQL不是很熟,求一SQL SERVER备份和恢复的源码,好急!
- 请教各位前辈一个关于拨号连接远程数据库的问题,请前辈们不要见笑。
- 一DCU的函数接口, 写数据的参数是Pansichar的, 怎么把一个Integer值写进去
- 已知窗体的句柄,怎么得到改窗体的位置和大小
- 关于用Delphi写的一个windows media player播放器的问题
但是好像用其它语言没问题,怎么用 Delphi 就不行呢!
另外我的操作系统是 XP
是否调错了
改成这样试试
改成这样就可以了,以前用过。
另外注意该函数95,98,win me 不支持
不过为什么不能显示在 Image 中呢?
就是这句 ImgTum.Picture.Bitmap.Assign(lBmp); 为什么看不到效果呢?
怎么办呢?