0 Comments
XojoDojo

XojoDojo 第二回「1行追加する為に六千文字で説明するよ」


 第一回いかがだったでしょうか? Xojoでさくっと手軽にデスクトップアプリケーションができることがわかってもらえたかなあと思います。さて今回は前回作ったプロジェクトを改造しながらもうちょっと細かい部分を見てみる事にします。

 前回はドロップされた「画像ファイルがウィンドウ内に表示される」というアプリを作りました。とっても手軽なアプリケーションです。こいつをちょっと改造してみましょう。そうですねー、表示されている画像のファイル名を Window のタイトル(上辺の文字列)として表示するなんてのはどうでしょう。

xojodojo2_1.png

【アプリの中に存在する物には大抵名前がある】
 アプリケーションを起動すると表示されるウィンドウ。プロジェクト内ではこのウィンドウに「Window1」という名前が付いています。ここでちょっと確認してみましょう。

1:IDEの左のフレーム内で「Window1」を選択します
   →IDE中央のフレームにWindow1が表示されます
xojodojo2_2.png

2:IDE右上の「インスペクタ」をクリックします
   →IDE右側のフレームにWindow1の設定値が表示されます
    ※「インスペクタ」をクリックするたびに表示非表示が切り替わります
xojodojo2_3.png

 IDE右側のフレームに注目してください。ここに表示されているのが現在選択中の「Window1」の設定値です。設定値の中にある「Name」がそのものずばりの名前です。他にも「Super」や「Interfaces」なんてありますが、まあ解りやすいもので言えばSizeっていうところにある「Width」や「Height」でしょう。

xojodojo2_4.png

 これもそのものずばりの値で、Window1 の幅と高さです。試しに Width の部分に 500 と入力してリターンキーを押してください。いかがでしょう? Window1 の幅が変わったかと思います。おそらく前回のプロジェクトのままだとこの状態で ImageWell1 が Window1 からはみ出してしまっていると思うのでサイズが変わる事を確認できたらまた元の数値に戻すか、ImageWell1 が Window1 に収まるようにリサイズしてしまいましょう。さて引き続き他の値を見てみると「Title」という項目があると思います。値には「名称未設定」という文字列が入っているはずです。中央のフレームに表示された Window1 のタイトルにも「名称未設定」と表記してあります。そう、この「Title」という値が Window1 のタイトルに表示される文字列となります。これも試しに「テスト」と入力してリターンキーを押してみて下さい。Window1 の名称未設定が変化したはずです。

 Window1 のタイトル部分に表示される文字列には「Title」という名称があります。このようにアプリケーション上に存在する物には大抵名前がついています。タイトルの表示文字列を変更したければこの Window1 の Title を変更すればいいわけです。それでは「解った事」と「これからやりたい事」をまとめて「やるべき事」を確認してみましょう。

やりたい事:Window1 のタイトルに表示される文字列をファイル名にしたい
解った事:Window1 のタイトルに表示される文字列を変更するには Window1 の Title を変更すればいい
やるべき事:Window1 の Title の値にファイル名を設定すればいい

 さあ、やるべき事が解りました。さて、ここで新しい疑問が生まれます。それは、

「ファイル名を Window1 の Title に設定って、そもそもどうやるのよ? 手で入力すんの?」

 ということです。さあそう思ったのなら、いよいよプログラミングの開始です。手でやる事をコンピューターにやらせてこそのプログラミングです。頑張るぞ、おーっ!

 前回の内容を思い出してください。前回の処理の中で何かを変化させましたよね? そう、ファイルをドロップした時に「画像が表示される」ようにしました。この処理ですが改めていいますと ImageWell1 の「Image」という値に画像を設定することで画像を画面に表示しています。

 前回は ImageWell1 の DropObject イベントが発生した時に ImageWell1 の Image に値をセットしました。ドロップされたファイルの画像データを取得していたのですから、ドロップされたファイルのファイル名も取得できるかもしれません。ImageWell1 の Image を変更できたんだから Window1 の Title だって変更できるかもしれません。どうやら今回も ImageWell1 の DropObject イベントの中で何かをやれば事足りそうな感じです。

【アプリの中に飛び込んできたファイルはどこにあるのか】
 アプリを起動すると App が生まれます。App が生まれると App から呼ばれた Window1 が生まれます。Window1 が生まれると Window1 の中にいる ImageWell1 も生まれます。こうやって活動を始めたアプリケーションのメンバー達、起動後はアイドル状態でみんな暇をしています。そんな時 ImageWell1 目がけて画像ファイルをドロップ! ImageWell1 は慌ててそのファイルを受け止めます。DropObject イベント発生です。ファイルが ImageWell1 に渡された時にイベントは発生するので既に ImageWell1 はファイルを受け取っています。さて、ファイルを受け取っていると言っても、アプリの中のいったいどこにあるのでしょうか? それが DropObject イベントに準備されている「obj」というものです。

 そもそも DropObject イベントは何かがドロップされた際に発生するものです。何かを渡されることが前提となっているので、その何かを入れる袋をアプリはすでに準備しています。その袋が「obj」です。objについて何処に書いてあるかといえば DropObject イベントのコードの上のほうに表示されている、
