[Flex] NativeDragManagerの使い方

AIRアプリケーションで
別ウィンドウからドラッグ&ドロップするためには
mx.DragManagerではなくて、NativeDragManagerを使う。

イベントもdragEnter/dragDropではなくてnativeDragEnter/nativeDragDropを使う。

HTMLを受け取る場合はだいたいこんな感じ。

受け側
[as]

[/as]

コントロール
[as]
private function dragEnterHandler(event:NativeDragEvent):void{
var cb:Clipboard = event.clipboard;
if(cb.hasFormat(ClipboardFormats.URL_FORMAT)){
NativeDragManager.acceptDragDrop(imgcontainer);
}
}
private function dragDropHandler(event:NativeDragEvent):void{
var cb:Clipboard = event.clipboard;
var text:String = cb.getData(ClipboardFormats.HTML_FORMAT) as String;
trace(text);
}
[/as]

[Flex] DropDownListにrowCount設定

mxのcomboboxてrowCountでさっくり設定できたけど
SparkのDropDownListはlayoutタグ書かないとダメらしい。

20150628-113337-58620150628-113315-833

参考:
http://stackoverflow.com/questions/2291957/flex-how-to-change-open-dropdownlist-height

上記で一応まあ並ぶんだけど、
例えば文字列並べたときに、labelの幅でしか認識されない、
つまりコンボボックスの右側の文字が無いスペースはカーソル合わせても選択できない
って言うデフォルトとの違いができてしまうので、TileLayoutを使うのが良いのかなーって
とりあえず思ったよ。

20150628-123903-05320150628-124038-572

ちょっと触ってみた感じだと問題無かったから多分これで平気。

[Flex] HTMLを設置してると終了時にブラウザが空白ページを開く問題

AIRアプリケーションで、mx:HTMLまたはWebViewを画面内に配置すると、
なんか時々アプリケーション終了時にブラウザが勝手に空白のページを開いてしまう問題があります。
しばらくの間これの原因が掴めなかったんですが、(再現性も微妙だし)
下記の対策でだいたい防げるっぽい。

それでも発生したような気もするし気のせいかもしれない。
少なくとも発生頻度がぐっと下がって手元で観測できなくなったので対策にはなるっぽい。

概要としては終了時のhandlerにAlertを仕込む。
原因からするとsetFocusでも良いような気がしたんだけど
うまく対策にならない場合があるようだ。

コードはこういう雰囲気。
[as]




[/as]

[Flex] AdvancedDataGridBaseの不具合なのかなー?

Apache Flex SDK 4.12.0
Apache Flex SDK 4.12.1
Apache Flex SDK 4.13.0
で同じ動作をするのだけど、(Flex 4.6.0では発生しない)
AdvancedDataGridで、横スクロールと縦スクロールを同時に表示されてる時に、
デバッガ実行でエラーストップするような状態で、
横スクロールを右端までスクロールしておいてから
適当に縦スクロールをぐりぐりしつつマウスをin/outしてると
AdvancedDataGridBase.asの1785行目のエラーで止まる。

[as]
TypeError: Error #1010: A term is undefined and has no properties.
at mx.controls.advancedDataGridClasses::AdvancedDataGridBase/http://www.adobe.com/2006/flex/mx/internal::mouseEventToItemRendererOrEditor()[/Users/aharui/release4.13.0/frameworks/projects/advancedgrids/src/mx/controls/advancedDataGridClasses/AdvancedDataGridBase.as:1785]
at mx.controls.listClasses::AdvancedListBase/mouseEventToItemRenderer()[/Users/aharui/release4.13.0/frameworks/projects/advancedgrids/src/mx/controls/listClasses/AdvancedListBase.as:4392]
at mx.controls::AdvancedDataGridBaseEx/mouseEventToItemRenderer()[/Users/aharui/release4.13.0/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGridBaseEx.as:2728]
at mx.controls::AdvancedDataGrid/mouseEventToItemRenderer()[/Users/aharui/release4.13.0/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGrid.as:2172]
at mx.controls.listClasses::AdvancedListBase/mouseMoveHandler()[/Users/aharui/release4.13.0/frameworks/projects/advancedgrids/src/mx/controls/listClasses/AdvancedListBase.as:9382]
[/as]

ソースを見てみるとこんな感じで
mouseEventToItemRendererOrEditorに問題があるっぽい。
20141207-115032-374
エラーで止まった時の状態
20141207-115944-039

これなー。
例えばvisibleColumns[0]がlistItems[i][4]と同じとかそういう感じになるから
visibleColumns[j]は明らかに問題あると思うんだけど
visibleのオプションは結構変更するから横スクロール以外でも起きると思うし
具体的にどう直すかと言われるとうーん。。。って感じで。
SDK修正してもぼくSDKのコンパイルとかしたことないし怖いわ:;(∩´﹏`∩);:

さらに言えばデバッガ実行でない普通の実行なら普通にエラー発生→スルーで
アプリケーションは問題なく動作するみたいなんだよね。
ならもう、なんかいいかなーって。デバッグの時たまに止まって邪魔だけど。

考えるのをやめた。

[Flex] デバッガ実行かどうかを取得する

冬休みになりました。
休日と言えばプログラムばかりです。(ぼっち感)

実際、プログラミングしてる時間は休日の方が長かったりするんだよなあ。
会社ではあまり働いていないので。(社内ニート感)

さて、プログラムを作っていると
「あー、デバッグ実行の時だけこの処理省略したいな」
とか思う事は多いです。
特に広告表示やネットワークアクセスの処理とかですが。

そんな時は isDebug とか isDebugger 的なBoolean値が欲しくなります。
as3ではこんな感じのコードで実現すればいいようです。割と簡単。

[as]
import flash.system.Capabilities;

public function isDebugger():Boolean{
return Capabilities.isDebugger;
}
[/as]

ここまでシンプルだとデバッガかどうかで処理分けるところに直接書きたくなりますが
一応importもある事だし、共通で利用するモデル系のクラスに定義した方が良さげです。

Capabilitiesクラスは他にもクライアントの能力を確認するのに使えるようです。
使ったことなかったけど、結構使えるクラス?
リファレンス

[Flex] SparkのTitleWindowでshowCloseButton

Flex3までのmxではTitleWindowクラスにshowCloseButtonってプロパティがあって、
それをfalseにすると閉じるボタンを非表示にできたんですが、
なぜかFlex4のSparkのTitleWindowにはこのプロパティがありません。
TitleWindowCloseButtonSkinでやれってことなんでしょうが、
正直Skinはよくわかりません。
“[Flex] SparkのTitleWindowでshowCloseButton” の続きを読む