試作AIRアプリ「ぶっくまーかー」
本の管理ができるAIRアプリ「ぶっくまーかー」です。
AIRプログラムの勉強がてらの試作品です。
インストールはこちらから
って、ほとんど機能ないですが、試作アプリでSQLiteを使っていますので、プログラムの参考になればうれしいです。
インストールしたら右クリックでソース表示できます。
以下の機能があります。
- 本の検索(ISBN,キーワード)
- 本の追加と削除
これだけ\(゜ロ\)(/ロ゜)/
以下はAIRとPHPのソースです。
PHPのソースコード
XML/Serializerが必要なのでpearでインストールします。
# pear install http://download.pear.php.net/package/XML_Serializer-0.18.0.tgz
アマゾンとの連携をします。おもな機能として、
- ISBNからアイテム検索
- ワードからアイテムリスト検索
- ASIN(アマゾンの固有アイテムID)からアイテムを検索
<?php require_once 'inc.php'; require_once 'XML/Unserializer.php'; require_once 'XML/Serializer.php'; if( $_GET['type'] == "isbn" ){ //ISBNから検索 $_GET['isbn'] = $_GET['isbn'] ? $_GET['isbn'] : "9784088596662"; $_GET['SearchIndex'] = $_GET['SearchIndex'] ? $_GET['SearchIndex'] : "Books"; $isbn = str_replace( "-" , "" , trim( $_GET['isbn'] ) ); $request = array( "Service" => "AWSECommerceService", "AWSAccessKeyId" => $APIKEY, "Operation" => "ItemLookup", "IdType" => "ISBN", "ItemId" => $isbn, "SearchIndex" => $_GET['SearchIndex'], "ResponseGroup" => "Large", "Version" => "2008-03-03", ); $url = "http://webservices.amazon.co.jp/onca/xml" . request2url( $request ); $Unserializer =& new XML_Unserializer( array('parseAttributes' => true, 'targetEncoding' => 'utf-8' ) ); $file = file_get_contents( $url ); $status = $Unserializer->unserialize( $file ); if (PEAR::isError($status)) { die($status->getMessage()); } $xmlArr = $Unserializer->getUnserializedData(); $item = h( $xmlArr["Items"]["Item"] ); if( is_array( $item["ItemAttributes"]['Author'] ) ){ $author = $item["ItemAttributes"]['Author'][0]; }else{ $author = $item["ItemAttributes"]['Author']; } if( $item["ASIN"] == "" ){ exit; } $xml = <<<EOD <result> <item> <asin>{$item["ASIN"]}</asin> <isbn13>{$item["ItemAttributes"]['EAN']}</isbn13> <url>{$item['DetailPageURL']}</url> <title>{$item["ItemAttributes"]['Title']}</title> <image>{$item['LargeImage']['URL']}</image> <author>{$author}</author> <category>{$item["ItemAttributes"]['Binding']}</category> <mode>{$item["ItemAttributes"]['ProductGroup']}</mode> </item> </result> EOD; header ("Content-Type: text/xml; charset=UTF-8"); echo $xml; exit; }elseif( $_GET['type'] == "asin" ){ //ASINから検索 $asin = $_GET['asin'] ? $_GET['asin'] : "4873113652"; $request = array( "Service" => "AWSECommerceService", "AWSAccessKeyId" => $APIKEY, "Operation" => "ItemLookup", "IdType" => "ASIN", "ItemId" => $asin, "ResponseGroup" => "Large", "Version" => "2008-03-03", ); $url = "http://webservices.amazon.co.jp/onca/xml" . request2url( $request ); $Unserializer =& new XML_Unserializer( array('parseAttributes' => true, 'targetEncoding' => 'utf-8' ) ); $file = file_get_contents( $url ); $status = $Unserializer->unserialize( $file ); if (PEAR::isError($status)) { die($status->getMessage()); } $xmlArr = $Unserializer->getUnserializedData(); $item = h( $xmlArr["Items"]["Item"] ); if( is_array( $item["ItemAttributes"]['Author'] ) ){ $author = $item["ItemAttributes"]['Author'][0]; }else{ $author = $item["ItemAttributes"]['Author']; } if( $item["ASIN"] == "" ){ exit; } $xml = <<<EOD <result> <item> <asin>{$item["ASIN"]}</asin> <isbn13>{$item["ItemAttributes"]['EAN']}</isbn13> <url>{$item['DetailPageURL']}</url> <title>{$item["ItemAttributes"]['Title']}</title> <image>{$item['LargeImage']['URL']}</image> <author>{$author}</author> <category>{$item["ItemAttributes"]['Binding']}</category> <mode>{$item["ItemAttributes"]['ProductGroup']}</mode> </item> </result> EOD; header ("Content-Type: text/xml; charset=UTF-8"); echo $xml; exit; }elseif( $_GET['type'] == "word" ){ $word = $_GET['word'] ? $_GET['word'] : "php"; $request = array( "Service" => "AWSECommerceService", "AWSAccessKeyId" => $APIKEY, "Version" => "2007-01-15", "Operation" => "ItemSearch", "SearchIndex" => "Books", "Keywords" => $word, "ResponseGroup" => "Medium" ); $url = "http://webservices.amazon.co.jp/onca/xml" . request2url( $request ); $Unserializer =& new XML_Unserializer( array('parseAttributes' => true, 'targetEncoding' => 'utf-8' ) ); $file = file_get_contents( $url ); $status = $Unserializer->unserialize( $file ); if (PEAR::isError($status)) { die($status->getMessage()); } $xmlArr = $Unserializer->getUnserializedData(); $items = h( $xmlArr["Items"]["Item"] ); $xml = <<<EOD <result> EOD; foreach( $items as $key => $item ){ if( is_array( $item["ItemAttributes"]['Author'] ) ){ $author = $item["ItemAttributes"]['Author'][0]; }else{ $author = $item["ItemAttributes"]['Author']; } if( $item["ASIN"] == "" ){ exit; } $xml .= <<<EOD <item> <asin>{$item["ASIN"]}</asin> <isbn13>{$item["ItemAttributes"]['EAN']}</isbn13> <url>{$item['DetailPageURL']}</url> <title>{$item["ItemAttributes"]['Title']}</title> <image>{$item['LargeImage']['URL']}</image> <author>{$author}</author> <category>{$item["ItemAttributes"]['Binding']}</category> <mode>{$item["ItemAttributes"]['ProductGroup']}</mode> </item> EOD; } $xml .= <<<EOD </result> EOD; header ("Content-Type: text/xml; charset=UTF-8"); echo $xml; exit; } ?>
inc.php
<?php function d() { echo '<pre style="background:#fff;color:#333;border:1px solid #ccc;margin:2px;padding:4px;font-family:monospace;font-size:12px">'; foreach (func_get_args() as $v) var_dump($v); echo '</pre>'; } function h($str){ if(is_array($str)){ return array_map( "h",$str ); }else{ return htmlspecialchars($str,ENT_QUOTES); } } function e($str){ if(is_array($str)){ return array_map( "e",$str ); }else{ return mysql_real_escap_string($str); } } function m($str){ if(is_array($str)){ return array_map( "m",$str ); }else{ return mb_convert_encoding($str,"SJIS","UTF-8"); } } function request2url( $array ){ $url = "?"; foreach( $array as $key => $val ){ $url .= "{$key}={$val}&"; } return $url; } $APIKEY = "取得してね"; ?>
AIR
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" verticalScrollPolicy="off" horizontalScrollPolicy="off" backgroundAlpha="0" showStatusBar="false" showTitleBar="false" showGripper="false" borderStyle="solid" borderThickness="0" creationComplete="init()" width="466" height="596" viewSourceURL="srcview/index.html"> <mx:Script> <![CDATA[ import mx.effects.easing.*; import mx.events.ValidationResultEvent; import mx.controls.RadioButton; import mx.events.DropdownEvent; import mx.events.DragEvent; import mx.collections.ArrayCollection; import mx.effects.easing.*; import mx.managers.CursorManager; import mx.utils.StringUtil; import mx.controls.Alert; private var conn:SQLConnection; private var stmt:SQLStatement; private var mode:String = "Books"; [Bindable] private var database:ArrayCollection = new ArrayCollection(); import flash.system.Capabilities; //初期化関数 private function init():void{ //シェアードオブジェクトゲット var so:SharedObject = SharedObject.getLocal("bookmarker"); //画面解像度からはみ出してない? if( so.data.appX < Capabilities.screenResolutionX && so.data.appY < Capabilities.screenResolutionY ){ this.nativeWindow.x = so.data.appX; this.nativeWindow.y = so.data.appY; }else{ //はみ出しているので初期値 this.nativeWindow.x = 100; this.nativeWindow.y = 100; so.clear(); } setDB(); } /******************************* DB初期設定 ********************************/ //データベースコネクト private function setDB():void{ var dbfile:File = File.desktopDirectory; dbfile = dbfile.resolvePath("amazon.db"); conn = new SQLConnection(); conn.open(dbfile); //DBテーブル初期作成 createDB(); } //データベース作成 private function createDB():void{ stmt = new SQLStatement(); stmt.sqlConnection = conn; //基本テーダーをDB stmt.text = " CREATE TABLE IF NOT EXISTS amazonData ( " + " id INTEGER PRIMARY KEY , " + " asin TEXT UNIQUE , " + " isbn13 TEXT , " + " title TEXT , " + " image TEXT , " + " url TEXT , " + " adddate DATETIME DEFAULT current_date , " + " moddate DATETIME DEFAULT current_date , " + " category TEXT , " + " mode TEXT , " + " print INTEGER ) ; "; stmt.addEventListener(SQLEvent.RESULT , function():void{ }); stmt.execute(); } /******************************* 本データ表示・追加・削除 ********************************/ //本データ表示 private function getData():void{ stmt = new SQLStatement(); stmt.sqlConnection = conn; stmt.text = " SELECT *, strftime('%Y-%m-%d', adddate) as adddate FROM amazonData WHERE print = 1 ORDER BY id DESC "; stmt.addEventListener(SQLEvent.RESULT , function():void{ dg.dataProvider = stmt.getResult().data; dgShow.play(); }); try{ stmt.execute(); }catch(e:SQLError){ } //isbnText.setFocus(); } //本データーの追加 private function addData(e:DragEvent):void{ var item:Object = e.dragSource.dataForFormat("items" ); var xml:XML = new XML( item ); if( xml.title != "" ){ stmt = new SQLStatement(); stmt.sqlConnection = conn; //文字のエスケープ var title:String = xml.title.replace( "'" , "''" ); stmt.text = " INSERT INTO amazonData ( image ,isbn13 , asin , title , url , category , mode , print )VALUES( '" + xml.image + "' , '"+ xml.isbn13 + "' , '"+ xml.asin + "' , '"+ title + "' , '"+ xml.url + "' , '"+ xml.category + "' , '"+ xml.mode + "' , '1')"; stmt.addEventListener(SQLEvent.RESULT , function():void{ } ); try{ stmt.execute(); }catch(e:SQLError){ } } } /******************************* Amazonへ問い合わせ ********************************/ //ISBN番号からアマゾン情報を取得 private function getAmazonData():void{ if( isbnText.text != "" ){ amazonS.send({ "isbn":isbnText.text, "SearchIndex":mode }); myLoader.visible = true; tl.visible = false; }else{ Alert.show("ちゃんと記入してね!","エラーだよ!"); } } //ISBN番号からアマゾン情報を取得 private function getAmazonDataWord():void{ if( wordText.text != "" ){ amazonS2.send({ "word":wordText.text }); myLoader.visible = true; dgWord.visible = false; tl2.visible = false; }else{ Alert.show("ちゃんと記入してね!","エラーだよ!"); } } //ASIN番号からアマゾン情報を取得 private function getAmazonDataByAsin():void{ if( dgWord.selectedItem.asin != "" ){ amazonS3.send({ "asin":dgWord.selectedItem.asin }); myLoader.visible = true; tl2.visible = false; }else{ Alert.show(""); } } /******************************* Amazonへ問い合わせ完了イベント ********************************/ //問い合わせ完了イベント private function amazonFinish():void{ myLoader.visible = false; isbnText.text = ''; tl.visible = true; } //問い合わせ完了イベント private function amazonFinish2():void{ myLoader.visible = false; wordText.text = ''; dgWord.visible = true; } //問い合わせ完了イベント private function amazonFinish3():void{ myLoader.visible = false; tl2.visible = true; } //Faultイベント private function onFault():void{ } //本データの削除 private function deleteData():void{ stmt = new SQLStatement(); stmt.sqlConnection = conn; stmt.text = " DELETE FROM amazonData WHERE isbn13 = '"+ dg.selectedItem.isbn13 +"' "; stmt.addEventListener(SQLEvent.RESULT , function():void{ getData(); } ); try{ stmt.execute(); }catch(e:SQLError){ } } /******************************* ISBNナンバー監視 ********************************/ private function isbnChange():void{ isbnText.text = StringUtil.trim( isbnText.text ).replace('-',''); if( isbnText.text!= '' && isbnText.length == 13){ getAmazonData(); } } /******************************* バリデーターイベント ********************************/ private function handleValid(eventObj:ValidationResultEvent):void { if(eventObj.type==ValidationResultEvent.VALID){ // Enable Submit button. }else{ } } /******************************* その他 ********************************/ //ラジオボタンの選択 private function setCategory(e:Event):void{ var rb:RadioButton = e.currentTarget as RadioButton; mode = "" + rb.value; isbnText.setFocus(); } //タブナビゲーションチェンジ private function tnChange():void{ if( tn.selectedIndex == 2 ){ getData(); } } private function closeHandler():void{ //現在のウィンドウ情報を保存しとく var so:SharedObject = SharedObject.getLocal("bookmarker"); so.data.appX = this.nativeWindow.x; so.data.appY = this.nativeWindow.y; so.flush(); this.nativeWindow.close(); } ]]> </mx:Script> <mx:Style> Alert { titleStyleName: "alertTitle"; messageStyleName: "alertMessage"; buttonStyleName: "alertButton"; dropShadowEnabled: true; shadowDistance: 0; shadowColor:#ff0000; shadowDirection: right; cornerRadius: 10; embedFonts: true; borderColor: #cc66ff; backgroundAlpha: 0.55; } .alertTitle { letterSpacing: 0; fontSize: 14; color: #ffffff; } .alertMessage { letterSpacing: 0; fontSize: 20; fontWeight: normal; color: black; backgroundColor:#ffffff; } .alertButton { backgroundColor:#ffccff; letterSpacing: 0; fontSize: 16; cornerRadius: 10; fontWeight: normal; textRollOverColor: white; color: red; } WindowedApplication{ color:#5800a2; } DataGrid { backgroundAlpha: 0.55; alternatingItemColors: #ffffff, #ffccff; headerColors: #cc99ff, #ffffff; horizontalGridLines: true; letterSpacing: 0; horizontalGridLineColor: #ff66ff; verticalGridLineColor: #ffffff; useRollOver: false; borderThickness: 3; borderColor: #cc99ff; selectionColor: #ff99ff; } Button { cornerRadius: 7; highlightAlphas: 0.9, 0.63; fillAlphas: 0.81, 0.82, 0.75, 0.65; fillColors: #ffffff, #fd38f4, #ffffff, #9966ff; color: #990066; borderColor: #cc66ff; themeColor: #9966ff; } TextInput{ backgroundAlpha:0.8; borderStyle: solid; borderThickness:2; borderColor:#FF4FF9; cornerRadius: 15; } .noBorder{ } TileList{ selectionColor: #ff99ff; useRollOver: false; alternatingItemColors: #ffffff, #ffccff; backgroundAlpha:0.2; borderStyle: solid; borderThickness:2; borderColor:#FF4FF9; cornerRadius: 15; } Canvas{ backgroundAlpha:0; } TabNavigator { horizontalAlign: center; tabWidth: 105; tabHeight: 22; cornerRadius: 8; textIndent: 0; backgroundAlpha: 1; backgroundColor: #ffffff; borderColor: #cc33ff; borderThickness: 2; tabStyleName: "myTabs"; firstTabStyleName: "myTabs"; lastTabStyleName: "myTabs"; selectedTabTextStyleName: "mySelectedTabs"; } .myTabs { cornerRadius: 6; highlightAlphas: 0.62, 0.42; fillAlphas: 1, 1; fillColors: #ffffff, #f190ff; backgroundAlpha: 0.78; backgroundColor: #ffffff; color: #cc3399; fontSize: 13; } .mySelectedTabs { } .noBorder{ borderStyle: solid; borderThickness:0; } .myCanvas{ backgroundAlpha:1; borderStyle: solid; borderThickness:2; borderColor:#FF4FF9; backgroundColor: #ffccff; cornerRadius: 7; shadowDistance: 1; } .myCanvas2{ backgroundImage:"bg2.jpg"; backgroundAlpha:0.3; } </mx:Style> <!--############## HTTPサービス #############--> <mx:HTTPService id="amazonS" url="http://moeten.info/flex/20080308_amazonBook/index2.php?type=isbn" useProxy="false" resultFormat="e4x" showBusyCursor="true" method="GET" result="amazonFinish()" fault="onFault()"/> <mx:HTTPService id="amazonS2" url="http://moeten.info/flex/20080308_amazonBook/index2.php?type=word" useProxy="false" resultFormat="e4x" showBusyCursor="true" method="GET" result="amazonFinish2()" fault="onFault()"/> <mx:HTTPService id="amazonS3" url="http://moeten.info/flex/20080308_amazonBook/index2.php?type=asin" useProxy="false" resultFormat="e4x" showBusyCursor="true" method="GET" result="amazonFinish3()" fault="onFault()"/> <!--############## エラーチェック #############--> <mx:StringValidator source="{wordText}" property="text" tooShortError="バーコードリーダーで入力してください。例)4873113652" tooLongError="バーコードリーダーで入力してください。例)4873113652" minLength="1" trigger="{myButtonWord}" triggerEvent="click" valid="handleValid(event)" invalid="handleValid(event)"/> <mx:StringValidator source="{isbnText}" property="text" tooShortError="バーコードリーダーで入力してください。例)9784873113654" tooLongError="バーコードリーダーで入力してください。例)9784873113654" minLength="13" maxLength="13" trigger="{myButtonIsbn}" triggerEvent="click" valid="handleValid(event)" invalid="handleValid(event)"/> <!--############## エフェクト #############--> <mx:Sequence id="dgShow" target="{dg}"> <mx:Zoom zoomHeightFrom="0.8" zoomHeightTo="1" zoomWidthFrom="0.8" zoomWidthTo="1" easingFunction="Back.easeOut"/> </mx:Sequence> <mx:WipeRight id="loadShow"/> <mx:Sequence id="tlShow"> <mx:Move yFrom="-100" yTo="70" easingFunction="Back.easeOut"/> <mx:Glow color="0xffccff" /> </mx:Sequence> <mx:Sequence id="tlHide"> <mx:Move yFrom="70" yTo="-100" easingFunction="Back.easeIn"/> </mx:Sequence> <mx:Sequence id="tl2Show"> <mx:Move yFrom="-100" yTo="211" easingFunction="Back.easeOut"/> <mx:Glow color="0xffccff" /> </mx:Sequence> <mx:Sequence id="tl2Hide"> <mx:Move yFrom="211" yTo="-100" easingFunction="Back.easeIn"/> </mx:Sequence> <mx:Sequence id="dgWordShow"> <mx:Move yFrom="-100" yTo="38" easingFunction="Back.easeOut"/> <mx:Glow color="0xffccff" /> </mx:Sequence> <mx:Sequence id="dgWordHide"> <mx:Move yFrom="38" yTo="-100" easingFunction="Back.easeIn"/> </mx:Sequence> <mx:Sequence id="bookAddShow"> <mx:Zoom zoomHeightFrom="0.5" zoomHeightTo="1" zoomWidthFrom="0.5" zoomWidthTo="1" easingFunction="Back.easeOut"/> </mx:Sequence> <mx:Sequence id="bookAddHide"> <mx:Zoom zoomHeightFrom="1" zoomHeightTo="0.5" zoomWidthFrom="1" zoomWidthTo="0.5" easingFunction="Back.easeIn"/> </mx:Sequence> <!--############## フィルタ #############--> <mx:DropShadowFilter id="dsf" blurX="4" blurY="4" distance="0" color="0x333333" /> <!--############## コンポーネント #############--> <mx:Canvas width="424" height="568" styleName="myCanvas" filters="{[dsf]}" horizontalScrollPolicy="off" verticalScrollPolicy="off" x="20" y="10"> <mx:Image x="-13" y="3" source="title.jpg" mouseDown="this.nativeWindow.startMove()"/> <mx:TabNavigator id="tn" width="416" height="494" x="2" y="66" change="tnChange()" > <!-- ISBNから検索+本を追加 --> <mx:Canvas label="ISBN" width="100%" height="100%" styleName="myCanvas2" verticalScrollPolicy="off" > <mx:HBox x="48" y="10"> <mx:Label text="ISBN13" x="10" y="12"/> <mx:TextInput width="163" id="isbnText" change="isbnChange()" x="63" y="10"/> <mx:Button id="myButtonIsbn" label="ISBNから本を検索" click="getAmazonData()" x="245" y="10"/> </mx:HBox> <mx:HBox x="48" y="40" horizontalAlign="center"> <mx:RadioButton label="和籍" value="Books" click="setCategory(event)" groupName="category" selected="true"/> <mx:RadioButton label="洋書" value="ForeignBooks" click="setCategory(event)" groupName="category"/> <mx:RadioButton label="DVD" value="DVD" click="setCategory(event)" groupName="category"/> <mx:RadioButton label="CD" value="Music" click="setCategory(event)" groupName="category"/> </mx:HBox> <mx:TileList id="tl" showEffect="tlShow" hideEffect="tlHide" visible="false" dataProvider="{amazonS.lastResult.item}" height="304" width="396" rowCount="1" dragComplete="{tl.visible=false}" columnCount="1" dragEnabled="true" dragMoveEnabled="true" x="6" y="70"> <mx:itemRenderer> <mx:Component> <mx:VBox width="290" height="290" verticalAlign="middle" horizontalAlign="center" horizontalScrollPolicy="off" verticalScrollPolicy="off"> <mx:Text text="{data.title}" width="280" textAlign="left" /> <mx:Image source="{data.image}" width="200" height="200"/> <mx:Text text="{data.author}" width="280" textAlign="left" /> <!-- <mx:Text text="{data.asin}" width="280" textAlign="left" visible="false" /> <mx:Text text="{data.isbn13}" width="280" textAlign="left" visible="false" /> <mx:Text text="{data.url}" width="280" textAlign="left" visible="false" /> <mx:Text text="{data.image}" width="280" textAlign="left" visible="false" /> <mx:Text text="{data.category}" width="280" textAlign="left" visible="false" /> <mx:Text text="{data.mode}" width="280" textAlign="left" visible="false" /> --> </mx:VBox> </mx:Component> </mx:itemRenderer> </mx:TileList> <mx:DataGrid height="67" rowHeight="80" dragEnabled="true" dragMoveEnabled="true" dropEnabled="true" dragDrop="addData(event)" selectable="false" backgroundAlpha="0.5" visible="{tl.visible}" showEffect="bookAddShow" hideEffect="bookAddHide" width="90" x="315" y="382" backgroundImage="@Embed(source='bgBook.png')"> <mx:columns> <mx:DataGridColumn headerText="本追加" dataField="id" visible="false"/> </mx:columns> </mx:DataGrid> </mx:Canvas> <!-- キーワードから検索+本を追加 --> <mx:Canvas label="キーワード" width="100%" height="100%" styleName="myCanvas2" verticalScrollPolicy="off" > <mx:DataGrid dataProvider="{amazonS2.lastResult.item}" itemClick="getAmazonDataByAsin()" x="10" y="38" width="395" height="165" id="dgWord" showEffect="dgWordShow" hideEffect="dgWordHide" visible="false"> <mx:columns> <mx:DataGridColumn headerText="列 1" dataField="title"/> <mx:DataGridColumn headerText="列 2" dataField="asin"/> <mx:DataGridColumn headerText="列 2" dataField="isbn13"/> </mx:columns> </mx:DataGrid> <mx:TileList id="tl2" showEffect="tl2Show" hideEffect="tl2Hide" dragComplete="{tl2.visible=false;}" x="10" y="211" width="395" height="163" dataProvider="{amazonS3.lastResult.item}" rowCount="1" columnCount="1" dragEnabled="true" dragMoveEnabled="true" visible="false"> <mx:itemRenderer> <mx:Component> <mx:HBox verticalAlign="middle" horizontalScrollPolicy="off" verticalScrollPolicy="off"> <mx:Image source="{data.image}" width="100" height="150"/> <mx:VBox> <mx:Text text="{data.title}" width="280" textAlign="left" /> <mx:Text text="{data.author}" width="280" textAlign="left" /> </mx:VBox> </mx:HBox> </mx:Component> </mx:itemRenderer> </mx:TileList> <mx:DataGrid height="67" rowHeight="80" dragEnabled="true" dragMoveEnabled="true" dropEnabled="true" dragDrop="addData(event)" selectable="false" backgroundAlpha="0.5" visible="{tl2.visible}" showEffect="bookAddShow" hideEffect="bookAddHide" width="90" x="315" y="382" backgroundImage="@Embed(source='bgBook.png')"> <mx:columns> <mx:DataGridColumn headerText="本追加" dataField="id" visible="false"/> </mx:columns> </mx:DataGrid> <mx:Button id="myButtonWord" label="キーワードから本を検索" click="getAmazonDataWord()" x="247" y="10"/> <mx:TextInput width="127" id="wordText" text="ハルヒ" x="112" y="10"/> <mx:Label x="53" y="12" text="キーワード"/> </mx:Canvas> <!-- 書庫リスト --> <mx:Canvas label="書籍リスト" width="100%" height="100%" styleName="myCanvas2" horizontalScrollPolicy="off" verticalScrollPolicy="off" > <mx:TileList id="dg" height="353" rowHeight="45" dragEnabled="true" dragMoveEnabled="true" dragDrop="addData(event)" backgroundAlpha="0.5" columnCount="1" y="38" x="7" width="398"> <mx:itemRenderer> <mx:Component> <mx:HBox verticalScrollPolicy="off" horizontalScrollPolicy="off" width="100%" verticalAlign="top" horizontalAlign="left" buttonMode="true"> <mx:Image source="{data.image}" width="30" height="40"/> <mx:Text text="{data.title}" width="300" textAlign="left" fontSize="14" leading="0"/> </mx:HBox> </mx:Component> </mx:itemRenderer> </mx:TileList> <mx:DataGrid id="trushdg" width="50" height="50" styleName="noBorder" dropEnabled="true" backgroundImage="trush.jpg" dragDrop="deleteData()" x="352" y="399"> <mx:columns> <mx:DataGridColumn headerText="ゴミ箱" dataField="id" visible="false"/> </mx:columns> </mx:DataGrid> <mx:Label x="42" y="12" text="ここまだ⇒検索"/> <mx:TextInput x="119" y="10"/> <mx:Button x="287" y="10" label="絞り込み"/> </mx:Canvas> </mx:TabNavigator> <mx:Image x="391" y="8" source="btnClose.png" click="{closeHandler()}" buttonMode="true"/> <mx:ProgressBar visible="false" width="424" indeterminate="true" id="myLoader" label=" " showEffect="loadShow" hideEffect="loadShow" themeColor="#EE31FF" height="8" x="-4" y="0"/> </mx:Canvas> </mx:WindowedApplication>