Flash CS4でAlertを実装する方法

Flash CS4でAlertを実装する方法を紹介します。
通常Flash CS4ではmx.*のコンポーネントが無い為、Alert.showと出来ません。(おそらく)

ちなみに、Flexでは下記のようにAlertを使用する事が出来ます。

import mx.controls.Alert;
        public function handleFault(event:FaultEvent):void
        {
          Alert.show(event.fault.faultString, "Error");
        }

そこで、Flash CS4でAlert以上が出来るコンポーネントを発見しましたので紹介します。

ASTRA Flash Componentsのインストール

下記のASTRA Flash Componentsをダウンロード後解凍し、Build/Astra.mxpを実行するとFlash CS4でAlert機能を始め、チャート図作成やタブメニュー作成のコンポーネントが使用することが出来ます。
http://developer.yahoo.com/flash/astra-flash/

Exampleファイルもありますので、とてもわかりやすくAlert機能が実装出来ました。

こんな感じで。

まとめ

今度progression(なにより初Flash?)を使用した初作品をリリースしますのでこうご期待!
突っ込み大歓迎です!

http://d.hatena.ne.jp/zahir/20081221/1229797637のような情報もあるので、FlashFlexコンポーネントを使用できなくは無いかもしれませんね。
(方法が分からない…。)

その他

気になるコンポーネントも発見したのでメモ。
http://blog.alt-scape.com/archives/293


