0

1か月以来、Iamは、メッセージ、状態、モーダル(true / false)などのパラメーターを持つカスタムダイアログボックスの作成に取り組んでいます。

例えば:

showAlert("Hi, how are you doing","Goodmorning", true);

イベントの発送方法を学びました。ただし、Statesを使用してalertevent/popupManagerをディスパッチすることはできません。以下は私が苦労しているコードです。

Main.mxml

<?xml version="1.0" encoding="utf-8"?>
 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Script>
<![CDATA[

    public function onclick(event:MouseEvent):void
    {
    this.dispatchEvent("Hi, How are you?", "Morning", true);
    }
     public function dispatchEvent(arg1:String, arg2:String, arg3:Boolean):void
    {
        var str:*=null;
        str.message = arg1;
        str.stateName = arg2;
        str.modal = arg3;
        this.dispatchEvent(new ShowAlert(ShowAlert.SHOW, true));
    }

]]>
  </mx:Script>  
  <mx:Button id="click" click="onclick(event)"/>
  </mx:Application>

ShowAlert.as

package 
{
import flash.events.*;

public class ShowAlert extends Event
{

    public var _stateName:String;

    public var _closable:Boolean;

    public var _message:String;

    public var _isModal:Boolean;
    public static const SHOW:String="show";


    public function flash.events.(arg1:String, arg2:Boolean=false, arg3:Boolean=false)
    {
        super(arg1, arg2, arg3);
        trace("arg1: "+arg1+"\t arg2: "+arg2+"\t arg3: "+arg3);

    }

    public function set message(arg1:String):void
    {
        this._message = arg1;

    }


    public function get message():String
    {
        return _message;
    }


    public function get modal():Boolean
    {
        return _isModal;
    }


    public function get stateName():String
    {
        return _stateName;
    }

    public function set stateName(arg1:String):void
    {
        this._stateName = arg1;

    }




          public function set modal(arg1:Boolean):void
    {
        this._isModal = arg1;

    }

    public override function clone():flash.events.Event
    {
        return new ShowAlert(type);
    }


 }
 }

状態を使用してカスタムタイトルウィンドウを作成できなかったので、投稿します。

これを実現する方法を教えてください。

以下は私の問題を特定するサンプルコードです

main.mxml:

 <?xml version="1.0" encoding="utf-8"?>
 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Script>
<![CDATA[
import mx.controls.Alert;
public var info:IModuleInfo;
public var loadalert:DisplayObject;
import mx.modules.ModuleManager;
    import mx.modules.IModuleInfo;
    import mx.events.ModuleEvent;
    public function init():void
    {
        Alert.show("This is forst alert.");

    }
    public function Loadalerrt():void
    {
        trace("loadalertmodule");
        info = ModuleManager.getModule("../bin-debug/alerrtmod.swf");
        info.addEventListener(ModuleEvent.READY, modEventHandler); 
        info.load();

    }
    public function modEventHandler(event:ModuleEvent):void
    {
        trace("modeventHandler");
    loadalert=info.factory.create() as DisplayObject;
    can1.addChild(loadalert);

    }
]]>
 </mx:Script>
<mx:Button label="Alert in Application" id="b1" click="init()" x="29" y="21"/>
<mx:Button label="Load Module" id="b2" click="Loadalerrt();" x="10" y="92"/>
<mx:Canvas id="can1"  x="409" y="57" backgroundColor="cyan"/>
</mx:Application>

alerttmod.mxml

  <?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400"   height="300">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
    public function alertshow():void
    {
        Alert.show("This is second alert, You Can see it covers whole   application, What I want is its scope should be limited to this specific module, not to whole application ");
    }
]]>
</mx:Script>
<mx:Button label="Alert in Module" id="b1" click="alertshow()" x="163" y="100"/>
</mx:Module>
4

1 に答える 1

0

今、私はあなたの問題を見ます。アラートのモーダルエリアを制限することはできないと思います。ダイアログが表示されている間にモジュール要素を無効にすることで、モーダル動作を偽造することをお勧めします。

それはあなたを助けることができるかもしれません...

これを実証するための2つのコンポーネントを次に示します。

//別のアラートを含むモジュール

<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400"   height="300">
<mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.managers.PopUpManager;

        public function alertshow():void
        {
            Alert.show("This is second alert...");
        }

        public function alertshow2():void
        {
            var customAlert:CustomAlert = new CustomAlert();
            customAlert.addEventListener("CLOSED", onCustomAlertClosed);
            this.enabled = false;

            PopUpManager.addPopUp(customAlert, this, false);
            PopUpManager.centerPopUp(customAlert);
        }

        private function onCustomAlertClosed(evt:Event):void
        {
            this.enabled = true;
        }
    ]]>
</mx:Script>
<mx:Button label="Alert in Module" id="b1" click="alertshow()" x="163" y="100"/>

<mx:Button label="CustomAlert in Module" id="b2" click="alertshow2()" x="163" y="150"/>

<mx:Canvas width="100%" height="100%" backgroundColor="0xbbbbbb" alpha="0.8" visible="{!this.enabled}"/>

</mx:Module>

//パネルとしての単純なCustomAlert

<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="300" height="200">
<mx:Script>
    <![CDATA[
        import mx.managers.PopUpManager;

        protected function button1_clickHandler(event:MouseEvent):void
        {
            PopUpManager.removePopUp(this);
            this.dispatchEvent(new Event("CLOSED"));
        }
    ]]>
</mx:Script>
<mx:Button x="112" y="128" label="Close" click="button1_clickHandler(event)"/>
</mx:Panel>
于 2013-03-04T12:06:13.573 に答える