怎样改变预设的鼠标形状?(200分)

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

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中可以通过LoadCursor来调入自定义的鼠标形状,但是怎样把
系统预设的几个标准鼠标形状改变成自定义的形状? 比如ReSize窗口
时的几种鼠标形状?
 
呵呵,让你空欢喜了,我只是感兴趣,想听听……
 
提醒一句: 我只想改变自己程序的鼠标,不想更改整个系统的.
 
1
其实最简单的办法是将Resize状的光标替换掉,Delphi中它是一个系统的光标,索引
号是??,简单的把他在主Form Create的时候替换掉就行了:
如:
//替换成标准的等待光标形状
Screen.Cursors[??] := Screen.Cursors[-11];

//替换成空,清除它
Screen.Cursors[??] := Screen.Cursors[-1];
??是光标的索引号,自己找一下吧

2
打开lib/controls.res编辑一下,
一劳永逸
 
用这个方法好像没用?
Screen.Cursors[??] := Screen.Cursors[-11];
 
screen.cursors[crhourglass]:=loadcursor(hinstance,yourcursorid);
 
hutdog你试一试:
screen.cursors[crsizewe]:=loadcursor(hinstance,'SIZEWE');

然后当鼠标移动到窗口边缘时,那个size光标还是以前的,没有起作用
 
声明 procedure HitTest(var msg:TWMNCHITTEST);message WM_NCHITTEST;

procedure TForm1.HitTest(var msg:TWMNCHITTEST);
begin
inherited;
if msg.Result=HTLEFT then SetCursor(LoadCursor(0,IDC_HAND));
end;

如果Cursor在资源中,就换成SetCursor(LoadCursor(HInstance,'myCursor'));
 
o*o: 还有问题. 现在光标出现了,但是我设计的SIZEWE光标(东西方向的),
为什么不能像以前的光标那样"骑"在窗口border上面,而只能在border
的左边或右边? 而且,当我按下鼠标开始drag窗口size时,鼠标又变回去了.
 
你在设计Cursor时,应指定它的Hot Spot,缺省是(0,0)呀。

drag的问题我再想想。
 
哦,在WM_SIZING里:

if msg.wParam=WMSZ_LEFT then SetCursor(LoadCursor(0,IDC_HAND));
 
我设置了hot spot为16:16,可还是不行.
 
还有,现在sizing的时候可以乐,但是当鼠标在border上按下的时候还是没变,
只有开始拖曳size的时候才变化,还有什么消息需要捕获?
 
改了Hot Spot要Build All Projects一下。
>>鼠标在border上按下的时候还是没变,
我这里就不是这样。我用的是D4,不会有什么差别吧。
 
WM_NCLBUTTONDOWN
 
WM_NCLBUTTONDOWN可以得到鼠标的位置CursorX,CursorY,从而可以
推算出鼠标是否在边框上.不过有没有简单的方法? 比如这个消息里面
的HitTest是什么意思? 能否直接利用?

hot spot还是不行.
 
我觉得还是直接改资源文件来得快一些。
 
procedure TForm1.MyMouse(var Message: TMessage);
begin
if Message.WParam=HTBOTTOMRIGHT then SetCursor(LoadCursor(0,IDC_HAND));
inherited;
end;
 
用我的方法,只在WM_NCLBUTTONDOWN,WM_NCLBUTTONUP中改就行了.
 
后退
顶部