5,714
社区成员
我想做一个工具,可以在屏幕上自由的画线条的,当我点击按钮之后,鼠标经过的位置就会有线条出现
目前做法如下
New Form
VAR
DC:HDC; //gdi句柄
zuobiao:Tpoint; //坐标变量
huatu:boolean=false //画图变量判断
app:Tcanvas; //画布变量
窗体TForm1.FormCreate事件触发
dc=getdc(0) //获取屏幕句柄
app:=canvas.Create; //创建一个Canvas对象
app.Handle:=DC; //将屏幕和画布关联
Getcursorpos(Zuobiao); //获取当前屏幕坐标位置
鼠标OnMouseDown事件触发
app.MoveTo(zuobiao.X,zuobiao.Y);//画布的坐标移动到我屏幕坐标位置
if button =mbleft then begin //判断按键左右
app.Pen.Color:=clred; //画笔颜色设置为红色
app.Pen.Width:=3; //画笔宽度为3
huatu:=true; //画图变量为真
end
else
begin
huatu:=false; //画图变量为假
end;
end;
OnMouseMove事件触发
if huatu then begin
app.lineto(zuobiao.x,zuobiao.y); //将我鼠标经过的画出线条
end;
但是现在问题是,打开Form就报错,另外就是不在屏幕上画线
已经折腾了五个小时了,请大佬帮帮忙,小弟在线等答案!
不知道问题出在哪里了!!!
打开Form报什么错呢?
其实,通常就是取到鼠标经过的点,然后就画就可以的。
窗体设置为全屏、无边框,AlphaBlend设置为true,AlphaBlendValue设置为一个比较小的值,比如16,然后在鼠标事件中画就可以了。
你的做法是不行的,虽然直接绘制到桌面是可以的,但是交互操作则不行,因为你获得不到桌面窗口的键盘、鼠标消息(hook是可以的,但是比较繁琐,没有必要)。