2013年8月30日金曜日

Visual Basicはじめました

ひょんなことからその原型が1990年代後半につくられたVisual Basicプロジェクトをメンテナンスすることになりました。
Visual Basicははじめてですが、なかなかおもしろいです。
個人的に憧れの(?)Windowsアプリをちょっとしたものなら作れるようになってきていることはうれしいです。

Visual Basic6.0 -> Visual Basic2010への移行を行なっています。
ははは(笑)、これもう文法が全然違うものになってますね。
Visual Basic6.0 ⇒ Visual Basic .NETというのにあがったときに、だいぶ言語レベルでの変更がされているようです。

1. Visual Basic6.0 -> Visual Basic2008は移行ツールがあるので、それで一度あげます。Visual Basic2008を起動して、Visual Basic6.0のプロジェクトファイル(.vbp)を開きます。
2. ものにもよるのでしょうけど、コンパイル通りませんので、とりあえず無理やりにでもコンパイルを通します。
3. Visual Basic2008 -> Visual Basic2010に移行ツールであげます(No.1と似たような操作です)。ものにもよるのでしょうけど、No.2ほどはコンパイルエラーはでませんでした。
4. No.3までのものは全く動きませんでした。ひとつひとつ機能を動かしながら、ダメなところを特定して、Visual Basic2010で動くように修正していきます。
ふつうのデバッグ作業です。

おおよそ15年前の先輩方の苦労がしのばれる工夫が随所にみられます。
メモリサイズ、実行速度そういったことを気にされていたのでしょう。
(自分が作ったものもどこかで誰かが触っていることがあるかもしれないとおもうと、ちょっとゾッとしました。)

最後に、Labelの中央寄せについて書いておきます。
Visual Basic6.0は、中央寄せを指定すると、Labelを配置した位置を中心として、左右に文字列が広がっていく感じです。
Visual Basic2010では、TextAlignをMiddleCenter等にした場合、Labelが配置された領域のなかで文字を中央に寄せる感じになります。
AutoSizeはFalseにする必要があるようです。
画面の中央に揃うように表示したい場合は、上記に加えて、LocationとSizeで画面幅分の領域を指定すればよいです。

言葉だけじゃ伝わらないとおもうので、絵をかけばよいのでしょうけど、面倒なので、「中央寄せの定義が異なっています」がポイントです。
(というかこんなことブログに書かなくても周知の事実なのでしょうけど……)

2013年8月22日木曜日

BitmapFun.zip

android Developersの Displaying Bitmaps Efficiently を勉強しています。
AsyncTaskは使ったことあるし、わかっているつもりだったのですが、ここのサンプルを読むと「こんな使い方するんだ!」という新たな驚きがありました。

サンプルコード BitmapFun.zip なのですが動かしてみると、サンプルの写真がキレイで感動すら覚えます。しかもネットワーク上の写真をHTTPで取得するサンプルでいろいろ勉強になります。

会社のパソコンでエミュレータ(AVD)で動かしたら、画像のダウンロードに失敗しました。
プロキシの影響でした。コードを書き換えると画像のダウンロードができるようになりました。

クラス: com.example.android.bitmapfun.util.ImageFetcher
メソッド: downloadUrlToStream(String, OutputStream)

urlConnection = (HttpURLConnection) url.openConnection();
これを書き直す。

↓↓↓↓
java.net.SocketAddress socketAddress = java.net.InetSocketAddress.createUnresolved("host", 50000/*port番号*/);
// java.net.SocketAddress socketAddress = new java.net.InetSocketAddress("host", 50000/*port番号*/); でもよいかも?
java.net.Proxy proxy = new java.net.Proxy(java.net.Proxy.Type.HTTP, socketAddress);
urlConnection = (HttpURLConnection) url.openConnection(proxy);

※"host"とport番号はお使いの環境にあわせてください。

詳細は HttpURLConnection を参照ください!


追伸
どうでもよいことですが、プロキシの設定をすればよいと気づいてコードを書き直したのですが、なかなか思ったとおりに動いてくれませんでした。

SocketAddress socketAddress = InetSocketAddress.createUnresolved("host", 50000/*port番号*/);
Proxy proxy = new Proxy(Proxy.Type.HTTP, socketAddress);
urlConnection = (HttpURLConnection) url.openConnection(proxy);

urlConnection = (HttpURLConnection) url.openConnection(); // proxy設定なしで、urlConnectionをセット

★の行が残ったままになっていました。
追加した行にばかり気を取られて、あれこれ悩んで、気づくまで1時間くらい時間がかかりました。。。
iTunes Store(Japan)