[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

progressionのstage.addChildでハマったので記事にしました。

昨日の記事actionscriptのnumChildrenプロパティでハマったので記事にしました。 - @camelmasaの開発日記の続きです。
progressionのstage.addChildでハマったので記事にしました。

progressionのindex.asのコンストラクタでハマる

progressionのコンストラク

public function Index() {
}

内で下記のソースを追加しました。

hoge = new Shape();
hoge.graphics.beginFill(0xB11016);
hoge.graphics.drawRect(10,10, 10, 10);
stage.addChild(hoge);

コンパイルすると、

Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

というエラーが表示されてしまいました。

解決方法

progressionのコンストラクタ内でstageオブジェクトが使用出来ない様なので、index.as内のprotected override function _onInit():void内でstage.addChildする事で解決出来ました。

まとめ

こまめにtraceする癖をつけよう。



[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

actionscriptのnumChildrenプロパティでハマったので記事にしました。

actionscriptフレームワークprogressionを使用して、サービスを作成しているのですが、numChildrenプロパティでハマったので記事にしました。

numChildrenプロパティとは?

指定したオブジェクト内にいくつのオブジェクトを保有しているかを調べるプロパティです。

なぜnumChildrenプロパティを使用したのか?

複数のオブジェクトを、最前列に表示したいが為にnumChildrenプロパティを使用したのですが、googleactionscript 最前列 - Google 検索で検索すると、
下記のサイトで方法が紹介されていました。

HugeDomains.com - Shop for over 300,000 Premium Domains

ハマりどころ

サイト内では、

オブジェクトを最前面にしたい時
stage.setChildIndex(最前列にしたいオブジクトの名前,numChildren-1);

と書いてありましたので、コピペで使用してnumChildrenの意味も分からず使用してしまってハマってしまいました…。

正確には、

stage.setChildIndex(最前列にしたいオブジクトの名前,対象のオブジェクトの名前.numChildren-1);

のようで、対象のオブジェクトの名前の部分を省略すると、this.numChildren-1と解釈されてしまう模様…。

まとめ

PHPerな脳みそを交換したいです。
オブジェクト指向的なソースコードの書き方に慣れないといけませんね…。



[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

AIRのHTTPServiceで、複数のサイトの情報をDataGridに反映しても直ぐに反映されない…。

恐らく自分の方法が駄目なんだと思うのですが、どの部分がダメなのか特定出来ません…。

人力検索してみました。

http://q.hatena.ne.jp/1214637139

下記のソースがサンプルになります。
ソースが雑だと思います。すみません。

<?xml version="1.0" encoding="utf-8"?>
  <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="absolute"
    verticalAlign="middle" width="582" height="334">

    <mx:Script>
      <![CDATA[ 
        import mx.rpc.events.ResultEvent;
        import mx.rpc.events.FaultEvent;
        import mx.controls.Alert;

        //google検索
        public function SearchGoogle():void
        {
          var uv:URLVariables = new URLVariables();
          
          if(!q.text){
            Alert.show("キーワードを入力して下さい。");
          	return;
          }
          
          uv.q = q.text;//検索文字
          uv.num = "50";//検索結果数
          
          googlesearch.request = uv;
          googlesearch.send();
        }

        //yahoo検索
        public function SearchYahoo():void
        {
          var uv:URLVariables = new URLVariables();
          
          uv.p = q.text;//検索文字
          uv.n = "100";//検索結果数
          
          yahoosearch.request = uv;
          yahoosearch.send();
        }
        
        //googleへの通信成功
        public function GoogleResponce(event:ResultEvent):void
        {
          var str:String = event.result.toString();//レスポンス
          var grid:Array = new Array();
          
          var pattern:RegExp = /<h2\sclass=r><a\shref="((https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)"/g;
          var URLpattern:RegExp = /(https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/;
          
          var hit:RegExp = /<b>([0-9,]+)<\/b>/;
          
          var matchStr:Array = str.match(pattern);//google検索結果からURLを抽出
          
          //Objectを埋める
          for(var i:int=0; i<50; i++){
               var obj:Object = new Object();
               obj.id = "";
               obj.googleurl = "";
               grid[i] = obj;
          }
          
          datagrid.dataProvider = grid;
          
          for(var j:int=0; j<matchStr.length; j++){
            var word:Array;
            
            word = matchStr[j].match(URLpattern);
            if(!word[0].match(/^http:\/\/news.google.co.jp/)){
              datagrid.dataProvider[j].id = j+1;
              datagrid.dataProvider[j].googleurl = word[0];
            }
          }
          
          SearchYahoo();
        }
        
        //yahooへの通信成功
        public function YahooResponce(event:ResultEvent):void
        {
          var str:String = event.result.toString();//レスポンス
          
          var pattern:RegExp = /<em\sclass="yschurl">[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#<>]+<\/em>/g;
          
          var matchStr:Array = str.match(pattern);//yahoo検索結果からURLを抽出
          
          for(var j:int=0; j<50; j++){
            var word:Array;
            var url:String = matchStr[j];
            datagrid.dataProvider[j].yahoourl = url;
          }
        }

        //HTTP通信失敗
        public function Fault(event:FaultEvent):void
        {
          Alert.show(event.fault.faultString, "Error");
        }
		]]> 
    </mx:Script>
    <mx:HTTPService
      id="googlesearch"
      method="GET"
      result="GoogleResponce(event)" 
      fault="Fault(event)"
      url="http://www.google.co.jp/search"
      resultFormat="text" />
      
    <mx:HTTPService
      id="yahoosearch"
      method="GET"
      result="YahooResponce(event)" 
      fault="Fault(event)"
      url="http://search.yahoo.co.jp/search"
      resultFormat="text" />
	
    <mx:ApplicationControlBar x="10" y="10" width="560" height="312" cornerRadius="4">
    </mx:ApplicationControlBar>
    
    <mx:TextInput id="q" 
      x="22" y="37" 
      width="334" height="22" />
    <mx:Button x="364" y="37" 
      label="検索" 
      click="SearchGoogle()" 
      width="74" height="22" />
      
    <mx:DataGrid id="datagrid" width="539" height="229" y="67" x="22">
      <mx:columns>
        <mx:DataGridColumn headerText="順位" dataField="id" width="40"/>
        <mx:DataGridColumn headerText="google検索結果URL" dataField="googleurl" width="130" />
        <mx:DataGridColumn headerText="yahoo検索結果URL" dataField="yahoourl" width="130" />
      </mx:columns>
    </mx:DataGrid>
    
  </mx:WindowedApplication>

宜しくお願いします!


[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

google検索結果を取得し、指定したサイトのトップページに含まれるキーワード数を取得するAIRサンプルです。

google検索結果を取得し、指定したサイトのトップページに含まれるキーワード数を取得するAIRサンプルです。

<?xml version="1.0" encoding="utf-8"?>
  <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
      <![CDATA[ 
        import mx.rpc.events.ResultEvent;
        import mx.rpc.events.FaultEvent;
        import mx.controls.Alert;

        //google検索
        public function GoogleSearch(event:Event):void
        {
          var uv:URLVariables = new URLVariables();

          uv.q = q.text;//検索文字
          uv.num = "50";//検索結果数
          
          googlesearch.url = "http://www.google.co.jp/search"
          googlesearch.request = uv;
          googlesearch.send();
        }

        //サイト検索
        public function SiteSearch(event:Event):void
        {
          var item:Object = datagrid.selectedItem;
          var data:Object = datagrid.dataProvider;
          if (item == null) {
            Alert.show("未選択です。");
            return;
          }

          sitesearch.url = data[item.check - 1].siteurl;
          sitesearch.send();
        }

        //googleへの通信成功
        public function GoogleResponce(event:ResultEvent):void
        {
          var str:String = event.result.toString();//レスポンス
          var grid:Array = new Array();
          
          var pattern:RegExp = /<h2\sclass=r><a\shref="((https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)"/g;
          var URLpattern:RegExp = /(https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/;
              
          var matchStr:Array = str.match(pattern);//google検索結果からURLを抽出
              
          for(var i:int=0; i<matchStr.length; i++){
                var word:Array;
                var data:Object = new Object();
                
            	word = matchStr[i].match(URLpattern);
            	if(!word[0].match(/^http:\/\/news.google.co.jp/)){
            	  data.id = i+1;
                  data.siteurl = word[0];
                  data.check = i+1;
                  grid[i] = data;
            	}
          }
            
          datagrid.dataProvider = grid;
          
        }

        //指定したサイトへの通信成功
        public function SiteResponce(event:ResultEvent):void
        {
          var res:String = event.result.toString();//レスポンス
          var pattern:RegExp = new RegExp(q.text, "g");
          var matchStr:Array = res.match(pattern);
          
          Alert.show('トップページ内にキーワード『' + q.text + '』' + matchStr.length + '個発見!');
        }

        //HTTP通信失敗
        public function Fault(event:FaultEvent):void
        {
          Alert.show(event.fault.faultString, "Error");
        }
		]]> 
    </mx:Script>
    <mx:HTTPService
      id="googlesearch"
      method="GET"
      result="GoogleResponce(event)" 
      fault="Fault(event)"
      resultFormat="text" />
      
    <mx:HTTPService
      id="sitesearch"
      method="GET"
      result="SiteResponce(event)" 
      fault="Fault(event)"
      resultFormat="text" />
	
    <mx:TextInput id="q" 
      x="130" y="32" 
      width="160" height="22" />
    <mx:Button x="130" y="95" 
      label="検索" 
      click="GoogleSearch(event)" 
      width="160" height="22" />
      
    <mx:DataGrid id="datagrid" width="338" height="219">
      <mx:columns>
        <mx:DataGridColumn headerText="順位" dataField="id" width="40"/>
        <mx:DataGridColumn headerText="google検索結果URL" dataField="siteurl" width="130" />
      </mx:columns>
    </mx:DataGrid>
    
    <mx:Button x="130" y="95" 
      label="サイト調査" 
      click="SiteSearch(event)" 
      width="160" height="22" />
    
  </mx:WindowedApplication>


ちなみに、デバッグしてないです。
日本語のキーワード等は不具合出ます。



[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

HTTPServiceのresultプロパティを動的に変更出来ないもんかな…。

HTTPServiceのresultプロパティを動的に変更出来ないもんかな…。

        public function Search(event:Event):void
        {
          var uv:URLVariables = new URLVariables();

          uv.q = q.text;//検索文字
          uv.num = "50";//検索結果数
          
          search.result = "Result(event)";
          search.request = uv;
          search.send();
        }

上記は

search.result = "Result(event)";

でエラーが起こるので注意!



[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/