gpt4 book ai didi

Delphi:Screen.Cursor 不起作用,无法找出 Windows.SetCursor(crHourGlass)

转载 作者:行者123 更新时间:2023-12-03 15:22:44 24 4
gpt4 key购买 nike

在我的应用程序中,我有

Screen.Cursor := crHourGlass;
Application.ProcessMessages;
try
...

finally
Screen.Cursor := crDefault;
Application.ProcessMessages;
end;

但这根本没有按预期工作。它在处理时似乎立即变回 crDefault。

经过一番谷歌搜索后,我决定尝试 Windows.SetCursor() - 但我搜索了 MSDN,但找不到游标类型列表。

更新我以为我找到了解决方案(使用 SetSystemCursor(Screen.Cursors[crHourGlass], OCR_NORMAL);),但我似乎无法将光标更改回正常:(。

最佳答案

我想我有解决方案:

以下是如何更改“整个桌面”的光标 - 不仅仅是您的应用程序:

SetSystemCursor(Screen.Cursors[crDefault], OCR_NORMAL);

但请注意:任何其他想要更改光标的应用程序/窗口都会这样做 - 因此,只有当您的应用程序繁忙时,您的用户不会干扰其他应用程序,这才有效。作为替代,您可以暂时将所有系统默认光标更改为您想要的光标 - 并在此过程后将它们全部更改回来。

我仍然对 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;

关于Delphi:Screen.Cursor 不起作用,无法找出 Windows.SetCursor(crHourGlass),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4201109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com