
Delphi 更换鼠标图标
DELPHI中使用自定义光标在DELPHI中使用自定义光标是非常容易的,只有用几个API函数就可以搞定。最常见的用法是使用LoadCursorFromFile函数从文件载入光标(当然也可从资源中载入),然后使用SetClassLong函数替换掉指定窗体的光标,具体程序如下:varhOldCur: HICON;hNewCur: HICO
·
DELPHI中使用自定义光标
在DELPHI中使用自定义光标是非常容易的,只有用几个API函数就可以搞定。
最常见的用法是使用LoadCursorFromFile函数从文件载入光标(当然也可从资源中载入),然后使用SetClassLong函数替换掉指定窗体的光标,具体程序如下: var hOldCur: HICON; hNewCur: HICON; begin Application.Initialize; hOldCur := 0; try hNewCur := LoadCursorFromFile('G:\001.ani'); if hNewCur <> 0 then hOldCur := SetClassLong(Handle, GCL_HCURSOR, hNewCur); Application.CreateForm(TForm5, Form5); Application.Run; finally if hOldCur <> 0 then SetClassLong(Handle, GCL_HCURSOR, hOldCur); end; end. 另一种用法是用自定义的光标覆盖掉Screen对象的Curosrs数组,具体代码如下: var hOldCur: HICON; hNewCur: HICON; begin Application.Initialize; hOldCur := Screen.Cursors[-11]; hNewCur := LoadCursorFromFile('G:\001.dll'); if hNewCur <> 0 then Screen.Cursors[-11] := hNewCur; Application.CreateForm(TForm5, Form5); Application.Run; Screen.Cursors[-11] := hOldCur; end. 其中,crDefault、crArrow等常数在Controls单元中定义: const crDefault = TCursor(0); crNone = TCursor(-1); crArrow = TCursor(-2); crCross = TCursor(-3); crIBeam = TCursor(-4); crSize = TCursor(-22); crSizeNESW = TCursor(-6); crSizeNS = TCursor(-7); crSizeNWSE = TCursor(-8); crSizeWE = TCursor(-9); crUpArrow = TCursor(-10); crHourGlass = TCursor(-11); crDrag = TCursor(-12); crNoDrop = TCursor(-13); crHSplit = TCursor(-14); crVSplit = TCursor(-15); crMultiDrag = TCursor(-16); crSQLWait = TCursor(-17); crNo = TCursor(-18); crAppStart = TCursor(-19); crHelp = TCursor(-20); crHandPoint = TCursor(-21); crSizeAll = TCursor(-22); 可以直接用括号中的索引值替代常数名,上例就是如此。 上面两种只是普通的用法,某些时候,可能会发现上面两种方法都不能令光标改变,那就要用一些特殊点的手段了,就是设置全局光标。 设置全局光标,要用到两个API函数(包括LoadCursorFromFile是三个): SetSystemCursor 和 SystemParametersinfo SetSystemCursor一看就知道是用来设置光标的,与之相反,SystemParametersinfo就是用来恢复系统默认光标的了(这个函数功能太强大,还有其它很多用途)。使用这种方法设置的光标是全局有效的(也就是离开自已程序的窗体还有效),而前面两种方法都做不到这一点。好了,还是看程序代码吧,非常简单的一段代码: try if FileExists('busy.dll') then hCur := LoadCursorFromFile('busy.dll'); if hCur <> 0 then SetSystemCursor(hCur, OCR_NORMAL); //------------------------------------------ //做一些耗时的工作 //------------------------------------------ finally SystemParametersinfo(SPI_SETCURSORS, 0, nil, SPIF_SENDCHANGE); end; |
更多推荐
所有评论(0)