2010-07-22 112 views
1

我希望我的程序有点像Team Player。多鼠标,多光标,但只有一个焦点。但问题是我无法隐藏默认光标。我只希望它是隐形的。 到目前为止,这仅适用于我的应用程序。如何在Windows中隐藏光标? (delphi)

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; 

回答

2

先下载一个空指针,你可以从很多地方得到它,我下载了它从 http://pc.autons.net/stuff/blanks/blank.zip ,extact 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; 

希望这有助于

+0

感谢堆...!还有一件事。我无法再显示默认光标。我尝试了最后一部分,但没有奏效。 – Dian 2010-07-22 05:47:28

+0

它在我的计算机上工作,也许你正在使用范围外的游标变量(在其他事件处理程序中,即你已经在这个事件处理程序中声明了它们,但是你重新声明并调用它们并从applicationOnClose事件中调用它们的最后一部分),请尝试声明'cursor1 ,cursor2'在单元实现部分,看看最后一部分是否现在工作? – 2010-07-22 06:11:10

+0

提示:使用GetCursor()代替CopyIcon – histrio 2010-07-22 06:19:02