DropObject(obj As DragItem, action As Integer)
 の部分です。

xojodojo2_5.png

 この部分はイベント定義と言われる部分でイベントの名前とそのイベントが発生した時に同時に使える値が()の中に記述してあります。obj As DragItem とあるのが obj を定義している部分です。obj As DragItem という部分は「obj ってのは DragItem だからね」という意味になっています。イベント発生と同時に obj という名前の DragItem が誕生し、ドロップされた「何か」はこの obj の中に入っているわけです。

 敢えてここで「何か」と言っているのは理由があります。そもそもマウスを使ってファイルを投げ込んだ本人は投げ込んだ物が「ファイル」だと解っていますが、投げ込まれたほうの App はそれがファイルだとはすぐにわかりません。何故ならマウスでドラッグできる物はファイルやフォルダだけではないからです。IE や Safari 等のブラウザ上に表示されている画像を選択してドラッグもできます。メモ帳などのテキストエディタで文字を選択した後に、それをドラッグすることもできます。これらは全て「マウスでドラッグされている物」であることは間違いありません。そこで Xojo ではこの「マウスでドラッグされている物」に DragItem という種別を与えて、

「DragObj イベント発生時に投げ込まれた obj は DragItem である」

 という最低限の情報をお知らせしてくれているわけです。

 ここで「DragItem という種別」という言葉が出てきました。この種類・種別のことを「クラス」と呼びます。英単語の Class なので直訳すれば「種類・分類」という意味、そのままですね。obj のクラスは DragItem、ということになります。クラス名が解ると、おのずと obj がどういった物かがわかってきます。Xojo のリファレンスマニュアルを開いて DragItem を見てみることにしましょう。

1:Xojo のメニューバーの「ヘルプ」から「言語リファレンス」を選択します

xojodojo2_6.png

  →言語リファレンスウィンドウが表示されます
xojodojo2_7.png


2:画面下にあるアルファベット順 index にある DragItem をクリックします
xojodojo2_8.png

  →DragItem の解説が表示されます
xojodojo2_9.png


 ここで見てもらいたいのは「Properties」という項目です。プロパティーズと読みます。

xojodojo2_10.png

 ここに DragItem がどういった値を持っているかが記載されています。これらの値のことを「プロパティ」と呼びます。ここで言う property は直訳すれば「持っている特徴や特性」といった感じでしょうか。ですので、この一覧を見れば DragItem がどんな値を持っているのかが解るわけです。

 この一覧の中に前回のプロジェクトで使った値があるのがおわかりでしょうか? 前回のプロジェクトで使ったプロパティは「FolderItemAvailable」です。このプロパティは何を表しているかというと「obj の中に入っているのはファイルやフォルダか?」の答えが入っています。ファイルやフォルダをドラッグして出来た DragItem の場合このプロパティの中には「Yes」が、テキストやブラウザから画像をデータを直接ドラッグした場合等は「No」が入っています。ここの値が Yes であればドラッグしてきた「何か」は「ファイルだよ」ということがわかるわけです。この値が「No」であればドラッグしてきた「何か」はファイルでは無いということがわかります。「ドラッグされてきた物がファイルかな?」を調べるために確認するプロパティが FolderItemAvaliable です。この他にも PictureAvailable TextAvailable などをチェックすると画像やテキストがドラッグされてきたのかをチェックできます。

 さて DragItem の中にファイルが入っているかどうかをチェックするには FolderItemAvaliable を確認すればいいということは解りました。ただ FolderItemAvaliable をチェックして「ファイル入ってるよー」と言われた場合どうやったらそのファイルの情報を取得できるのでしょうか。それにはまた1つ新たなクラスに登場してもらう必要があります。それが FolderItem クラスです。ドラッグされてきたアイテムが DragItem クラスとして定義されていたように、アプリケーション内で扱える物には大抵クラスが定義されています。ファイルやフォルダを表すクラスが FolderItem クラスになります。ここでまた DragItem クラスのリファレンスを見てみましょう。そこにあるプロパティに「FolderItem」という物があるはずです。リファレンスのプロパティ名をクリックして Folderitem プロパティの詳細を見てみましょう。

xojodojo2_2.png
xojodojo2_2.png


 そこには、

「DragItem.FolderItem Property (As FolderItem)」

xojodojo2_2.png

 と書いてあるかと思います。as Dragitem でもあったようにこれは、

