Flex では、デフォルトのビジーカーソルが定義されています。ビジーカーソルを使用して、アプリケーションが処理中であり、処理が完了してアプリケーションが入力に応答するようになるまで待つ必要があることをユーザーに知らせることができます。デフォルトのビジーカーソルは時計のアニメーションです。
ビジーカーソルは、次に挙げるいくつかの方法で制御できます。
Cursor Manager に用意されている次の静的メソッドでビジーカーソルを制御します。
|
メソッド |
説明 |
|---|---|
| setBusyCursor() |
ビジーカーソルを表示します。 |
| removeBusyCursor() |
カーソルリストからビジーカーソルを削除します。他のビジーカーソル要求がカーソルリスト内でまだアクティブな場合、つまり setBusyCursor() メソッドを 2 回以上呼び出していた場合には、ビジーカーソルがリストからすべて削除されるまで、ビジーカーソルは消えません。 |
デフォルトのビジーカーソルを使用するように、カーソルの作成と削除にある例を修正できます。次に例を示します。
<?xml version="1.0"?>
<!-- cursors\DefBusyCursorApp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.managers.CursorManager;
import flash.events.*;
private function initImage(event:MouseEvent):void {
CursorManager.setBusyCursor();
image1.load("../assets/DSC00034.JPG");
}
private function loadComplete(event:Event):void {
CursorManager.removeBusyCursor();
}
]]>
</mx:Script>
<mx:VBox>
<!-- Image control to load the image. -->
<mx:Image id="image1"
height="50"
width="100"
scaleContent="true"
complete="loadComplete(event);"/>
<!-- Button triggers the load. -->
<mx:Button id="myButton" label="Show" click="initImage(event);"/>
</mx:VBox>
</mx:Application>
前の例で実行する SWF ファイルは以下のとおりです。
ビジーカーソルを設定しても、ユーザーによるアプリケーションの操作に影響はなく、ユーザーはテキストの入力やボタンの選択を行うことができます。ただし、すべてのコンテナが enabled プロパティをサポートします。デフォルトでは、このプロパティは true に設定され、コンテナとその子に対するユーザー操作が可能となっています。あるコンテナの enabled プロパティを false に設定すると、ビジーカーソルが表示されているときは、そのコンテナとそのすべての子のカラーがグレー表示になり、そのコンテナとそのすべての子には入力できなくなります。
また、アプリケーション全体に対するユーザー操作を無効にするには、Application.application.enabled プロパティを false に設定します。サブクラスまたは ActionScript 専用のアプリケーションを使用している場合は、mx.core.Application クラスを明示的に読み込むか、mx.core.Application.application.enabled を指定してプロパティの値を設定する必要があります。
ビジーカーソルの優先度は CursorManagerPriority.LOW です。したがって、より高い優先度のカーソルがカーソルリストにある場合は、そのカーソルを削除しない限り、ビジーカーソルは表示されません。デフォルトで高い優先度を持つビジーカーソルを作成するには、次の例に示すように setCursor() メソッドを使用します。
<?xml version="1.0"?>
<!-- cursors\ShowBusyCursorAppHighP.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.managers.CursorManager;
import mx.managers.CursorManagerPriority;
import flash.events.*;
// Define a variable to hold the cursor ID.
private var cursorID:Number = 0;
// Define event listener to display the busy cursor
// and to load the image.
private function initImage(event:MouseEvent):void {
// Set busy cursor.
cursorID=CursorManager.setCursor(
StyleManager.getStyleDeclaration("CursorManager").getStyle("busyCursor"),
CursorManagerPriority.HIGH);
// Load large image.
image1.load("../assets/DSC00034.JPG");
}
// Define an event listener to remove the wait cursor.
private function loadComplete(event:Event):void {
CursorManager.removeCursor(cursorID);
}
]]>
</mx:Script>
<mx:VBox>
<!-- Image control to load the image. -->
<mx:Image id="image1"
height="50"
width="100"
scaleContent="true"
complete="loadComplete(event);"/>
<!-- Button triggers the load. -->
<mx:Button id="myButton" label="Show" click="initImage(event);"/>
</mx:VBox>
</mx:Application>
前の例で実行する SWF ファイルは以下のとおりです。
このステートメントは、StyleManager クラスの静的な getStyleDeclaration() メソッドを使用して Cursor Manager の CSStyleDeclaration オブジェクトを取得し、このオブジェクトの getStyle() メソッドを使用してビジーカーソルを取得します。これにより、ビジーカーソルに高い優先度を設定します。
この方法を使用するときは、removeCursor() メソッドでカーソル ID を使用してビジーカーソルを削除することも必要です。
SWFLoader と Image の各コントロールと、<mx:WebService>、<mx:HttpService>、<mx:RemoteObject> の各タグには、showBusyCursor プロパティがあります。このプロパティを使用すると、該当のクラスでデータのロードが完了するまで自動的にデフォルトのビジーカーソルが表示されます。デフォルト値は、false です。これは、SWFLoader コントロール、Image コントロール、<mx:WebService> タグ、<mx:HttpService> タグおよび <mx:RemoteObject> タグの場合も同様です。
showBusyCursor プロパティを true に設定すると、コントロールの最初の progress イベントがトリガされたときにビジーカーソルが表示され、complete イベントがトリガされたときにビジーカーソルが非表示になります。次の例は、showBusyCursor プロパティを使用して、ビジーカーソルの設定の節で挙げた例を簡素化する方法を示しています。
<?xml version="1.0"?>
<!-- cursors\ShowBusyCursorApp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:VBox>
<!-- SWFLoader control to load the image. -->
<mx:SWFLoader id="image1"
height="50"
width="100"
scaleContent="true"
showBusyCursor="true"/>
<!-- Button triggers the load. -->
<mx:Button id="myButton" label="Show"
click="image1.load('../assets/DSC00034.jpg');"/>
</mx:VBox>
</mx:Application>
前の例で実行する SWF ファイルは以下のとおりです。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート