程序功能:拖动鼠标到桌面不同控件或窗口上以红色显示其外框,类似于超级屏捕效果.
现在效果已经实现,但是小弟试了很多次,都没搞定,前一次绘图的内容如何擦除??
试用updatewindow,sendmessage(wm_paint...等等,都没效果,请各位兄弟帮忙看看...{这是主功能块,鼠标移动时取得对应窗口或控件...}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
p:tpoint;
whand:thandle;
fs:tcanvas;
beginif capture then
begin
fs:=tcanvas.Create;
getcursorpos(p);
whand:=windowfrompoint(p);
fcan.Handle:=getwindowdc(getdesktopwindow); //sendmessage(whand,WM_PAINT,0,0);//好像也无效...
getwindowrect(whand,fp);
fcan.Pen.Color:=clred;
fcan.Pen.Width:=2;
fcan.Brush.style:=bsclear; fcan.Refresh;//刷新画布无效...
fcan.Rectangle(fp); end;
end;
现在效果已经实现,但是小弟试了很多次,都没搞定,前一次绘图的内容如何擦除??
试用updatewindow,sendmessage(wm_paint...等等,都没效果,请各位兄弟帮忙看看...{这是主功能块,鼠标移动时取得对应窗口或控件...}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
p:tpoint;
whand:thandle;
fs:tcanvas;
beginif capture then
begin
fs:=tcanvas.Create;
getcursorpos(p);
whand:=windowfrompoint(p);
fcan.Handle:=getwindowdc(getdesktopwindow); //sendmessage(whand,WM_PAINT,0,0);//好像也无效...
getwindowrect(whand,fp);
fcan.Pen.Color:=clred;
fcan.Pen.Width:=2;
fcan.Brush.style:=bsclear; fcan.Refresh;//刷新画布无效...
fcan.Rectangle(fp); end;
end;
方法不错,不过这样很慢!!楼主:
画线时设置:
Canvas.Pen.Mode := pmXor;
意思就是取反,如果再反一次就恢复了三。:)也就是画第一次,线条出来,同样的位置再画一次就消失。