ふと,いわゆるWidgetというやつを作ってみようかなと思いたちました.
とはいってもうちのWindowsはVistaではないものですから,他のWidget Engineを使わざるをえません.
まあ,とりあえず妥当なのはYahoo Widgetsかなと思って入れてみました.
大体こんな雰囲気ですけれども.
天気予報はコレです. なかなかきれいでおすすめ.アイコンもMacのより凝ってるかも.
で,ボクの目的はWidgetを作ることだったので,ためしに作り始めてみました.
したら,このEngineが出鱈目なんですよ.
以下,その愚痴が続きます.
まず,WidgetにはメインのWindowオブジェクトがあり,その下にフレームを配置していくという設計になっています.こんな感じ.
コントロールはFrameとTextareaとImageだけみたい.
まあ,それはいい.
で,Windowオブジェクトには,ルートとなるFrameを取得するためのrootプロパティーが用意されているとドキュメントには書いてあるんですが,ない.
しかも,あるFrameの子のオブジェクトのコレクションとしてsubviewsプロパティーがあると書いてあるんだけど,それもない.
さらに,Frameに子を追加するメソッドとして,addSubviewというのがあって,これはまあ動くんだけど,次のコードでは子がちゃんと追加されない.
var img = new Image();
img.src = "some path or url...";
frm.addSubview(img);
なぜ追加されないんだろう?と調べてみると,どうもImageのインスタンスがスコープから抜けた時点で開放されちゃってるくさい.
グローバルに配列を用意しておいて,それにpushしたら表示してくれる.
普通,リファレンスカウント増やすだろ・・・
どうも,コントロールを管理する気がないようだ.
それから,XMLDOMでもハマった.
PerlのSOAP::Liteを使ったXMLRPCサーバーに対して,YWEのXMLDOMでリクエストを作って送るとエラーになる.
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>
mt.supportedMethods
</methodName>
<params/>
</methodCall>
こっちなら大丈夫.
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>mt.supportedMethods</methodName>
<params/>
</methodCall>
どちらもXMLとしては間違っていないけれど,SOAP::LiteのXML parserはinnerTextをtrimしてくれないようだ.
まあ,どっちかというとYWEのDOMがその辺を意識していないのが悪いんだろうけど.
なんかこういう無頓着に作られたものって嫌だね.
キレイに見えるWidgetも裏ではこんなドロドロなんだなぁ,というか,こんないい加減な仕様だからはやんねーんじゃねーかとか.
Vistaのはこんなヘロヘロじゃないんだろうなぁ・・・
コメント (1)
むかし1週間くらいだけいじったときもmac版はちゃんと動くけどwindows版はcookieがへんだったり、複数業のテキストエリアの描画に異常があったり、実装がひどかったよ。
vistaは5月まで使えるプレビューリリースをもらったので、下旬になったらいじってみるよー。みたかんじふつうにHTML+jsでajaxでコードを書く漢字で書けそうな感じだったけどどうなんだろう。> windows gadget
投稿者: ku | 2007年2月10日 16:03
日時: 2007年2月10日 16:03