如何在屏幕上输出一个十字线. ( 积分: 50 )

  • 主题发起人 主题发起人 wei0916
  • 开始时间 开始时间
W

wei0916

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在屏幕上输出一个十字线.并在十字线交叉处显示X,Y值呢.
 
你是要在屏幕上输出,还是在form上输出?
 
在屏幕上输出一条十字线,跟着鼠标移动而移动,并在交叉处显示X,Y坐标值,有没有办法,.在FORM输出我知道了.
 
全局钩子。。。Hook鼠标消息,使用屏幕DC绘图
 
moveto 与Lineto
记得鼠标前一个坐标值,然后动态切换画刷的风格,清除之前的10字线就可以
 
var
arect:trect;
acanvas:tcanvas;
dc:hdc;

procedure initmdc;{先初始化}
begin
dc:=getdc(0);
arect:=rect(0,0,0,0);
acanvas:=tcanvas.create;
acanvas.handle:=dc;
end;

procedure directorymdc;{关闭时释放}
begin
releasedc(0,dc);
acanvas.free;
end;

proceudre mdcout;
var
str:string;
sw,sh:integer;
begin
{这里应该先调用函数刷新上一次输出区域}
//InvalidateRect(0,@arect,true); //这句有问题,0应该是整个桌面,但是如果第一个参数给的是0,就会无视后面的arect范围而刷新整个桌面造成闪烁....
str:='x:'+inttostr(mouse.cursorpos.x)+' y:'+inttostr(mouse.cursorpos.y);
sw:=acanvas.textwidth(str);
sh:=acanvas.textheight(str);
arect.left:=mouse.cursorpos.x-sw div 2 -30;
arect.top:=mouse.cursorpos.y-sh div 2 -30;
arect.right:=mouse.cursorpos.x+sw div 2 +30;
arect.bottom:=mouse.cursorpos.y+sh div 2 +30;
{画十字}
acanvas.pen.width=3;
acanvas.pen.color=clblue;
acanvas.moveto(arect.left,mouse.cursorpos.y);
acanvas.lineto(mouse.cursorpos.x-sw div 2,mouse.cursorpos.y);
acanvas.moveto(mouse.cursorpos.x+sw div 2,mouse.cursorpos.y);
acanvas.lineto(arect.right,mouse.cursorpos.y);
acanvas.moveto(mouse.cursorpos.x,arect.top);
acanvas.lineto(mouse.cursorpos.x,mouse.cursorpos.y-sh div 2);
acanvas.moveto(mouse.cursorpos.x,mouse.cursorpos.y+sh div 2);
acanvas.lineto(mouse.cursorpos.x,arect.bottom);
{输出文字}
acanvas.brush:=bsClear;
acanvas.font.color=clred;
acanvas.textout(mouse.cursorpos.x-sw div 2,mouse.cursorpos.y-sh div 2,str);
end;
 
高手们多呀,我试试,谢了.
 
不能擦除原来的内容呢,一动,满屏都是.
 
是啊 InvalidateRect(0,@arect,true); 这句是擦除上次的痕迹的
但是就像注释里说的,如果第一个参数给0 就会全屏刷新,闪的很厉害,而不是只刷新arect的那个区域
我也找不到解决办法呢......看有没有其他高手解决了
这方面我也不熟
 
用鼠标D绘图C能在游戏中不被覆盖?
 
将鼠标的形状设为十字,得到坐标值,并用一个Label定位,然后显示出即可
 
后退
顶部