微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 Java 按钮隐藏手形光标?

如何解决如何从 Java 按钮隐藏手形光标?

我想从具有虚拟键盘的 Java 桌面应用程序中隐藏 hand 光标,当鼠标光标位于每个数字上时,光标将更改为 hand 样式。

enter image description here

我使用透明图像(.cur 文件)作为资源尝试了以下代码,但无法隐藏 hand 光标。

可以将hand光标隐藏到这种元素上吗?

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}
{$R 'mycursor.res'}

uses
  Windows,Messages,SysUtils;

procedure MyShowCursor(Show: Boolean);
const
  OCR_HELP = 32651;
var
  xCursor: HCURSOR;
begin
  if Show then
    SystemParametersInfo(SPI_SETCURSORS,WM_SETTINGCHANGE or SPIF_UPDATEINIFILE)
  else
  begin
    xCursor := LoadCursor(HInstance,'XCURSOR');
    SetSystemCursor(xCursor,OCR_norMAL);
    xCursor := LoadCursor(HInstance,OCR_APPSTARTING);
    xCursor := LoadCursor(HInstance,OCR_CROSS);
    xCursor := LoadCursor(HInstance,OCR_HAND);
    xCursor := LoadCursor(HInstance,OCR_HELP);
    xCursor := LoadCursor(HInstance,OCR_IBEAM);
    xCursor := LoadCursor(HInstance,OCR_NO);
    xCursor := LoadCursor(HInstance,OCR_SIZEALL);
    xCursor := LoadCursor(HInstance,OCR_SIZEnesW);
    xCursor := LoadCursor(HInstance,OCR_SIZENS);
    xCursor := LoadCursor(HInstance,OCR_SIZENWSE);
    xCursor := LoadCursor(HInstance,OCR_SIZEWE);
    xCursor := LoadCursor(HInstance,OCR_UP);
    xCursor := LoadCursor(HInstance,OCR_WAIT);
  end;
end;

begin
  try
    MyShowCursor(False);
    Sleep(15000);
    MyShowCursor(True);
  except
    on E: Exception do
      Writeln(E.ClassName,': ',E.Message);
  end;
  Readln;
end.

解决方法

this 参考中,我了解到:

java 代码对某些游标有自己的管理,那么在这种情况下,“手”游标与系统不同,具有特殊的行为。


版本:

为方便起见从参考资料中提取:

这是我的问题: 我有一个带有按钮的框架。 在这个按钮上,我做了一个

bouton.setCursor(new Cursor(Cursor.HAND_CURSOR));

当我启动程序时,框架具有默认光标(箭头)和“手”中的按钮。 在这个框架上,我有第二个按钮,上面有一个监听器。 当我单击此按钮时,我调用了一个库,该库通过调用该方法来修改 Windows 游标:

BOOL WINAPI SetSystemCursor(
  _In_  HCURSOR hcur,_In_  DWORD id
);
 
//OCR_HAND = 32649
SetSystemCursor(chemin_de_mon_image,32649);
 
//OCR_NORMAL = 32512 
SetSystemCursor(chemin_de_mon_image,32512 );
 
...

因此,在单击按钮 2 后,我的 Windows 上的所有光标都已更改为“我的图像”,例如 Google 链接上的“手”光标。在我的 Java 应用程序中,除“手”之外的所有光标都发生了变化。 Java 似乎没有将 wintow 的本机光标用于“手”,但为什么呢?如果有人对此问题有解决方案,我对此很感兴趣,或者解释一下。


尝试放置手以外的东西,看看这个新光标是否用您的方法重绘。这个想法是看看是手有特殊行为还是用于bouron的光标.....


感谢您的 ludomacho 回复。我尝试使用其他游标(等待,交叉,...)并且我设法更改了游标,只有“主”游标不起作用。当我们仔细查看“主”光标时,它看起来与系统的“主”光标不同(无阴影),而对于其他光标,它们是相同的。有一个非常简单的测试可以找出答案,只需创建一个带有 2 个按钮的框架即可。在第一个我们做: button1.setCursor (new Cursor (Cursor.WAIT_CURSOR));在第二个我们做: button2.setCursor (new Cursor (Cursor.HAND_CURSOR));然后我们转到 Windows 设置并修改“手”和“等待”光标的外观。应用程序中只会修改“等待”光标。


java 代码有自己的“主”游标管理。 要显示系统的“主”光标(Windows 7),您必须修改 JRE 并重新编译它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。