「DragItem の FolderItem プロパティの種別は FolderItem です」

 という意味です。プロパティ名とクラス名が同じなのでちょっとややこしいですが、プロパティ名とクラス名を混同しないように注意しましょう。さあ、ここでまたちょっと新しい展開ですね。いままでプロパティの中の値は文字列や数字が主でしたがこの FolderItem プロパティには FolderItem が入っています。プロパティの中には数字や文字やクラスを表すデータ、いろいろな物が入っています。プロパティの「as ○○」をちゃんと確認して何が入っているのかを理解して使うようにしましょう。

 さあ、これで DragItem の中に入っている FolderItem を特定できました。ここでさらに突っ込んで FolderItem クラスのリファレンスを見てみましょう。今開いている画面の中で「FolderItem」と書かれている部分が青くなっているはずです。そこをクリックすると FolderItem のリファレンスを開くことができます。

xojodojo2_2.png

 FolderItem のプロパティの中にファイル名らしき物はありませんか? はい、すぐわかりますね。「Name」プロパティがファイル名となります。ただ、実はもうひとつ似たようなプロパティがあります「DisplayName」というものです。

xojodojo2_2.png

「Name」と「DisplayName」は何が違うのかというのはまた今度説明しますが簡単に言えば普段目にしている Finder や Explorer などで表示されているファイル名が「DisplayName」です「Name」はディスク上にある本当のファイル名です。ですので今回は普段目にしているファイル名である「DisplayName」を使う事にしましょう。

 いやー、すっかり説明が長くなってしまいましたが、調べた事をふまえて改めて処理の内容を書くと。

「DropObject イベントで使用できる obj の中にある FolderItem のプロパティ DisplayName を Window1 の Title プロパティの値に設定する」

 長かった。ここまですんごい文章を費やしてしまいました。さっそくプログラミングをしていきましょう。ここまで解っていればもうほとんど悩むことはありません。ついでに前回のプログミング内容もチェックしながらさくっと実装してしまいましょう。

【いよいよプログラミングです】
 前回のプログラムに追加するのは一行だけです。

Window1.Title = obj.FolderItem.DisplayName

 これを前回編集した DropObject イベントの部分に記入します。

xojodojo2_2.png

 終わった、終わっちゃったよ。この一行を追加する為にすんげー文字数を費やしてしまいましたがこれで終わりです。あとは前回同様、アプリケーションを実行して挙動を確認してください。問題がなければ画像が表示されると同時にWindow1のTitle部分にファイル名が表示されているはずです。


XojoDojo ここがポイント「アプリだって生きているんだ友達なんだー」
 Geek(ギーク)、という言葉があります。もともとはあまり良い意味の言葉ではありませんでしたが、現在ではコンピュータやIT等の分野で非常に優れた知識を有する人達のことをさす言葉として使われています。あえてここでは「ギーク」と「一般人」という言い方をしますが、このギークと一般人を比較して決定的に違う点があります。特に顕著なのが俗にコンピュータ音痴と言われる人との違いです。みなさんの友人にも一人はいると思いますが、

「私パソコンとか苦手なんだよねー」

「なんかインターネット見てるとすぐ止まっちゃうんだよ」

 などと日頃からアナウンスしている人達です。これらの人達がパソコンを使う様子を見ていると共通しているのが、

「無理をさせすぎ」

 という点です。おそらくここで、

「無理って何言ってるの? 相手は機械だろ?」

 なんてことを思った人が、もしかしたらいるかもしれません。その考え方こそが、ギークと一般人の違いです。ギークはパソコンの事を機械なんて思っていません。同僚や友人のように感じています。いわゆるパソコンを擬人化して捉えているのです。ですからブラウザで10個も20個もタブやウィンドウをを開いているのを見ると、

「うわ、これはまた可哀想なことを。こんなにたくさん開いたらパソコン泣いちゃうよ」

 と言いながらパソコンの処理が重くなって困っている人に声をかける訳です。こうやってパソコンを擬人化してとらえているギークですが、実はアプリケーションも擬人化してとらえている人が多いです。まあ擬人化というか一つのキャラクターとして捉えています。アプリをダブルクリックで起動する。アプリケーションは起動することで実体としてあらわれます。アプリケーションの実行ファイルは、あくまでも

「起動されたらこう動きなさい」

 という指示を書いたファイルでしかありません。アプリケーションは起動することで初めて私たちの作業を手伝ってくれるパートナーとして実在化してくれるわけです。そしてこの、

「アプリケーションが実在化するまでの手順」

 が前回の XojoDojo ここがポイントでご紹介したアプリケーションの実行順序となります。アプリケーションは起動することで生まれる私たちの大切なパートナーです。このパートナーをどんどん優秀にしてくれるとても楽しいものがプログラミングです。それでは次回も楽しくプログラミングしていきましょう。

ひらくん
Posted byひらくん

Comments 0

There are no comments yet.

Leave a reply