[急问]类qq截屏的显示效果问题(请帮忙提前) ( 积分: 200 )

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

cst_zf

Unregistered / Unconfirmed
GUEST, unregistred user!
需要做一个类似qq抓屏的东西但是不知道抓屏过程中的鼠标效果是怎么做的<br>至于鼠标光标之类的东西我暂时先不理会了<br>主要问题是 那个“虚线框”<br>鼠标的消息截取我用鼠标钩子实现了<br>起点、终点、当前点也都截取了。GetDC(0)我也知道<br>关键是在什么地方,用什么方法来绘制那个虚线框(先不要求闪动之类乱七八糟的效果)<br><br>我现在是用SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil,SPIF_SENDCHANGE);<br>不停地刷屏、重绘。效率太低了,卡死了。。。。<br><br>知道的或者能提供线索的希望能帮一下忙,急用。
 
需要做一个类似qq抓屏的东西但是不知道抓屏过程中的鼠标效果是怎么做的<br>至于鼠标光标之类的东西我暂时先不理会了<br>主要问题是 那个“虚线框”<br>鼠标的消息截取我用鼠标钩子实现了<br>起点、终点、当前点也都截取了。GetDC(0)我也知道<br>关键是在什么地方,用什么方法来绘制那个虚线框(先不要求闪动之类乱七八糟的效果)<br><br>我现在是用SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil,SPIF_SENDCHANGE);<br>不停地刷屏、重绘。效率太低了,卡死了。。。。<br><br>知道的或者能提供线索的希望能帮一下忙,急用。
 
你到盒子(www.2ccc.com)里的“常规代码/图像”里去找些源代码看看,里面有好些屏幕截图的例子。
 
来自:卷起千堆雪tyn, 时间:2001-12-24 22:10:00, ID:809383<br><br>YB老弟说我没有诚意,唉,那我就来点诚意,无私一把,给大家一点小小技巧----关于蚂蚁线<br><br>&gt;以下程序在一个表单上放置一个Timer控件,设置Interval :=100;<br><br>&gt;实现PhotoShop里的流动线效果.<br><br>&gt;以下程序字节数&lt;512,简练,高效;原来PhotoShop也不过如此~~<br><br>unit n;<br><br>interface<br><br>uses<br><br>Windows,Forms,Graphics,Classes,ExtCtrls;<br><br>type<br><br>TF=class(TForm)<br><br>m:TTimer;<br><br>procedure mTimer(Sender:TObject);<br><br>end;<br><br>var<br><br>F:TF;<br><br>a:Byte;<br><br>implementation<br><br>{$R *.DFM}<br><br>procedure c(X,Y:Integer;t:TCanvas);stdcall;<br><br>begin<br><br>a:=a shl 1;<br><br>if a =0 then a:=1;<br><br>if (a and 224)&gt;0 then<br><br>t.Pixels[X,Y]:=clWhite<br><br>else<br><br>t.Pixels[X,Y]:=clBlack;<br><br>end;<br><br>procedure TF.mTimer(Sender:TObject);<br><br>begin<br><br>LineDDA(0,0,333,333,@c,LongInt(Canvas));<br><br>end;<br><br>end.<br><br>&gt;运行之后,有没有看见象蚂蚁在爬呢?<br><br>最后祝所有的DFW象爬动的蚂蚁般幸福快乐
 
QQ截屏就是先复制屏幕然后自己生成一个界面,比如一个无caption的form把图象显示到这个form上,然后再截取这个form上的部分<br><br>虚线就按上面那位老兄贴的那样画,鼠标效果。。。你先把要显示的鼠标效果保存到资源文件,然后指定cursor为那个效果就行了<br>比如:<br>从资源文件里读取光标资源:<br>screen.Cursors[110]:=Loadcursor(hinstance,'move');<br>screen.Cursors[111]:=Loadcursor(hinstance,'move_click');<br>指定鼠标变为你存到资源文件里的光标<br>form1.Cursor:=111
 
QQ截屏是先把屏幕保存成图像.<br>然后在图像上选择.<br>并不是在屏幕上.
 
我昨天用hs-kill说的方法做出了一些问题<br>我放了一个timage控件在一个屏幕大小的无标题拦,不显示在任务管理器上的form<br>一个是截屏只能截很少一块<br>二是form无法挡在任务拦上,只有点一下才会到任务栏之上<br>三是无法防止用户alt-tab切换,切换会很明显看到这个form的存在
 
主要问题是 那个“虚线框”<br>Timer1.Interval:=100;<br>.........<br>procedure TForm1.Timer1Timer(Sender: TObject);<br>begin<br> &nbsp;if Form1.Canvas.Pen.Style=psDashDot then<br> &nbsp; &nbsp;Form1.Canvas.Pen.Style:=psDot<br> &nbsp;else<br> &nbsp; &nbsp;Form1.Canvas.Pen.Style:=psDashDot;<br> &nbsp;Form1.Canvas.Rectangle(10,10,300,300);<br>end;<br>象蚂蚁吗?呵呵!给分吧!!!
 
TO:cst_zf 不会啊~~~怎么会显示任务栏?<br><br>你把form的FormStyle属性设为fsStayOnTop<br>在from的creat事件里写:<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>self.Width:=screen.Width;<br>self.Height:=screen.Height;<br>self.Top:=0;<br>self.Left:=0;<br>end;<br><br>我这里不会显示出任务栏。。。。你不要把form设成最大化<br><br>用alt+tab切换的问题,你这个from不是单独的程序,是在你主程序里的一个进程,这样就不会在切换的时候显示出来了<br><br>截屏只能截一块是什么意思??
 
我自己试试吧,按道理说我做得都是对的<br>分数等搞定以后就结,暂时先拖欠一下啦。
 
原来是改变TImage大小的时候出错了<br><br>改变image大小的时候是需要改变timage.picture.bitmap的大小<br>光改image的大小不行。<br><br>好。放分啦。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部