使用AIR本机游标设置游标优先级

时间:2011-12-13 02:34:32

标签: actionscript-3 flex air

有没有办法通过Mouse.cursor = '...';设置鼠标光标的优先级(CursorManagerPriority.HIGH)?

长话短说,我不得不求助于使用CursorManager来应用游标,因为设置优先级对我的应用程序至关重要,因为HTML控件会覆盖所有游标更改而没有高优先级。使用游标管理器设置游标完全有效,但游标的速度/响应速度不如在操作系统级别渲染的游标(如here所述)。

如果没有办法,我的下一个问题是:有没有办法抑制HTML控件所做的光标更改?设置mouseEnabled = false可以...但禁用HTML页面上的所有鼠标事件,因此不起作用。


示例:

这不起作用:

setInterval(function():void { Mouse.cursor = 'ibeam'; }, 100);

设置具有高优先级的光标有效:

// ibeamCursor is an embedded PNG
CursorManager.setCursor(ibeamCursor, CursorManagerPriority.HIGH, -2, -4);

(此代码用于mx:Application范围)

2 个答案:

答案 0 :(得分:0)

我将假设您可以访问HTML控件的代码...否则,我不确定您是否可以执行此操作。

我认为你不能设置Mouse.cursor =“...”设置的游标优先级; (因为我可能是错的......如果有人有相反的信息,请随时纠正我。)

但是,我认为只需使用布尔变量和if语句就可以很容易地抑制游标更改。

var customCursors:Boolean;

然后,在光标发生变化的每个地方......

if(customCursors == true)
{
    Mouse.cursor = "mycursor";
}

这将允许或禁止更改游标,只需更改customCursors变量即可。

但是,如果您正在处理两个冲突的游标,并且您希望仅在某些实例中进行游标,则可能会有更多用处。为此,您可以尝试使用不同的if语句。

在我自己的代码中,我想只在拖动对象时显示一个光标,而不仅仅是当鼠标悬停在它上面时。一个在移动事件中,另一个在内部事件中。只有当对象被拖动到某一点时才会显示第三个,当它不是时,它需要是常规的拖动光标。

这造成了一场相当恼人的冲突......

为了解决这个问题,我实际检查了if语句中的Mouse.cursor属性!我的事件中各种Mouse.cursor语句的位置为游标创建了一种优先级。它运作得很好。

在我的鼠标结束语中:

Mouse.cursor = "hand";

在我的鼠标按下语句中(我开始拖动):

Mouse.cursor = "dragging";

在我的举动声明中:

if(Mouse.cursor == "draggingover")
{
    Mouse.cursor = "dragging";
}

在我的鼠标注释语句中(我停止拖动):

Mouse.cursor = "hand";

在我的鼠标声明中:

Mouse.cursor = "pointer";

我希望这有帮助!如果是这样,不要担心忽略这个看似明显的解决方案......我认为当我们寻找内置函数时,我们都倾向于这样做。

如果这没用,抱歉。再一次,我认为还有另一种方式,但如果有人知道,请称重。

答案 1 :(得分:0)

我相信HTML控件继承自ScrollControlBase。尝试在该父控件上修复鼠标问题,而不是在HTML控件上修复。

此外,您可以尝试重写HTML控件,添加代码以删除默认光标外观。见this blog post,然后反其道而行之。