Oracle Forms 10g鼠标指针图标更改方法及自定义动效图标可行性咨询
嘿,针对你提出的两个问题,我整理了一些绕开set_application_property(CURSOR_STYLE, 'HAND')这类预设方法的可行方案,具体如下:
1. 如何在Oracle Forms 10g中更改鼠标指针图标?
Oracle Forms 10g原生对自定义光标支持有限,但可以通过以下两种方式实现:
嵌入Java Bean组件
这是相对跨平台的方案,你可以编写一个简单的Java Bean来控制光标,然后嵌入到Forms中。
首先写一个Java类,利用AWT的光标API:public class CustomCursorBean extends java.awt.Component { public void setCustomCursor(String cursorFilePath) { java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit(); java.awt.Image cursorImg = toolkit.getImage(cursorFilePath); // 第二个参数是光标热点(点击生效的位置),这里设为左上角(0,0) java.awt.Cursor customCursor = toolkit.createCustomCursor(cursorImg, new java.awt.Point(0,0), "MyCustomCursor"); this.setCursor(customCursor); } }接着在Forms中注册这个Bean,创建对应的Bean块和项,之后在需要触发光标变化的触发器(比如
WHEN-MOUSE-ENTER)里调用:SET_CUSTOM_PROPERTY('CUSTOM_BEAN_BLOCK.CURSOR_BEAN_ITEM', 1, 'SETCUSTOMCURSOR', 'D:\cursors\my_custom_cursor.cur');注意要确保客户端JRE能访问到光标文件,10g通常适配JRE 1.4,代码要兼容这个版本。
调用Windows API(仅限Windows客户端)
如果你的Forms只在Windows环境运行,可以写一个轻量的外部程序(比如VB/VC编写),调用Windows系统API加载自定义光标。比如VB程序里用LoadCursorFromFile和SetCursor函数,然后在Forms中通过HOST命令触发:HOST('C:\utils\SetCustomCursor.exe C:\cursors\special_cursor.cur');不过这个方法会修改整个系统的光标,记得在
WHEN-MOUSE-LEAVE触发器里调用恢复默认光标的程序,避免影响其他应用。
2. 是否可在Oracle Forms中使用自定义动效图标修改鼠标指针?
Oracle Forms 10g原生不支持动画光标(比如.ani格式),但通过以下方式可以模拟或实现:
Java Bean模拟动画
Java的createCustomCursor只支持静态图片,但你可以在Bean中用定时器定时切换不同的光标帧,模拟动画效果。比如加载一组连续的光标图片,用java.util.Timer每隔几十毫秒切换一次光标,这样在Forms中看起来就是动态的。Windows API加载动画光标
Windows原生支持.ani格式的动画光标,所以用外部程序调用LoadCursorFromFile加载.ani文件并设置光标,就能显示动效。同样要注意,这是系统级的修改,需要做好光标恢复的逻辑。
最后提醒下,这些方案都需要考虑客户端的权限问题,比如访问本地文件的权限,以及Forms的安全设置是否允许调用外部程序或Java Bean。
内容的提问来源于stack exchange,提问作者Liton Biswas

