DefaultFolder 階層構造が微妙に違うwindowsとmac

これはwindows上で、LiveCodeを立ち上げた状態で作ったスタックで、DefaultFolderを求めさせたもの。ここでの返り値はスタックの収納されているフォルダー。つまり、スタックの位置からすると一つ上の階層を返している。

これはmac上で、LiveCodeを立ち上げた状態で作ったスタックで、DefaultFolderを求めさせたもの。ここでの返り値はLiveCode本体の位置。収納されたフォルダーは最後のアイテムを削除して求める。以下のように。

get the defaultFolder
set the itemDelimiter to “/”
delete last item of it

これはwindows上でanswerスクリブトを使って、他のスタックのバスを求めさせたもの。
answer fileで、ファイルを選ばせてそのパスを求める場合、ファイルを指定することになる。
返り値は、フォルダーではなく、ファイルそのものの位置。

これはmac上でスタンドアロンに書き出してアプリケーションにしたスタックでデフォルトフォルダーを求めさせたもの。
フォルダー[MacOSX]に収納されたアプリそのものの位置を答えている。

スタックをスタンドアロンAppにした時の、スクリブトの動きについて。
 mac版の場合、スタンドアロンAppはバンドル構造になって、Finder上ではひとつのファイルのアイコンのように見えるが、実際はフォルダーの変形とでもいうようなもので、アイコンにカーソルを合わせて右クリックすると、その内容を見ることができます。
 windows用にスタンドアロンAppにすると、mac版とは違い、フォルダーの中に、.exeファイルのアプリケーションと、その付属ファイルを収納するフォルダーができます。

 なぜこんなことが問題になるかというと、LiveCode コミュニティ版ではスタンドアロンにしてしまうとスタックの変更が保存できないからです。
 LiveCode Communityのバージョン7までは「メインスタックは保存できないがサブスタックは変更の保存が可能」だったのですが、どうも現在のバージョンではそれもできなくなったようです。
 そこで、スタックの使うデータは全てテキストデータとしてスタック外部に保存し、スタックを立ち上げる時にそれを読み込み、終了するときに書き戻すということを考えました。
 ここで、アプリケーションの置かれたフォルダーに、子フォルダーを作りデータを記録した書類を収納するよりは、アプリケーション自体に子フォルダーをバンドルして取り込んでしまった方が、ユーザーによる不慮の事故を防げると考えました。
 mac版ではこれが可能です。しかし、windows版では、アプリケーションの.exeファイルの中に子フォルダーを作ることはできませんので、アプリケーションの置かれたフォルダーに子フォルダーを並べておくことになります。

 そうすると、デフォルトフォルダーのバスを求めるスクリプトや、別のスタックを指定してパスを求めるスクリプトを書いたとき、mac用とwindows用では、修正が必要になります。
 具体的には「パスの最後のアイテムを削除するかどうか」です。

 

コメント

タイトルとURLをコピーしました