怎样使窗口变的透明,不仅仅是在创建是,要求窗口在移动时和移动后一直保持透明,我现在的方法只是一次性的?!!!!!!---200分Plus! (50分)

  • 主题发起人 主题发起人 cjh_xf
  • 开始时间 开始时间
C

cjh_xf

Unregistered / Unconfirmed
GUEST, unregistred user!
我要做个抓屏软件,但现在获得的都是抓整个屏幕的程序,不知怎样抓取特定窗口中的图象。一个抓整屏的例子:
procedure GetScreen(var bmp: TBitmap);
var
dc : integer;
c : TCanvas;
R : TRect;
begin
bmp := TBitmap.Create;

dc := GetWindowDC(0);
try
c := TCanvas.Create;
c.Handle := dc;
R := Rect(0, 0, Screen.Width, Screen.Height);
bmp.Width := R.Right;
bmp.Height := R.Bottom;
bmp.Canvas.CopyRect(R, c, R);
c.Handle := 0;
c.Free;
finally
ReleaseDC(0, dc);
end;
end;
用GetForegroundWindow函数可以得到当前活动窗口的句柄, 得到它的DC, 边界。不过具体用法不清楚。
我的问题是:怎样使我的某个窗口变成透明(只留边框),然后抓取我窗口下的屏幕?------等待高手回答!
 
你可以用API找到当前活动的窗口(你要抓取的)然后获得他的POSITION在抓取整屏后,进行切割即可
 
怎样将界面变得透明?然后再抓取这个界面覆盖下的图象?
 
1.使用 Form1.Brush.Style := bsClear;将窗体变得透明
2.获得窗口的4个坐标,获得整个屏幕,然后自己把坐标内的内容画出来!
 

procedure GetScreen(var bmp: TBitmap);
var
dc : integer;
c : TCanvas;
R : TRect;
begin
bmp := TBitmap.Create;

dc := GetWindowDC(Form1.handle);
try
c := TCanvas.Create;
c.Handle := dc;
R := Rect(0, 0, Form1.ClientWidth, Form1.ClientHeight);
bmp.Width := R.Right;
bmp.Height := R.Bottom;
bmp.Canvas.CopyRect(R, c, R);
c.Handle := 0;
c.Free;
finally
ReleaseDC(0, dc);
end;
应该是这样吧,我也写过类似的程序,不过我抓的是动态视频
 
没看全,你要的是窗口下的屏幕,那是不是"将窗体变得透明"--ligia,再...
 
对,我就是想把窗口变的透明,再抓取我窗口下的屏幕图象!
 
按ligia的方法我的窗口是变成了透明,可是它显示的是刚刚变成透明时覆盖在它下面的图象,拖动窗口图象不会随着变化,该怎样才能让之随窗口的拖动而变化?
 
我只记得这一句代码,具体怎么制作透明窗口,自己搜一下有很多的帖子有介绍。
 
怎样才能使我的窗口在移动后依然透明?!现在是窗口中显示的是第一显示时窗口覆盖下的内容!
 
如何抓到动态视频,finelin,谢谢!
 
1. 跟踪屏幕像素颜色
在Form中放一 TLabel(Label1),再放置一定时器(TTimer).
然后粘贴以下定时器代码即可运行。
当鼠标在屏幕的任何位置移动时,Label中显示鼠标所指
像素的颜色(十六进制 RGB 格式)。

///////////////以下是定时器的处理代码:
procedure TForm1.Timer1Timer(Sender: TObject);
var
P: TPoint;
co: TColor;
ScreenDC : HDC;
fBitmap : TBitmap;
begin
GetCurSorPos(P);
fBitmap := TBitmap.Create;
fBitmap.Width := 1;
fBitmap.Height := 1;
ScreenDC:=CreateDC('DISPLAY',nil,nil,nil);
BitBlt(FBitmap.Canvas.Handle, 0,0,
FBitmap.Width, FBitmap.Height,
ScreenDC, p.x,p.y, SRCCOPY);
DeleteDC(ScreenDC);
label1.caption:=inttohex(fbitmap.canvas.pixels[0,0],8);
fBitmap.Free
end;

 
jsxjd你所说的好象与我的问题对不上吧:)

我是想知道怎样才能使窗口拖动是一直透明?!!!!!!!!!!!!!
 
你有d6的second的光盘没
里面有个tnt控件
非常强大,完全符合你的要求
还有原码
 
问题解决了,不过不是用空间做的,是自己编码的,bsclear是不能实现我的要求的,不过谢谢大家的光临!!!!!!!!!!!
combinrgn来实现的!因为没人真正解决我的问题所以应允的200分恕不送出!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
774
import
I
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
614
import
I
后退
顶部