屏幕截图 如何截取带Alpha通道的窗体 例如设置了AlphaBlend的窗体,或者其他半透明窗体,如何给它截图。我是在做一个截图工具,不要告诉我使用XX截图软件。我用传统方法(GetDC(0))截不到这种窗体。还有不要破坏剪贴板数据。请知道的朋友帮忙。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不用顶了,答案来了。procedure CaptureScreenWithAlphaWnd(strFileName: string);const CAPTUREBLT = $40000000;var hdcScreen: HDC; hdcCompatible: HDC; bmp: TBitmap; hbmpScreen: HBITMAP;begin hdcScreen := CreateDC('DISPLAY', nil, nil, nil); hdcCompatible := CreateCompatibleDC(hdcScreen); hbmpScreen := CreateCompatibleBitmap(hdcScreen, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES)); bmp := TBitmap.Create; bmp.PixelFormat := pf24bit; try SelectObject(hdcCompatible, hbmpScreen); bmp.Handle := hbmpScreen; BitBlt(hdcCompatible, 0, 0, bmp.Width, bmp.Height, hdcScreen, 0, 0, SRCCOPY or CAPTUREBLT); bmp.SaveToFile(strFileName); finally bmp.Free; DeleteDC(hdcScreen); DeleteDC(hdcCompatible); DeleteObject(hbmpScreen); end;end;procedure TForm1.Button1Click(Sender: TObject);begin CaptureScreenWithAlphaWnd('C:\ccrun\123.bmp');end;效果图在这里: 明白了,关键在于CAPTUREBLT,GetDC还是CreateDC无所谓的。可惜Delphi没有定义CAPTUREBLT这个光栅操作码,得自定义。多谢ccrun,以及lantianhf。 求助,数据库字段问题~ 各位高手帮忙看一下吧 求备份和还原Access数据库源码! 数据库转换问题DBF->MDB,如果只需要要其中部分可能存在的字段的数据,怎么办? 关于数据库连接失败的问题 delphi内存释放的问题 我在grid上有一个单价字段需要保留后面位小数,为什么在displayformat设置####.####不可以 关于SAVE AS 请问,一般关闭数据库系统的form,用什么命令比较好? 如何使用二个adoQury实现Master/Detail表关系,请详细说明最好给出例子. 还是comboboxd的问题 delphi 参数没有默认值
procedure CaptureScreenWithAlphaWnd(strFileName: string);
const
CAPTUREBLT = $40000000;
var
hdcScreen: HDC;
hdcCompatible: HDC;
bmp: TBitmap;
hbmpScreen: HBITMAP;
begin
hdcScreen := CreateDC('DISPLAY', nil, nil, nil);
hdcCompatible := CreateCompatibleDC(hdcScreen); hbmpScreen := CreateCompatibleBitmap(hdcScreen,
GetDeviceCaps(hdcScreen, HORZRES),
GetDeviceCaps(hdcScreen, VERTRES)); bmp := TBitmap.Create;
bmp.PixelFormat := pf24bit; try
SelectObject(hdcCompatible, hbmpScreen); bmp.Handle := hbmpScreen;
BitBlt(hdcCompatible,
0, 0,
bmp.Width, bmp.Height,
hdcScreen,
0, 0,
SRCCOPY or CAPTUREBLT); bmp.SaveToFile(strFileName);
finally
bmp.Free; DeleteDC(hdcScreen);
DeleteDC(hdcCompatible);
DeleteObject(hbmpScreen);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
CaptureScreenWithAlphaWnd('C:\ccrun\123.bmp');
end;
效果图在这里:
可惜Delphi没有定义CAPTUREBLT这个光栅操作码,得自定义。
多谢ccrun,以及lantianhf。