【问题标题】:How hide hand cursor from Java buttons?如何从 Java 按钮中隐藏手形光标?
【发布时间】:2021-08-12 05:44:04
【问题描述】:

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

我使用透明图像(.cur 文件)作为资源尝试了以下代码,但无法隐藏 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, 0, 0, WM_SETTINGCHANGE or SPIF_UPDATEINIFILE)
  else
  begin
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_NORMAL);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_APPSTARTING);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_CROSS);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_HAND);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_HELP);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_IBEAM);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_NO);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_SIZEALL);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_SIZENESW);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_SIZENS);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_SIZENWSE);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_SIZEWE);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, OCR_UP);
    xCursor := LoadCursor(HInstance, 'XCURSOR');
    SetSystemCursor(xCursor, 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.

【问题讨论】:

  • 我不明白 Java 应用程序和您的 Delphi 代码之间的关系。也不是你真正想做的。请解释一下。
  • @fpiette。解决了。感谢您的关注。

标签: delphi delphi-10.3-rio mouse-cursor


【解决方案1】:

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 并重新编译它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多