7月 23

postfixでauへメールを返信する場合に、ハイフンが先頭にあるアドレスに対しては 「invalid recipient syntax」のエラーが発生して送れません。

今まではあんまり特殊アドレスに送信することがなかったけど、どうしても送信しなければならなくなってしまったので、postfixの設定を変更することに。

変更は簡単でmain.cfに下記の1行を追加するだけ

allow_min_user = yes

PC専用のシステムから携帯への対応がある場合にはこの問題がでてくるので覚書。

7月 15

特定の文字のみしか使わないフォントをアンチエイリアスで表示させたいしフォントも切り替えたいとかでたので調べてみた。
ApplicationDomainを使う方法とかいろいろあったが、ASで普通に記述するのであれば外部埋め込みFontファイルを作成するときに全部やってしまうのが楽だったのでそれを採用してみた。

Actionscript:
  1. package
  2. {
  3.     import flash.display.Sprite;
  4.     import flash.text.Font;
  5.  
  6.     public class exfont extends Sprite
  7.     {
  8.         [Embed(source='./font1.TTF',fontName='font1')]
  9.         private var font:Class;
  10.        
  11.         public function exfont():void {
  12.             Font.registerFont( font );
  13.         }
  14.     }
  15. }

上記のようにしておくことで自動的にフォントリストに登録される。
但し、読み込む側が既に埋め込みフォントを使用していると登録されない。

特定文字にしたい場合はEmbedに
unicodeRange = 'Unicodeの範囲'
を指定する。複数の場合は , で、範囲の場合は - で区切る。
基本的な部分でいくと
記号 U+0020~
数字 U+0030-U+0039
英大 U+0041-U+005A
英小 U+0061-U+007A
とかを定義すればよい。日本語の範囲指定も可能。

追記:
フォントによってはコンパイルできない場合があるのでその時はEmbedに
mimeType='application/x-font'
を追加するとコンパイルできるようになります。

7月 09

TextFieldにFilterを設定するとIMEの変換中文字の位置が、TextFiledの親のオブジェクト位置を基本とした場所に表示されてしまう。
この場合はしかたがないので、TextFieldをaddChildする時に間にSprite等をかませて、そのSprite側でFilterを設定しなければならない。

8月 26

使っている割に、よく忘れてるのでメモ

dataProvider.removeItemAt(selectedIndex);

8月 06

TextAreaに値を入れて最下段に自動的にスクロールさせて表示するには

Actionscript:
  1. textArea.verticalScrollPosition = textArea.maxVerticalScrollPosition;

とすればいいのですが、textプロパティへの追加とこのスクロール処理をイベントの中で行うとmaxVerticalScrollPositionに正しい値が入っておらず、思ったような結果が得られない場合がある。

その場合は下記のように記述することで回避できる。

Actionscript:
  1. //何かのイベントハンドラ内
  2. {
  3.     textArea.text += "abcdefg";
  4.     callLater(setScroll);
  5. }
  6.  
  7. private function setScroll():void
  8. {
  9.     textArea.verticalScrollPosition = textArea.maxVerticalScrollPosition;
  10. }

7月 17

なるべく使わないように考えていても、使う時が来てしまう。

定義は Applicationがあるソース内のScriptでpublicの変数を定義するだけ。

Actionscript:
  1. <mx :Script>
  2.     <![CDATA[
  3.        
  4.         public var userName:String = "Levin";
  5.     ]]>
  6. </mx>

あくまで MXML形式という人(私など)は

Actionscript:
  1. <mx :String id="userName">Levin</mx>

とかでも同じです。

アクセスするのは Application.applicationの後ろに定義している変数名にすればOK。

Actionscript:
  1. <mx :Script>
  2.     <![CDATA[
  3.        
  4.         var nm:String = Application.application.userName;
  5.     ]]>
  6. </mx>

7月 16

Flex User Groupでもトピックスがあがっていますが、日本語版のAS3 リファレンスから mx ライブラリ関係のドキュメントがごっそり表示されなくなっています。

ここ最近PHPばっかりの仕事だったのでFlexを見てなくて、いざ作業に入ろうかと思えば、これですか・・・

今回の作業は Flex2側のドキュメントさえあればなんとかなるし、あとは貧弱な記憶力でどうにか思い出せるか。

復旧したらローカルに全部取り込むか。

--追加--
どうやら左上のインデックスが死んでいるだけのようですね。
http://livedocs.adobe.com/flex/3_jp/langref/mx/controls/package-detail.html
のようにパッケージの一覧以下の情報は存在しているようです。
http://livedocs.adobe.com/flex/3_jp/ 以下のURLを
mx/[パッケージ名]/[コントロール名].html にすれば閲覧可能。
パッケージ内一覧は
mx/[パッケージ名]/package-detail.html

必要な部分だけ、簡易リンクを作って乗り切るか。

6月 28

こんな感じでまとまっているページを探していたのだよ。

http://www.loscavio.com/downloads/blog/flex3_css_list/flex3_css_list.htm

GUI式ならこちら
Flex Style Explorer

6月 21

いろいろ検索してたら見つけた。
http://d.hatena.ne.jp/kkanda/20080511

やはり . を使ったメンバアクセスが一番早いのね。次が配列。
で遅いのは連想配列。(まぁあたりまえ)

気になったのはObjectとXMLとの速度がどれぐらい違うのかなと。

調べたら・・・
データセットで5倍、呼び出しで10倍ぐらいXMLが遅いです。
10万回ループ
Array:set 17ms get 14ms
XML:set 178ms get 500ms
Object:set 37ms get 30ms

ループ処理なんかで1秒以下の世界での処理時間を気にする場合は

Array(添え字) < Array(連想配列) = Object <<<<<< XML

ってことですね。

でも業務アプリとかメンテナンスを考えるとXMLのほうが扱いやすいし、そこまでスピード要求するものも多くはないので、気にしすぎてコードが意味不明になっては意味がない。

処理スピードに不満が出た時などの参考までに。

6月 21

動的にいろいろするプログラムをやってると、プロパティやら型のチェックが増えてくる。
だから次のような命令が必要になるんだが、ActionScript3から実装なんですね。
案外、忘れる時があるからメモメモ。

■プロパティの存在を確認 (in)
プロパティ名 in オブジェクト
で存在すればtrue、なければfalseが返ってきます。
Object配列とかで使うのが一般的かと考えていたけど、良く考えればプロパティ存在チェックが一番よく使うと気づいた。

Actionscript:
  1. var obj:TextInput = new TextInput();
  2. trace("text" in obj);
  3. //true
  4. trace("title" in obj);
  5. //false

■型(Class)の存在を確認(is , instanceof)
オブジェクト is Class名
で存在すればtrue、なければfalseが返ってきます。
継承されているものも判別可。
継承を含まない場合は
オブジェクト instanceof Class名
と記述。

Actionscript:
  1. var obj:Sprite = new Sprite();
  2. trace(obj is Sprite);             
  3. //true
  4. trace(obj is DisplayObject);
  5. //true
  6. trace(obj instanceof DisplayObject);
  7. //false

■キャスト(as)
String( a ) と a as Stringの違い・・・知らんかった。
as だとキャスト時に型が一致せず変換できない場合等に、例外を発生させずデフォルト値が設定されます。

確かにこれなら try ... catchしなくてもいい場面があるか。

案外、基礎はおいてけぼりのところがたまにあるな・・・