如何在Windows中隐藏鼠标光标?(Delphi)

3
我希望我的程序能够像Team Player一样工作。多个鼠标,多个光标,但只有一个焦点。但问题是我无法隐藏默认的光标。我只想让它不可见。到目前为止,这仅在我的应用程序内起作用。
ShowCursor(false);

并且

Screen.Cursor:=crNone;

有没有一种方法可以在整个系统中隐藏光标(仅在关闭应用程序之前)?

编辑: 这个方法不起作用:

procedure myShowCursor(Show :boolean);
var cursor1, cursor2: HCursor;
begin
 cursor1 :=CopyIcon(Screen.Cursors[crDefault]);
 cursor2 := LoadCursorFromFile('blank\blank.cur');
 if Show then
  SetSystemCursor(cursor1, OCR_NORMAL)
 else
 SetSystemCursor(cursor2, OCR_NORMAL);
end;

这个可以运行:(但我不能完全使用它)
procedure myShowCursor;
var cursor1, cursor2: HCursor;
begin
 cursor1 :=CopyIcon(Screen.Cursors[crDefault]);
 cursor2 := LoadCursorFromFile('blank\blank.cur');

 SetSystemCursor(cursor2, OCR_NORMAL);
 SetSystemCursor(cursor1, OCR_NORMAL)
end;

已解决: 通过SystemParametersInfo恢复系统光标

procedure TForm1.myShowCursor(Show :boolean);
var cursor1: HCursor;
begin
 cursor1 := LoadCursorFromFile('blank\blank.cur');
 if Show then
  SystemParametersInfo(SPI_SETCURSORS,0,0,WM_SETTINGCHANGE or SPIF_UPDATEINIFILE )
 else
 SetSystemCursor(cursor1, OCR_NORMAL);
end;
1个回答

3

首先下载一个空白光标,你可以从许多地方获取,我从http://pc.autons.net/stuff/blanks/blank.zip下载了它,解压blank.zip文件,然后将blank.cur复制并粘贴到所需位置(例如,我将其保存到“c:\blank.cur”),然后尝试以下代码:

var cursor1, cursor2: HCursor;
begin
 cursor1 := CopyIcon(Screen.Cursors[crDefault]);
 cursor2 := LoadCursorFromFile('c:\blank.cur');
 SetSystemCursor(cursor2, OCR_NORMAL);//to hide cursor
 Sleep(2000);
 SetSystemCursor(cursor1, OCR_NORMAL);//to show cursor again
end;

希望这有所帮助


非常感谢!还有一件事。我无法再次显示默认光标。我尝试了最后一部分,但它没有起作用。 - Dian
它在我的电脑上运行正常,也许你正在使用光标变量超出其范围(在其他事件处理程序中,即你已经在此事件处理程序中声明了它们,但是你正在重新声明和调用它们以及来自say applicationOnClose事件的最后一部分),尝试在单元实现部分声明“cursor1,cursor2”,看看最后一部分是否能正常工作? - Omair Iqbal
使用GetCursor()替代CopyIcon。 - histrio
@omair:请看我的修改。不,不会在范围之外使用它们。 @histrio:好的,我会尝试。谢谢。 - Dian
尝试使用GetCursor()没有成功,但是LoadCursor(0, IDC_UPARROW)在除了IDC_ARROW之外的所有情况下都表现良好。:C - Dian
解决了。谢谢你的帮助。:D - Dian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接