在我的应用程序中,我有
Screen.Cursor := crHourGlass;
Application.ProcessMessages;
try
...
finally
Screen.Cursor := crDefault;
Application.ProcessMessages;
end;
Run Code Online (Sandbox Code Playgroud)
但这根本没有按预期工作。它似乎在处理时立即变回 crDefault。
经过一番谷歌搜索后,我决定尝试 Windows.SetCursor() - 但我已经搜索了 MSDN,但找不到光标类型列表。
更新 我以为我找到了解决方案(使用 SetSystemCursor(Screen.Cursors[crHourGlass], OCR_NORMAL);)但我似乎无法将光标更改回正常:(。
我想我有解决方案:
以下是如何更改“整个桌面”的光标 - 不仅仅是针对您的应用程序:
SetSystemCursor(Screen.Cursors[crDefault], OCR_NORMAL);
Run Code Online (Sandbox Code Playgroud)
但请注意:任何其他想要更改光标的应用程序/窗口都会这样做 - 因此,只有当您的应用程序忙碌时,您的用户不会与其他应用程序混在一起,这才有效。作为替代,您可以暂时将所有系统默认光标更改为您想要的光标 - 并在此过程后将它们全部更改回来。
我仍然对 MSDN 没有为 SetCursor 提供其游标类型感到失望 - 但幸运的是我最终没有使用它。
更新: 这似乎是正确的轨道,但我似乎无法在 SetSystemCursor(Screen.Cursors[crHourGlass], OCR_NORMAL); 之后将光标改回来。如果有人正在阅读本文,如果您能花点时间向我提供一些工作代码,我将不胜感激 - 1. 将系统光标设置为沙漏,然后返回到箭头。
编辑:恢复到默认光标的示例代码:
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
// do processing
finally
SetSystemCursor(cArrow, OCR_NORMAL);
end;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12565 次 |
| 最近记录: |