我认为我有解决方案:
以下是如何更改“整个桌面”的光标 - 而不仅仅是您的应用程序:
SetSystemCursor(Screen.Cursors[crDefault], OCR_NORMAL);
但要注意:任何想要更改光标的其他应用程序/窗口都会这样做 - 因此,只有在您的应用程序忙碌时用户不乱动其他应用程序才有效。作为覆盖,您可以暂时将所有系统默认光标更改为所需的光标 - 并在过程结束后将它们全部更改回来。
我仍然对MSDN没有为SetCursor提供其光标类型感到失望 - 但幸运的是我最终没有使用它。
更新:
这似乎是正确的方法,但我似乎无法在 SetSystemCursor(Screen.Cursors[crHourGlass], OCR_NORMAL);之后将光标改回箭头。
如果有人在阅读这篇文章,请花点时间为我提供一些可行的代码 - 首先将系统光标设置为沙漏,然后再将其设置回箭头。
编辑: 恢复默认光标的示例代码:
procedure TForm1.Button1Click(Sender: TObject);
var
cArrow, cHour: HCURSOR;
begin
cArrow := CopyImage(Screen.Cursors[crArrow], IMAGE_CURSOR, 0, 0, LR_COPYFROMRESOURCE);
cHour := CopyImage(Screen.Cursors[crHourGlass], IMAGE_CURSOR, 0, 0, LR_COPYFROMRESOURCE);
if (cArrow <> 0) and (cHour <> 0) and SetSystemCursor(cHour, OCR_NORMAL) then
try
finally
SetSystemCursor(cArrow, OCR_NORMAL);
end;
end;
Windows.SetCursor()
不起作用。'TWinControl' 返回Screen.Cursor
用于WM_SETCURSOR
消息,除非控件显式地设置了其光标,否则 VCL 控件上的光标将恢复为 Screen.Cursor。但无论如何,当您必须使用它时:windows.SetCursor(Screen.Cursors[crHourGlass])
。设置 'Screen.Cursor' 调用相同的方法,顺便提一下。 - Sertac Akyuz